From a50944e078b98435685f04eda0ba93e95d4c61f2 Mon Sep 17 00:00:00 2001
From: Monty Brandenberg <monty@lindenlab.com>
Date: Tue, 19 Jun 2012 17:01:02 -0400
Subject: [PATCH] Cleanup:  move magic nubmers to new _httpinternal.h header
 file.

---
 indra/llcorehttp/CMakeLists.txt        |  1 +
 indra/llcorehttp/_httpinternal.h       | 82 ++++++++++++++++++++++++++
 indra/llcorehttp/_httplibcurl.cpp      | 17 +++---
 indra/llcorehttp/_httplibcurl.h        | 14 +----
 indra/llcorehttp/_httpoperation.cpp    |  3 +-
 indra/llcorehttp/_httpoprequest.cpp    | 62 +++++++++----------
 indra/llcorehttp/_httpoprequest.h      |  6 ++
 indra/llcorehttp/_httppolicy.cpp       |  4 +-
 indra/llcorehttp/_httppolicy.h         |  3 +-
 indra/llcorehttp/_httppolicyglobal.cpp | 10 ++--
 indra/llcorehttp/_httpservice.cpp      |  9 +--
 indra/llcorehttp/_refcounted.cpp       |  4 +-
 indra/llcorehttp/bufferarray.cpp       |  4 +-
 indra/llcorehttp/httpcommon.cpp        |  2 +-
 indra/llcorehttp/httpoptions.cpp       |  8 ++-
 indra/llcorehttp/httprequest.cpp       |  1 +
 indra/llcorehttp/httprequest.h         |  6 +-
 indra/newview/lltextureview.cpp        |  2 +-
 18 files changed, 161 insertions(+), 77 deletions(-)
 create mode 100644 indra/llcorehttp/_httpinternal.h

diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt
index 9d8bae973ec..acf4c0d6a3f 100644
--- a/indra/llcorehttp/CMakeLists.txt
+++ b/indra/llcorehttp/CMakeLists.txt
@@ -53,6 +53,7 @@ set(llcorehttp_HEADER_FILES
     httpoptions.h
     httprequest.h
     httpresponse.h
+    _httpinternal.h
     _httplibcurl.h
     _httpopcancel.h
     _httpoperation.h
diff --git a/indra/llcorehttp/_httpinternal.h b/indra/llcorehttp/_httpinternal.h
new file mode 100644
index 00000000000..bc0bd6a2ab5
--- /dev/null
+++ b/indra/llcorehttp/_httpinternal.h
@@ -0,0 +1,82 @@
+/**
+ * @file httpinternal.h
+ * @brief Implementation constants and magic numbers
+ *
+ * $LicenseInfo:firstyear=2012&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2012, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef	_LLCORE_HTTP_INTERNAL_H_
+#define	_LLCORE_HTTP_INTERNAL_H_
+
+
+// If you find this included in a public interface header,
+// something wrong is probably happening.
+
+
+namespace LLCore
+{
+
+// Maxium number of policy classes that can be defined.
+// *FIXME:  Currently limited to the default class, extend.
+const int POLICY_CLASS_LIMIT = 1;
+
+// Debug/informational tracing.  Used both
+// as a global option and in per-request traces.
+const int TRACE_OFF = 0;
+const int TRACE_LOW = 1;
+const int TRACE_CURL_HEADERS = 2;
+const int TRACE_CURL_BODIES = 3;
+
+const int TRACE_MIN = TRACE_OFF;
+const int TRACE_MAX = TRACE_CURL_BODIES;
+
+// Request retry limits
+const int DEFAULT_RETRY_COUNT = 5;
+const int LIMIT_RETRY_MIN = 0;
+const int LIMIT_RETRY_MAX = 100;
+
+const int DEFAULT_HTTP_REDIRECTS = 10;
+
+// Timeout value used for both connect and protocol exchange.
+// Retries and time-on-queue are not included and aren't
+// accounted for.
+const long DEFAULT_TIMEOUT = 30L;
+const long LIMIT_TIMEOUT_MIN = 0L;
+const long LIMIT_TIMEOUT_MAX = 3600L;
+
+// Limits on connection counts
+const int DEFAULT_CONNECTIONS = 8;
+const int LIMIT_CONNECTIONS_MIN = 1;
+const int LIMIT_CONNECTIONS_MAX = 256;
+
+// Tuning parameters
+
+// Time worker thread sleeps after a pass through the
+// request, ready and active queues.
+const int LOOP_SLEEP_NORMAL_MS = 2;
+
+// Block allocation size (a tuning parameter) is found
+// in bufferarray.h.
+
+}  // end namespace LLCore
+
+#endif	// _LLCORE_HTTP_INTERNAL_H_
diff --git a/indra/llcorehttp/_httplibcurl.cpp b/indra/llcorehttp/_httplibcurl.cpp
index a176dd5b2a2..65eb6420561 100644
--- a/indra/llcorehttp/_httplibcurl.cpp
+++ b/indra/llcorehttp/_httplibcurl.cpp
@@ -31,6 +31,8 @@
 #include "_httpoprequest.h"
 #include "_httppolicy.h"
 
+#include "llhttpstatuscodes.h"
+
 
 namespace LLCore
 {
@@ -39,7 +41,8 @@ namespace LLCore
 HttpLibcurl::HttpLibcurl(HttpService * service)
 	: mService(service)
 {
-	for (int policy_class(0); policy_class < HttpRequest::POLICY_CLASS_LIMIT; ++policy_class)
+	// *FIXME:  Use active policy class count later
+	for (int policy_class(0); policy_class < LL_ARRAY_SIZE(mMultiHandles); ++policy_class)
 	{
 		mMultiHandles[policy_class] = 0;
 	}
@@ -61,7 +64,7 @@ HttpLibcurl::~HttpLibcurl()
 		mActiveOps.erase(item);
 	}
 
-	for (int policy_class(0); policy_class < HttpRequest::POLICY_CLASS_LIMIT; ++policy_class)
+	for (int policy_class(0); policy_class < LL_ARRAY_SIZE(mMultiHandles); ++policy_class)
 	{
 		if (mMultiHandles[policy_class])
 		{
@@ -89,7 +92,7 @@ HttpService::ELoopSpeed HttpLibcurl::processTransport()
 	HttpService::ELoopSpeed	ret(HttpService::REQUEST_SLEEP);
 
 	// Give libcurl some cycles to do I/O & callbacks
-	for (int policy_class(0); policy_class < HttpRequest::POLICY_CLASS_LIMIT; ++policy_class)
+	for (int policy_class(0); policy_class < LL_ARRAY_SIZE(mMultiHandles); ++policy_class)
 	{
 		if (! mMultiHandles[policy_class])
 			continue;
@@ -144,7 +147,7 @@ HttpService::ELoopSpeed HttpLibcurl::processTransport()
 
 void HttpLibcurl::addOp(HttpOpRequest * op)
 {
-	llassert_always(op->mReqPolicy < HttpRequest::POLICY_CLASS_LIMIT);
+	llassert_always(op->mReqPolicy < POLICY_CLASS_LIMIT);
 	llassert_always(mMultiHandles[op->mReqPolicy] != NULL);
 	
 	// Create standard handle
@@ -159,7 +162,7 @@ void HttpLibcurl::addOp(HttpOpRequest * op)
 	curl_multi_add_handle(mMultiHandles[op->mReqPolicy], op->mCurlHandle);
 	op->mCurlActive = true;
 	
-	if (op->mTracing > 0)
+	if (op->mTracing > TRACE_OFF)
 	{
 		HttpPolicy & policy(mService->getPolicy());
 		
@@ -208,7 +211,7 @@ bool HttpLibcurl::completeRequest(CURLM * multi_handle, CURL * handle, CURLcode
 	}
 	if (op->mStatus)
 	{
-		int http_status(200);
+		int http_status(HTTP_OK);
 
 		curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &http_status);
 		op->mStatus = LLCore::HttpStatus(http_status);
@@ -220,7 +223,7 @@ bool HttpLibcurl::completeRequest(CURLM * multi_handle, CURL * handle, CURLcode
 	op->mCurlHandle = NULL;
 
 	// Tracing
-	if (op->mTracing > 0)
+	if (op->mTracing > TRACE_OFF)
 	{
 		LL_INFOS("CoreHttp") << "TRACE, RequestComplete, Handle:  "
 							 << static_cast<HttpHandle>(op)
diff --git a/indra/llcorehttp/_httplibcurl.h b/indra/llcorehttp/_httplibcurl.h
index 16b68bde431..0d0c4cad6dd 100644
--- a/indra/llcorehttp/_httplibcurl.h
+++ b/indra/llcorehttp/_httplibcurl.h
@@ -36,6 +36,7 @@
 
 #include "httprequest.h"
 #include "_httpservice.h"
+#include "_httpinternal.h"
 
 
 namespace LLCore
@@ -91,17 +92,8 @@ class HttpLibcurl
 protected:
 	HttpService *		mService;				// Simple reference, not owner
 	active_set_t		mActiveOps;
-	CURLM *				mMultiHandles[HttpRequest::POLICY_CLASS_LIMIT];
-};  // end class HttpLibcurl
-
-
-// ---------------------------------------
-// Free functions
-// ---------------------------------------
-
-
-curl_slist * append_headers_to_slist(const HttpHeaders *, curl_slist * slist);
-
+	CURLM *				mMultiHandles[POLICY_CLASS_LIMIT];
+}; // end class HttpLibcurl
 
 }  // end namespace LLCore
 
diff --git a/indra/llcorehttp/_httpoperation.cpp b/indra/llcorehttp/_httpoperation.cpp
index 5a31bf90e74..0d9553434ed 100644
--- a/indra/llcorehttp/_httpoperation.cpp
+++ b/indra/llcorehttp/_httpoperation.cpp
@@ -33,6 +33,7 @@
 #include "_httprequestqueue.h"
 #include "_httpreplyqueue.h"
 #include "_httpservice.h"
+#include "_httpinternal.h"
 
 #include "lltimer.h"
 
@@ -142,7 +143,7 @@ HttpStatus HttpOperation::cancel()
 
 void HttpOperation::addAsReply()
 {
-	if (mTracing > 0)
+	if (mTracing > TRACE_OFF)
 	{
 		LL_INFOS("CoreHttp") << "TRACE, ToReplyQueue, Handle:  "
 							 << static_cast<HttpHandle>(this)
diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp
index ce41ebcce0b..04a8e0baff7 100644
--- a/indra/llcorehttp/_httpoprequest.cpp
+++ b/indra/llcorehttp/_httpoprequest.cpp
@@ -42,6 +42,7 @@
 #include "_httppolicy.h"
 #include "_httppolicyglobal.h"
 #include "_httplibcurl.h"
+#include "_httpinternal.h"
 
 #include "llhttpstatuscodes.h"
 #include "llproxy.h"
@@ -73,13 +74,14 @@ void escape_libcurl_debug_data(char * buffer, size_t len, bool scrub,
 							   std::string & safe_line);
 
 
-#if defined(WIN32)
+#if LL_WINDOWS
 
 // Not available on windows where the legacy strtok interface
 // is thread-safe.
 char *strtok_r(char *str, const char *delim, char **saveptr);
 
-#endif
+#endif // LL_WINDOWS
+
 
 }
 
@@ -108,7 +110,7 @@ HttpOpRequest::HttpOpRequest()
 	  mReplyHeaders(NULL),
 	  mPolicyRetries(0),
 	  mPolicyRetryAt(HttpTime(0)),
-	  mPolicyRetryLimit(5)
+	  mPolicyRetryLimit(DEFAULT_RETRY_COUNT)
 {
 	// *NOTE:  As members are added, retry initialization/cleanup
 	// may need to be extended in @prepareRequest().
@@ -334,8 +336,8 @@ void HttpOpRequest::setupCommon(HttpRequest::policy_t policy_id,
 			mProcFlags |= PF_SAVE_HEADERS;
 		}
 		mPolicyRetryLimit = options->getRetries();
-		mPolicyRetryLimit = llclamp(mPolicyRetryLimit, 0, 100);
-		mTracing = (std::max)(mTracing, llclamp(options->getTrace(), 0, 3));
+		mPolicyRetryLimit = llclamp(mPolicyRetryLimit, LIMIT_RETRY_MIN, LIMIT_RETRY_MAX);
+		mTracing = (std::max)(mTracing, llclamp(options->getTrace(), TRACE_MIN, TRACE_MAX));
 	}
 }
 
@@ -384,7 +386,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
 	curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, 0);
 	curl_easy_setopt(mCurlHandle, CURLOPT_AUTOREFERER, 1);
 	curl_easy_setopt(mCurlHandle, CURLOPT_FOLLOWLOCATION, 1);
-	curl_easy_setopt(mCurlHandle, CURLOPT_MAXREDIRS, 10);		// *FIXME:  parameterize this later
+	curl_easy_setopt(mCurlHandle, CURLOPT_MAXREDIRS, DEFAULT_HTTP_REDIRECTS);	// *FIXME:  parameterize this later
 	curl_easy_setopt(mCurlHandle, CURLOPT_WRITEFUNCTION, writeCallback);
 	curl_easy_setopt(mCurlHandle, CURLOPT_WRITEDATA, mCurlHandle);
 	curl_easy_setopt(mCurlHandle, CURLOPT_READFUNCTION, readCallback);
@@ -452,8 +454,6 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
 			curl_easy_setopt(mCurlHandle, CURLOPT_INFILESIZE, data_size);
 			curl_easy_setopt(mCurlHandle, CURLOPT_POSTFIELDS, (void *) NULL);
 			mCurlHeaders = curl_slist_append(mCurlHeaders, "Expect:");
-			mCurlHeaders = curl_slist_append(mCurlHeaders, "Connection: keep-alive");
-			mCurlHeaders = curl_slist_append(mCurlHeaders, "Keep-alive: 300");
 		}
 		break;
 		
@@ -463,7 +463,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
 	}
 
 	// Tracing
-	if (mTracing > 1)
+	if (mTracing >= TRACE_CURL_HEADERS)
 	{
 		curl_easy_setopt(mCurlHandle, CURLOPT_VERBOSE, 1);
 		curl_easy_setopt(mCurlHandle, CURLOPT_DEBUGDATA, mCurlHandle);
@@ -478,7 +478,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
 
 		char range_line[64];
 
-#if defined(WIN32)
+#if LL_WINDOWS
 		_snprintf_s(range_line, sizeof(range_line), sizeof(range_line) - 1,
 					(mReqLength ? fmt1 : fmt2),
 					(unsigned long) mReqOffset, (unsigned long) (mReqOffset + mReqLength - 1));
@@ -486,7 +486,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
 		snprintf(range_line, sizeof(range_line),
 				 (mReqLength ? fmt1 : fmt2),
 				 (unsigned long) mReqOffset, (unsigned long) (mReqOffset + mReqLength - 1));
-#endif // defined(WIN32)
+#endif // LL_WINDOWS
 		range_line[sizeof(range_line) - 1] = '\0';
 		mCurlHeaders = curl_slist_append(mCurlHeaders, range_line);
 	}
@@ -494,11 +494,11 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
 	mCurlHeaders = curl_slist_append(mCurlHeaders, "Pragma:");
 
 	// Request options
-	long timeout(30);
+	long timeout(DEFAULT_TIMEOUT);
 	if (mReqOptions)
 	{
 		timeout = mReqOptions->getTimeout();
-		timeout = llclamp(timeout, 0L, 3600L);
+		timeout = llclamp(timeout, LIMIT_TIMEOUT_MIN, LIMIT_TIMEOUT_MAX);
 	}
 	curl_easy_setopt(mCurlHandle, CURLOPT_TIMEOUT, timeout);
 	curl_easy_setopt(mCurlHandle, CURLOPT_CONNECTTIMEOUT, timeout);
@@ -599,11 +599,11 @@ size_t HttpOpRequest::headerCallback(void * data, size_t size, size_t nmemb, voi
 		
 		memcpy(hdr_buffer, hdr_data, frag_size);
 		hdr_buffer[frag_size] = '\0';
-#if defined(WIN32)
+#if LL_WINDOWS
 		if (! _strnicmp(hdr_buffer, con_ran_line, (std::min)(frag_size, con_ran_line_len)))
 #else
 		if (! strncasecmp(hdr_buffer, con_ran_line, (std::min)(frag_size, con_ran_line_len)))
-#endif
+#endif	// LL_WINDOWS
 		{
 			unsigned int first(0), last(0), length(0);
 			int status;
@@ -654,7 +654,7 @@ int HttpOpRequest::debugCallback(CURL * handle, curl_infotype info, char * buffe
 	switch (info)
 	{
 	case CURLINFO_TEXT:
-		if (op->mTracing > 1)
+		if (op->mTracing >= TRACE_CURL_HEADERS)
 		{
 			tag = "TEXT";
 			escape_libcurl_debug_data(buffer, len, true, safe_line);
@@ -663,7 +663,7 @@ int HttpOpRequest::debugCallback(CURL * handle, curl_infotype info, char * buffe
 		break;
 			
 	case CURLINFO_HEADER_IN:
-		if (op->mTracing > 1)
+		if (op->mTracing >= TRACE_CURL_HEADERS)
 		{
 			tag = "HEADERIN";
 			escape_libcurl_debug_data(buffer, len, true, safe_line);
@@ -672,20 +672,20 @@ int HttpOpRequest::debugCallback(CURL * handle, curl_infotype info, char * buffe
 		break;
 			
 	case CURLINFO_HEADER_OUT:
-		if (op->mTracing > 1)
+		if (op->mTracing >= TRACE_CURL_HEADERS)
 		{
 			tag = "HEADEROUT";
-			escape_libcurl_debug_data(buffer, len, true, safe_line);
+			escape_libcurl_debug_data(buffer, 2 * len, true, safe_line);		// Goes out as one line
 			logit = true;
 		}
 		break;
 			
 	case CURLINFO_DATA_IN:
-		if (op->mTracing > 1)
+		if (op->mTracing >= TRACE_CURL_HEADERS)
 		{
 			tag = "DATAIN";
 			logit = true;
-			if (op->mTracing > 2)
+			if (op->mTracing >= TRACE_CURL_BODIES)
 			{
 				escape_libcurl_debug_data(buffer, len, false, safe_line);
 			}
@@ -699,11 +699,11 @@ int HttpOpRequest::debugCallback(CURL * handle, curl_infotype info, char * buffe
 		break;
 			
 	case CURLINFO_DATA_OUT:
-		if (op->mTracing > 1)
+		if (op->mTracing >= TRACE_CURL_HEADERS)
 		{
 			tag = "DATAOUT";
 			logit = true;
-			if (op->mTracing > 2)
+			if (op->mTracing >= TRACE_CURL_BODIES)
 			{
 				escape_libcurl_debug_data(buffer, len, false, safe_line);
 			}
@@ -755,22 +755,22 @@ int parse_content_range_header(char * buffer,
 	if (! strtok_r(buffer, ": \t", &tok_state))
 		match = false;
 	if (match && (tok = strtok_r(NULL, " \t", &tok_state)))
-#if defined(WIN32)
+#if LL_WINDOWS
 		match = 0 == _stricmp("bytes", tok);
 #else
 		match = 0 == strcasecmp("bytes", tok);
-#endif
+#endif // LL_WINDOWS
 	if (match && ! (tok = strtok_r(NULL, " \t", &tok_state)))
 		match = false;
 	if (match)
 	{
 		unsigned int lcl_first(0), lcl_last(0), lcl_len(0);
 
-#if defined(WIN32)
+#if LL_WINDOWS
 		if (3 == sscanf_s(tok, "%u-%u/%u", &lcl_first, &lcl_last, &lcl_len))
 #else
 		if (3 == sscanf(tok, "%u-%u/%u", &lcl_first, &lcl_last, &lcl_len))
-#endif
+#endif // LL_WINDOWS
 		{
 			if (lcl_first > lcl_last || lcl_last >= lcl_len)
 				return -1;
@@ -779,11 +779,11 @@ int parse_content_range_header(char * buffer,
 			*length = lcl_len;
 			return 0;
 		}
-#if defined(WIN32)
+#if LL_WINDOWS
 		if (2 == sscanf_s(tok, "%u-%u/*", &lcl_first, &lcl_last))
 #else
 		if (2 == sscanf(tok, "%u-%u/*", &lcl_first, &lcl_last))
-#endif
+#endif	// LL_WINDOWS
 		{
 			if (lcl_first > lcl_last)
 				return -1;
@@ -798,14 +798,14 @@ int parse_content_range_header(char * buffer,
 	return 1;
 }
 
-#if defined(WIN32)
+#if LL_WINDOWS
 
 char *strtok_r(char *str, const char *delim, char ** savestate)
 {
 	return strtok_s(str, delim, savestate);
 }
 
-#endif
+#endif // LL_WINDOWS
 
 
 void escape_libcurl_debug_data(char * buffer, size_t len, bool scrub, std::string & safe_line)
diff --git a/indra/llcorehttp/_httpoprequest.h b/indra/llcorehttp/_httpoprequest.h
index 92784457631..f2b709a3a24 100644
--- a/indra/llcorehttp/_httpoprequest.h
+++ b/indra/llcorehttp/_httpoprequest.h
@@ -172,6 +172,12 @@ class HttpOpRequestCompare
 };  // end class HttpOpRequestCompare
 
 
+// ---------------------------------------
+// Free functions
+// ---------------------------------------
+
+curl_slist * append_headers_to_slist(const HttpHeaders *, curl_slist * slist);
+
 }   // end namespace LLCore
 
 #endif	// _LLCORE_HTTP_OPREQUEST_H_
diff --git a/indra/llcorehttp/_httppolicy.cpp b/indra/llcorehttp/_httppolicy.cpp
index 0e08d882760..4be9f1d45f6 100644
--- a/indra/llcorehttp/_httppolicy.cpp
+++ b/indra/llcorehttp/_httppolicy.cpp
@@ -126,7 +126,7 @@ HttpService::ELoopSpeed HttpPolicy::processReadyQueue()
 	for (int policy_class(0); policy_class < LL_ARRAY_SIZE(mState); ++policy_class)
 	{
 		int active(transport.getActiveCountInClass(policy_class));
-		int needed(8 - active);
+		int needed(DEFAULT_CONNECTIONS - active);				// *FIXME:  move to policy class
 
 		HttpRetryQueue & retryq(mState[policy_class].mRetryQueue);
 		HttpReadyQueue & readyq(mState[policy_class].mReadyQueue);
@@ -242,7 +242,7 @@ bool HttpPolicy::stageAfterCompletion(HttpOpRequest * op)
 
 int HttpPolicy::getReadyCount(HttpRequest::policy_t policy_class)
 {
-	if (policy_class < HttpRequest::POLICY_CLASS_LIMIT)
+	if (policy_class < POLICY_CLASS_LIMIT)				// *FIXME:  use actual active class count
 	{
 		return (mState[policy_class].mReadyQueue.size()
 				+ mState[policy_class].mRetryQueue.size());
diff --git a/indra/llcorehttp/_httppolicy.h b/indra/llcorehttp/_httppolicy.h
index 4114f648488..05de9303b55 100644
--- a/indra/llcorehttp/_httppolicy.h
+++ b/indra/llcorehttp/_httppolicy.h
@@ -33,6 +33,7 @@
 #include "_httpreadyqueue.h"
 #include "_httpretryqueue.h"
 #include "_httppolicyglobal.h"
+#include "_httpinternal.h"
 
 
 namespace LLCore
@@ -108,7 +109,7 @@ class HttpPolicy
 		HttpRetryQueue		mRetryQueue;
 	};
 
-	State				mState[HttpRequest::POLICY_CLASS_LIMIT];
+	State				mState[POLICY_CLASS_LIMIT];
 	HttpService *		mService;				// Naked pointer, not refcounted, not owner
 	HttpPolicyGlobal	mGlobalOptions;
 	
diff --git a/indra/llcorehttp/_httppolicyglobal.cpp b/indra/llcorehttp/_httppolicyglobal.cpp
index 6b1de38fd64..ca04839eafa 100644
--- a/indra/llcorehttp/_httppolicyglobal.cpp
+++ b/indra/llcorehttp/_httppolicyglobal.cpp
@@ -26,6 +26,8 @@
 
 #include "_httppolicyglobal.h"
 
+#include "_httpinternal.h"
+
 
 namespace LLCore
 {
@@ -33,8 +35,8 @@ namespace LLCore
 
 HttpPolicyGlobal::HttpPolicyGlobal()
 	: mSetMask(0UL),
-	  mConnectionLimit(32L),
-	  mTrace(0),
+	  mConnectionLimit(DEFAULT_CONNECTIONS),
+	  mTrace(TRACE_OFF),
 	  mUseLLProxy(0)
 {}
 
@@ -64,11 +66,11 @@ HttpStatus HttpPolicyGlobal::set(HttpRequest::EGlobalPolicy opt, long value)
 	switch (opt)
 	{
 	case HttpRequest::GP_CONNECTION_LIMIT:
-		mConnectionLimit = value;
+		mConnectionLimit = llclamp(value, long(LIMIT_CONNECTIONS_MIN), long(LIMIT_CONNECTIONS_MAX));
 		break;
 
 	case HttpRequest::GP_TRACE:
-		mTrace = llclamp(value, 0L, 3L);
+		mTrace = llclamp(value, long(TRACE_MIN), long(TRACE_MAX));
 		break;
 
 	case HttpRequest::GP_LLPROXY:
diff --git a/indra/llcorehttp/_httpservice.cpp b/indra/llcorehttp/_httpservice.cpp
index 87a78820f50..25f64acc424 100644
--- a/indra/llcorehttp/_httpservice.cpp
+++ b/indra/llcorehttp/_httpservice.cpp
@@ -34,15 +34,12 @@
 #include "_httppolicy.h"
 #include "_httplibcurl.h"
 #include "_thread.h"
+#include "_httpinternal.h"
 
 #include "lltimer.h"
 #include "llthread.h"
 
 
-// Tuning parameters
-static const int LOOP_SLEEP_NORMAL_MS = 2;		// Normal per-loop sleep in milliseconds
-
-
 namespace LLCore
 {
 
@@ -230,11 +227,11 @@ HttpService::ELoopSpeed HttpService::processRequestQueue(ELoopSpeed loop)
 		if (! mExitRequested)
 		{
 			// Setup for subsequent tracing
-			long tracing(0);
+			long tracing(TRACE_OFF);
 			mPolicy->getGlobalOptions().get(HttpRequest::GP_TRACE, &tracing);
 			op->mTracing = (std::max)(op->mTracing, int(tracing));
 
-			if (op->mTracing > 0)
+			if (op->mTracing > TRACE_OFF)
 			{
 				LL_INFOS("CoreHttp") << "TRACE, FromRequestQueue, Handle:  "
 									 << static_cast<HttpHandle>(op)
diff --git a/indra/llcorehttp/_refcounted.cpp b/indra/llcorehttp/_refcounted.cpp
index 11d75fdf97d..e7d0b72741d 100644
--- a/indra/llcorehttp/_refcounted.cpp
+++ b/indra/llcorehttp/_refcounted.cpp
@@ -30,11 +30,11 @@
 namespace LLCoreInt
 {
 
-#if		! defined(WIN32)
+#if		! LL_WINDOWS
 
 const S32 RefCounted::NOT_REF_COUNTED;
 
-#endif	// ! defined(WIN32)
+#endif	// ! LL_WINDOWS
 
 RefCounted::~RefCounted()
 {}
diff --git a/indra/llcorehttp/bufferarray.cpp b/indra/llcorehttp/bufferarray.cpp
index ae92057df09..5eaa60c9ba9 100644
--- a/indra/llcorehttp/bufferarray.cpp
+++ b/indra/llcorehttp/bufferarray.cpp
@@ -85,9 +85,9 @@ class BufferArray::Block
 // ==================================
 
 
-#if	! defined(WIN32)
+#if	! LL_WINDOWS
 const size_t BufferArray::BLOCK_ALLOC_SIZE;
-#endif	// ! defined(WIN32)
+#endif	// ! LL_WINDOWS
 
 BufferArray::BufferArray()
 	: LLCoreInt::RefCounted(true),
diff --git a/indra/llcorehttp/httpcommon.cpp b/indra/llcorehttp/httpcommon.cpp
index 9f17b5c8426..1b189763599 100644
--- a/indra/llcorehttp/httpcommon.cpp
+++ b/indra/llcorehttp/httpcommon.cpp
@@ -54,9 +54,9 @@ std::string HttpStatus::toHex() const
 	result.fill('0');
 	result << std::hex << operator unsigned long();
 	return result.str();
-	
 }
 
+
 std::string HttpStatus::toString() const
 {
 	static const char * llcore_errors[] =
diff --git a/indra/llcorehttp/httpoptions.cpp b/indra/llcorehttp/httpoptions.cpp
index c11d89e6196..f2771c1f29a 100644
--- a/indra/llcorehttp/httpoptions.cpp
+++ b/indra/llcorehttp/httpoptions.cpp
@@ -26,6 +26,8 @@
 
 #include "httpoptions.h"
 
+#include "_httpinternal.h"
+
 
 namespace LLCore
 {
@@ -34,9 +36,9 @@ namespace LLCore
 HttpOptions::HttpOptions()
 	: RefCounted(true),
 	  mWantHeaders(false),
-	  mTracing(0),
-	  mTimeout(30),
-	  mRetries(5)
+	  mTracing(TRACE_OFF),
+	  mTimeout(DEFAULT_TIMEOUT),
+	  mRetries(DEFAULT_RETRY_COUNT)
 {}
 
 
diff --git a/indra/llcorehttp/httprequest.cpp b/indra/llcorehttp/httprequest.cpp
index 2036ecfd1c4..e906ff8a1e6 100644
--- a/indra/llcorehttp/httprequest.cpp
+++ b/indra/llcorehttp/httprequest.cpp
@@ -108,6 +108,7 @@ HttpStatus HttpRequest::setPolicyGlobalOption(EGlobalPolicy opt, const std::stri
 
 HttpRequest::policy_t HttpRequest::createPolicyClass()
 {
+	// *FIXME:  Implement classes
 	policy_t policy_id = 1;
 	
 	return policy_id;
diff --git a/indra/llcorehttp/httprequest.h b/indra/llcorehttp/httprequest.h
index 4e78ed37190..24fff24b830 100644
--- a/indra/llcorehttp/httprequest.h
+++ b/indra/llcorehttp/httprequest.h
@@ -102,10 +102,6 @@ class HttpRequest
 	/// eventual service for any HTTP request.
 	static const int DEFAULT_POLICY_ID = 0;
 
-	/// Maximum number of policies that may be defined.  No policy
-	/// ID will equal or exceed this value.
-	static const int POLICY_CLASS_LIMIT = 1;
-	
 	enum EGlobalPolicy
 	{
 		/// Maximum number of connections the library will use to
@@ -163,7 +159,7 @@ class HttpRequest
 	/// Create a new policy class into which requests can be made.
 	///
 	/// @return			If positive, the policy_id used to reference
-	///					the class in other methods.  If -1, an error
+	///					the class in other methods.  If 0, an error
 	///					occurred and @see getStatus() may provide more
 	///					detail on the reason.
 	static policy_t createPolicyClass();
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index a4227ec2fff..ae2da84eddf 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2001&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2012, Linden Research, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
-- 
GitLab