diff options
| author | Robert Knop <prospero@lindenlab.com> | 2009-02-06 19:14:32 +0000 | 
|---|---|---|
| committer | Robert Knop <prospero@lindenlab.com> | 2009-02-06 19:14:32 +0000 | 
| commit | ea8e83274ae76598ff7a97eb50991e9f4826091b (patch) | |
| tree | 4754fa5a431c0470a3f25ac8f89d905c1c714700 | |
| parent | 6861459c48f72bb714f307d44e59317a466887bc (diff) | |
svn merge -r 108748:109731 svn+ssh://svn.lindenlab.com/svn/linden/branches/server/server-1.25
Merge server 1.25 back to trunk
Conflicts:
C    indra/llcommon/llversionserver.h  : svn reverted
C    indra/tools/bill/MoneyMachine.pm : one conflict, only difference
                                        was a blank line.
C    indra/newsim/lllslmanager.cpp : kept merge-right, in consultation
C    indra/newsim/lllslmanager.h   :   with babbage
C    indra/newsim/llagentinfo.cpp  : (runNested, not runSpecial)
C    indra/test/test_entity_query.py        : Kept merge-right
C    indra/test/test_agent_linden_dollar.py : Kept merge-right
                  --> Kartic fixed these testes in server-1.25
C    indra/test/template/httpd.tmpl : Kept merge-right
                                      (the IfModule version)
| -rw-r--r-- | indra/llcommon/llversionserver.h | 2 | ||||
| -rw-r--r-- | indra/llmessage/llurlrequest.cpp | 49 | ||||
| -rw-r--r-- | indra/llmessage/llurlrequest.h | 13 | ||||
| -rw-r--r-- | indra/lscript/lscript_execute.h | 7 | ||||
| -rw-r--r-- | indra/lscript/lscript_execute/lscript_execute.cpp | 5 | 
5 files changed, 35 insertions, 41 deletions
| diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h index 04a9893d66..7593eeae37 100644 --- a/indra/llcommon/llversionserver.h +++ b/indra/llcommon/llversionserver.h @@ -36,7 +36,7 @@  const S32 LL_VERSION_MAJOR = 1;  const S32 LL_VERSION_MINOR = 27;  const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 108794; +const S32 LL_VERSION_BUILD = 109809;  const char * const LL_CHANNEL = "Second Life Server"; diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp index d03c8dfd25..6ef97bea58 100644 --- a/indra/llmessage/llurlrequest.cpp +++ b/indra/llmessage/llurlrequest.cpp @@ -502,33 +502,25 @@ static size_t headerCallback(void* data, size_t size, size_t nmemb, void* user)  	std::string header(header_line, header_len);  	// Per HTTP spec the first header line must be the status line. -	if (!complete->haveHTTPStatus()) +	if (header.substr(0,5) == "HTTP/")  	{ -		if (header.substr(0,5) == "HTTP/") +		std::string::iterator end = header.end(); +		std::string::iterator pos1 = std::find(header.begin(), end, ' '); +		if (pos1 != end) ++pos1; +		std::string::iterator pos2 = std::find(pos1, end, ' '); +		if (pos2 != end) ++pos2; +		std::string::iterator pos3 = std::find(pos2, end, '\r'); + +		std::string version(header.begin(), pos1); +		std::string status(pos1, pos2); +		std::string reason(pos2, pos3); + +		S32 status_code = atoi(status.c_str()); +		if (status_code > 0)  		{ -			std::string::iterator end = header.end(); -			std::string::iterator pos1 = std::find(header.begin(), end, ' '); -			if (pos1 != end) ++pos1; -			std::string::iterator pos2 = std::find(pos1, end, ' '); -			if (pos2 != end) ++pos2; -			std::string::iterator pos3 = std::find(pos2, end, '\r'); - -			std::string version(header.begin(), pos1); -			std::string status(pos1, pos2); -			std::string reason(pos2, pos3); - -			int statusCode = atoi(status.c_str()); -			if (statusCode >= 300 && statusCode < 400) -			{ -				// This is a redirect, ignore it and all headers -				// until we find a normal status code. -			} -			else if (statusCode > 0) -			{ -				complete->httpStatus((U32)statusCode, reason); -			} +			complete->httpStatus((U32)status_code, reason); +			return header_len;  		} -		return header_len;  	}  	std::string::iterator sep = std::find(header.begin(),header.end(),':'); @@ -593,8 +585,7 @@ LLIOPipe::EStatus LLContextURLExtractor::process_impl(   * LLURLRequestComplete   */  LLURLRequestComplete::LLURLRequestComplete() : -	mRequestStatus(LLIOPipe::STATUS_ERROR), -	mHaveHTTPStatus(false) +	mRequestStatus(LLIOPipe::STATUS_ERROR)  {  	LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);  } @@ -611,12 +602,6 @@ void LLURLRequestComplete::header(const std::string& header, const std::string&  }  //virtual  -void LLURLRequestComplete::httpStatus(U32 status, const std::string& reason) -{ -	mHaveHTTPStatus = true; -} - -//virtual   void LLURLRequestComplete::complete(const LLChannelDescriptors& channels,  		const buffer_ptr_t& buffer)  { diff --git a/indra/llmessage/llurlrequest.h b/indra/llmessage/llurlrequest.h index 2a3b463ad3..d1facbff0f 100644 --- a/indra/llmessage/llurlrequest.h +++ b/indra/llmessage/llurlrequest.h @@ -287,11 +287,13 @@ class LLURLRequestComplete : public LLIOPipe  {  public: +	// Called once for each header received, except status lines  	virtual void header(const std::string& header, const std::string& value); -	    ///< Called once for each header received, prior to httpStatus -	virtual void httpStatus(U32 status, const std::string& reason); -	    ///< Always called on request completion, prior to complete +	// May be called more than once, particularly for redirects and proxy madness. +	// Ex. a 200 for a connection to https through a proxy, followed by the "real" status +	//     a 3xx for a redirect followed by a "real" status, or more redirects. +	virtual void httpStatus(U32 status, const std::string& reason) { }  	virtual void complete(  		const LLChannelDescriptors& channels, @@ -328,9 +330,6 @@ public:  	LLURLRequestComplete();  	virtual ~LLURLRequestComplete(); -	// The first line of an http response must be the status line -	// true if we have already parsed this line. -	bool haveHTTPStatus() const { return mHaveHTTPStatus; }  protected:  	/* @name LLIOPipe virtual implementations  	 */ @@ -349,8 +348,6 @@ protected:  	// value to note if we actually got the response. This value  	// depends on correct useage from the LLURLRequest instance.  	EStatus mRequestStatus; - -	bool mHaveHTTPStatus;  }; diff --git a/indra/lscript/lscript_execute.h b/indra/lscript/lscript_execute.h index a22c37cfe9..9a631c4c8f 100644 --- a/indra/lscript/lscript_execute.h +++ b/indra/lscript/lscript_execute.h @@ -434,6 +434,13 @@ public:  						  F32 quanta,  						  U32& events_processed, LLTimer& timer); +	// NOTE: babbage: this must be used on occasions where another script may already be executing. Only 2 levels of nesting are allowed. +	// Provided to support bizarre detach behaviour only. Do not use. +	virtual F32 runNested(BOOL b_print, const LLUUID &id, +						  const char **errorstr,  +						  F32 quanta, +						  U32& events_processed, LLTimer& timer); +  	// Run smallest possible amount of code: an instruction for LSL2, a segment  	// between save tests for Mono  	void runInstructions(BOOL b_print, const LLUUID &id, diff --git a/indra/lscript/lscript_execute/lscript_execute.cpp b/indra/lscript/lscript_execute/lscript_execute.cpp index 5630f2de0b..daa17f371c 100644 --- a/indra/lscript/lscript_execute/lscript_execute.cpp +++ b/indra/lscript/lscript_execute/lscript_execute.cpp @@ -961,6 +961,11 @@ F32 LLScriptExecute::runQuanta(BOOL b_print, const LLUUID &id, const char **erro  	return inloop;  } +F32 LLScriptExecute::runNested(BOOL b_print, const LLUUID &id, const char **errorstr, F32 quanta, U32& events_processed, LLTimer& timer) +{ +	return LLScriptExecute::runQuanta(b_print, id, errorstr, quanta, events_processed, timer); +} +  BOOL run_noop(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)  {  	if (b_print) | 
