diff options
| author | Xiaohong Bao <bao@lindenlab.com> | 2010-05-18 14:14:50 -0600 | 
|---|---|---|
| committer | Xiaohong Bao <bao@lindenlab.com> | 2010-05-18 14:14:50 -0600 | 
| commit | 9dada6bcc42dff7d7c6e17b7e65a6841b14b405b (patch) | |
| tree | c3bc6c7f21031d2c289b5d557f22dc726b3724ec | |
| parent | 3ce4cecd681f3f95c7b1fe04db75c384d0b0854e (diff) | |
EXT-7145: FIXED: make viewer to handle "URL redirect " for http texture.
| -rw-r--r-- | indra/llmessage/llcurl.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/lltexturefetch.cpp | 20 | 
2 files changed, 21 insertions, 6 deletions
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 91e11b8c0d..36874a5d48 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -365,6 +365,13 @@ U32 LLCurl::Easy::report(CURLcode code)  		responseReason = strerror(code) + " : " + mErrorBuffer;  	} +	if(responseCode >= 300 && responseCode < 400) //redirect +	{ +		char new_url[512] ; +		curl_easy_getinfo(mCurlEasyHandle, CURLINFO_REDIRECT_URL, new_url); +		responseReason = new_url ; //get the new URL. +	} +  	if (mResponder)  	{	  		mResponder->completedRaw(responseCode, responseReason, mChannels, mOutput); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 7fa04ce574..913a0b92c2 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -328,11 +328,7 @@ public:  					partial = true;  				}  			} -			else -			{ -				worker->setGetStatus(status, reason); -// 				llwarns << status << ": " << reason << llendl; -			} +  			if (!success)  			{  				worker->setGetStatus(status, reason); @@ -904,7 +900,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  				if (mGetStatus == HTTP_NOT_FOUND)  				{  					mHTTPFailCount = max_attempts = 1; // Don't retry -					//llinfos << "Texture missing from server (404): " << mUrl << llendl; +					llwarns << "Texture missing from server (404): " << mUrl << llendl;  					//roll back to try UDP  					mState = INIT ; @@ -921,6 +917,17 @@ bool LLTextureFetchWorker::doWork(S32 param)  					max_attempts = mHTTPFailCount+1; // Keep retrying  					LL_INFOS_ONCE("Texture") << "Texture server busy (503): " << mUrl << LL_ENDL;  				} +				else if(mGetStatus >= HTTP_MULTIPLE_CHOICES && mGetStatus < HTTP_BAD_REQUEST) //http re-direct +				{ +					++mHTTPFailCount; +					max_attempts = 5 ; //try at most 5 times to avoid infinite redirection loop. + +					llwarns << "HTTP GET failed because of redirection: "  << mUrl +							<< " Status: " << mGetStatus << " Reason: '" << mGetReason << llendl ; + +					//assign to the new url +					mUrl = mGetReason ; +				}  				else  				{  					const S32 HTTP_MAX_RETRY_COUNT = 3; @@ -930,6 +937,7 @@ bool LLTextureFetchWorker::doWork(S32 param)  							<< " Status: " << mGetStatus << " Reason: '" << mGetReason << "'"  							<< " Attempt:" << mHTTPFailCount+1 << "/" << max_attempts << llendl;  				} +  				if (mHTTPFailCount >= max_attempts)  				{  					if (cur_size > 0)  | 
