diff options
| author | Rider Linden <none@none> | 2015-03-27 17:00:02 -0700 | 
|---|---|---|
| committer | Rider Linden <none@none> | 2015-03-27 17:00:02 -0700 | 
| commit | 735364038767694ea29d9b6a168410e6482cc9c2 (patch) | |
| tree | 7f04704516d6c5d537bca1fc9290a2beb268c820 /indra/llcorehttp | |
| parent | b9e80807091aa7a27f1a10a23dd32bbb292d9dfb (diff) | |
first set of chnages from code review from Nat
Diffstat (limited to 'indra/llcorehttp')
| -rwxr-xr-x | indra/llcorehttp/_httpoprequest.cpp | 10 | ||||
| -rwxr-xr-x | indra/llcorehttp/_httpoprequest.h | 5 | ||||
| -rwxr-xr-x | indra/llcorehttp/_httppolicyglobal.cpp | 4 | ||||
| -rwxr-xr-x | indra/llcorehttp/_httppolicyglobal.h | 6 | ||||
| -rwxr-xr-x | indra/llcorehttp/_httpservice.cpp | 4 | ||||
| -rwxr-xr-x | indra/llcorehttp/_httpservice.h | 6 | ||||
| -rwxr-xr-x | indra/llcorehttp/httpcommon.h | 75 | ||||
| -rwxr-xr-x | indra/llcorehttp/httpoptions.cpp | 8 | ||||
| -rwxr-xr-x | indra/llcorehttp/httpoptions.h | 90 | ||||
| -rwxr-xr-x | indra/llcorehttp/httprequest.cpp | 10 | ||||
| -rwxr-xr-x | indra/llcorehttp/httprequest.h | 4 | 
11 files changed, 118 insertions, 104 deletions
| diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp index 48e22468cd..5768fe5a90 100755 --- a/indra/llcorehttp/_httpoprequest.cpp +++ b/indra/llcorehttp/_httpoprequest.cpp @@ -115,9 +115,8 @@ namespace LLCore  { -HttpOpRequest::HttpOpRequest(HttpRequest const * const request) +HttpOpRequest::HttpOpRequest()  	: HttpOperation(), -	  mRequest(request),  	  mProcFlags(0U),  	  mReqMethod(HOR_GET),  	  mReqBody(NULL), @@ -490,13 +489,13 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)  	long follow_redirect(1L);  	long sslPeerV(0L);  	long sslHostV(0L); -	long dnsCacheTimeout(15L); +    long dnsCacheTimeout(-1L);  	if (mReqOptions)  	{  		follow_redirect = mReqOptions->getFollowRedirects() ? 1L : 0L; -		sslPeerV = mReqOptions->getSSLVerifyHost() ? 0L : 1L; -		sslHostV = mReqOptions->getSSLVerifyHost(); +		sslPeerV = mReqOptions->getSSLVerifyPeer() ? 1L : 0L; +		sslHostV = mReqOptions->getSSLVerifyHost() ? 2L : 0L;  		dnsCacheTimeout = mReqOptions->getDNSCacheTimeout();  	}  	code = curl_easy_setopt(mCurlHandle, CURLOPT_FOLLOWLOCATION, follow_redirect); @@ -516,7 +515,6 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)  	code = curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, dnsCacheTimeout);  	check_curl_easy_code(code, CURLOPT_DNS_CACHE_TIMEOUT); -  	if (gpolicy.mUseLLProxy)  	{  		// Use the viewer-based thread-safe API which has a diff --git a/indra/llcorehttp/_httpoprequest.h b/indra/llcorehttp/_httpoprequest.h index 7a4b7c189e..e71d1d1edf 100755 --- a/indra/llcorehttp/_httpoprequest.h +++ b/indra/llcorehttp/_httpoprequest.h @@ -66,7 +66,7 @@ class HttpOptions;  class HttpOpRequest : public HttpOperation  {  public: -	HttpOpRequest(HttpRequest const * const request); +	HttpOpRequest();  protected:  	virtual ~HttpOpRequest();							// Use release() @@ -165,11 +165,10 @@ protected:  	static const unsigned int	PF_SAVE_HEADERS = 0x00000002U;  	static const unsigned int	PF_USE_RETRY_AFTER = 0x00000004U; -	HttpRequest::policyCallback	mCallbackSSLVerify; +	HttpRequest::policyCallback_t	mCallbackSSLVerify;  public:  	// Request data -	HttpRequest const * const mRequest;  	EMethod				mReqMethod;  	std::string			mReqURL;  	BufferArray *		mReqBody; diff --git a/indra/llcorehttp/_httppolicyglobal.cpp b/indra/llcorehttp/_httppolicyglobal.cpp index c4ef38a815..3d0df96ade 100755 --- a/indra/llcorehttp/_httppolicyglobal.cpp +++ b/indra/llcorehttp/_httppolicyglobal.cpp @@ -106,7 +106,7 @@ HttpStatus HttpPolicyGlobal::set(HttpRequest::EPolicyOption opt, const std::stri  	return HttpStatus();  } -HttpStatus HttpPolicyGlobal::set(HttpRequest::EPolicyOption opt, HttpRequest::policyCallback value) +HttpStatus HttpPolicyGlobal::set(HttpRequest::EPolicyOption opt, HttpRequest::policyCallback_t value)  {  	switch (opt)  	{ @@ -169,7 +169,7 @@ HttpStatus HttpPolicyGlobal::get(HttpRequest::EPolicyOption opt, std::string * v  } -HttpStatus HttpPolicyGlobal::get(HttpRequest::EPolicyOption opt, HttpRequest::policyCallback * value) const +HttpStatus HttpPolicyGlobal::get(HttpRequest::EPolicyOption opt, HttpRequest::policyCallback_t * value) const  {  	switch (opt)  	{ diff --git a/indra/llcorehttp/_httppolicyglobal.h b/indra/llcorehttp/_httppolicyglobal.h index 1696238814..e02da4386a 100755 --- a/indra/llcorehttp/_httppolicyglobal.h +++ b/indra/llcorehttp/_httppolicyglobal.h @@ -60,10 +60,10 @@ private:  public:  	HttpStatus set(HttpRequest::EPolicyOption opt, long value);  	HttpStatus set(HttpRequest::EPolicyOption opt, const std::string & value); -	HttpStatus set(HttpRequest::EPolicyOption opt, HttpRequest::policyCallback value); +	HttpStatus set(HttpRequest::EPolicyOption opt, HttpRequest::policyCallback_t value);  	HttpStatus get(HttpRequest::EPolicyOption opt, long * value) const;  	HttpStatus get(HttpRequest::EPolicyOption opt, std::string * value) const; -	HttpStatus get(HttpRequest::EPolicyOption opt, HttpRequest::policyCallback * value) const; +	HttpStatus get(HttpRequest::EPolicyOption opt, HttpRequest::policyCallback_t * value) const;  public:  	long				mConnectionLimit; @@ -72,7 +72,7 @@ public:  	std::string			mHttpProxy;  	long				mTrace;  	long				mUseLLProxy; -	HttpRequest::policyCallback	mSslCtxCallback; +	HttpRequest::policyCallback_t	mSslCtxCallback;  };  // end class HttpPolicyGlobal  }  // end namespace LLCore diff --git a/indra/llcorehttp/_httpservice.cpp b/indra/llcorehttp/_httpservice.cpp index 7b8aac35a8..252db78c89 100755 --- a/indra/llcorehttp/_httpservice.cpp +++ b/indra/llcorehttp/_httpservice.cpp @@ -415,7 +415,7 @@ HttpStatus HttpService::getPolicyOption(HttpRequest::EPolicyOption opt, HttpRequ  }  HttpStatus HttpService::getPolicyOption(HttpRequest::EPolicyOption opt, HttpRequest::policy_t pclass, -	HttpRequest::policyCallback * ret_value) +	HttpRequest::policyCallback_t * ret_value)  {  	HttpStatus status(HttpStatus::LLCORE, LLCore::HE_INVALID_ARG); @@ -520,7 +520,7 @@ HttpStatus HttpService::setPolicyOption(HttpRequest::EPolicyOption opt, HttpRequ  }  HttpStatus HttpService::setPolicyOption(HttpRequest::EPolicyOption opt, HttpRequest::policy_t pclass, -	HttpRequest::policyCallback value, HttpRequest::policyCallback * ret_value) +	HttpRequest::policyCallback_t value, HttpRequest::policyCallback_t * ret_value)  {  	HttpStatus status(HttpStatus::LLCORE, LLCore::HE_INVALID_ARG); diff --git a/indra/llcorehttp/_httpservice.h b/indra/llcorehttp/_httpservice.h index 699a8eaa4f..ac518a5de7 100755 --- a/indra/llcorehttp/_httpservice.h +++ b/indra/llcorehttp/_httpservice.h @@ -209,15 +209,15 @@ protected:  	HttpStatus getPolicyOption(HttpRequest::EPolicyOption opt, HttpRequest::policy_t,  							   std::string * ret_value);  	HttpStatus getPolicyOption(HttpRequest::EPolicyOption opt, HttpRequest::policy_t, -								HttpRequest::policyCallback * ret_value); +								HttpRequest::policyCallback_t * ret_value);  	HttpStatus setPolicyOption(HttpRequest::EPolicyOption opt, HttpRequest::policy_t,  							   long value, long * ret_value);  	HttpStatus setPolicyOption(HttpRequest::EPolicyOption opt, HttpRequest::policy_t,  							   const std::string & value, std::string * ret_value);  	HttpStatus setPolicyOption(HttpRequest::EPolicyOption opt, HttpRequest::policy_t, -								HttpRequest::policyCallback value,  -								HttpRequest::policyCallback * ret_value); +								HttpRequest::policyCallback_t value,  +								HttpRequest::policyCallback_t * ret_value);  protected:  	static const OptionDescriptor		sOptionDesc[HttpRequest::PO_LAST]; diff --git a/indra/llcorehttp/httpcommon.h b/indra/llcorehttp/httpcommon.h index 64075f5f20..ada5c1bbe7 100755 --- a/indra/llcorehttp/httpcommon.h +++ b/indra/llcorehttp/httpcommon.h @@ -190,6 +190,7 @@  #include "linden_common.h"		// Modifies curl/curl.h interfaces  #include "boost/intrusive_ptr.hpp"  #include "boost/shared_ptr.hpp" +#include "boost/function.hpp"  #include <string>  namespace LLCore @@ -294,50 +295,50 @@ struct HttpStatus  	typedef unsigned short type_enum_t;  	HttpStatus() -		{ -			mDetails = new Details(LLCORE, HE_SUCCESS); -	} +	{ +		mDetails = boost::shared_ptr<Details>(new Details(LLCORE, HE_SUCCESS)); +    }  	HttpStatus(type_enum_t type, short status) -		{ -			mDetails = new Details(type, status); -		} +	{ +        mDetails = boost::shared_ptr<Details>(new Details(type, status)); +	}  	HttpStatus(int http_status) -		{ -			mDetails = new Details(http_status,  -				(http_status >= 200 && http_status <= 299) ? HE_SUCCESS : HE_REPLY_ERROR); -			llassert(http_status >= 100 && http_status <= 999); -		} +	{ +        mDetails = boost::shared_ptr<Details>(new Details(http_status,  +			(http_status >= 200 && http_status <= 299) ? HE_SUCCESS : HE_REPLY_ERROR)); +		llassert(http_status >= 100 && http_status <= 999); +	}  	HttpStatus(int http_status, const std::string &message) -		{ -			mDetails = new Details(http_status, -				(http_status >= 200 && http_status <= 299) ? HE_SUCCESS : HE_REPLY_ERROR); -			llassert(http_status >= 100 && http_status <= 999); -			mDetails->mMessage = message; -		} +	{ +        mDetails = boost::shared_ptr<Details>(new Details(http_status, +			(http_status >= 200 && http_status <= 299) ? HE_SUCCESS : HE_REPLY_ERROR)); +		llassert(http_status >= 100 && http_status <= 999); +		mDetails->mMessage = message; +	}  	HttpStatus(const HttpStatus & rhs) -		{ -			mDetails = new Details(*rhs.mDetails); -		} +	{ +		mDetails = rhs.mDetails; +	}  	~HttpStatus() -		{ -			delete mDetails; -		} +	{ +	}  	HttpStatus & operator=(const HttpStatus & rhs) -		{ -			// Don't care if lhs & rhs are the same object -			mDetails->mType = rhs.mDetails->mType; -			mDetails->mStatus = rhs.mDetails->mStatus; -			mDetails->mMessage = rhs.mDetails->mMessage; -			mDetails->mErrorData = rhs.mDetails->mErrorData; - -			return *this; -		} +	{ +        mDetails = rhs.mDetails; +		return *this; +	} + +    HttpStatus & clone(const HttpStatus &rhs) +    { +        mDetails = boost::shared_ptr<Details>(new Details(*rhs.mDetails)); +        return *this; +    }  	static const type_enum_t EXT_CURL_EASY = 0;			///< mStatus is an error from a curl_easy_*() call  	static const type_enum_t EXT_CURL_MULTI = 1;		///< mStatus is an error from a curl_multi_*() call @@ -365,8 +366,7 @@ struct HttpStatus  	/// which will do the wrong thing in conditional expressions.  	bool operator==(const HttpStatus & rhs) const  	{ -		return (mDetails->mType == rhs.mDetails->mType) &&  -			(mDetails->mStatus == rhs.mDetails->mStatus); +        return (*mDetails == *rhs.mDetails);   	}  	bool operator!=(const HttpStatus & rhs) const @@ -474,6 +474,10 @@ private:  			mErrorData(rhs.mErrorData)  		{} +        bool operator == (const Details &rhs) const +        { +            return (mType == rhs.mType) && (mStatus == rhs.mStatus); +        }  		type_enum_t	mType;  		short		mStatus; @@ -481,8 +485,7 @@ private:  		void *		mErrorData;  	}; -	//boost::unique_ptr<Details>	mDetails; -	Details * mDetails; +    boost::shared_ptr<Details> mDetails;  }; // end struct HttpStatus diff --git a/indra/llcorehttp/httpoptions.cpp b/indra/llcorehttp/httpoptions.cpp index 28c2c25e92..a4d08a80df 100755 --- a/indra/llcorehttp/httpoptions.cpp +++ b/indra/llcorehttp/httpoptions.cpp @@ -42,8 +42,8 @@ HttpOptions::HttpOptions() : RefCounted(true),  	mUseRetryAfter(HTTP_USE_RETRY_AFTER_DEFAULT),  	mFollowRedirects(false),  	mVerifyPeer(false), -	mVerifyHost(0), -	mDNSCacheTimeout(15) +	mVerifyHost(false), +    mDNSCacheTimeout(-1L)  {} @@ -95,9 +95,9 @@ void HttpOptions::setSSLVerifyPeer(bool verify)  	mVerifyPeer = verify;  } -void HttpOptions::setSSLVerifyHost(unsigned int type) +void HttpOptions::setSSLVerifyHost(bool verify)  { -	mVerifyHost = llclamp<unsigned int>(type, 0, 2); +	mVerifyHost = verify;  }  void HttpOptions::setDNSCacheTimeout(int timeout) diff --git a/indra/llcorehttp/httpoptions.h b/indra/llcorehttp/httpoptions.h index 3b9ad9598b..765d2431bb 100755 --- a/indra/llcorehttp/httpoptions.h +++ b/indra/llcorehttp/httpoptions.h @@ -69,72 +69,86 @@ protected:  	void operator=(const HttpOptions &);		// Not defined  public: +  	// Default:   false  	void				setWantHeaders(bool wanted);  	bool				getWantHeaders() const -		{ -			return mWantHeaders; -		} +	{ +		return mWantHeaders; +	}  	// Default:  0  	void				setTrace(int long);  	int					getTrace() const -		{ -			return mTracing; -		} +	{ +		return mTracing; +	}  	// Default:  30  	void				setTimeout(unsigned int timeout);  	unsigned int		getTimeout() const -		{ -			return mTimeout; -		} +	{ +		return mTimeout; +	}  	// Default:  0  	void				setTransferTimeout(unsigned int timeout);  	unsigned int		getTransferTimeout() const -		{ -			return mTransferTimeout; -		} +	{ +		return mTransferTimeout; +	} +    /// Sets the number of retries on an LLCore::HTTPRequest before the  +    /// request fails.  	// Default:  8  	void				setRetries(unsigned int retries);  	unsigned int		getRetries() const -		{ -			return mRetries; -		} +	{ +		return mRetries; +	}  	// Default:  true  	void				setUseRetryAfter(bool use_retry);  	bool				getUseRetryAfter() const -		{ -			return mUseRetryAfter; -		} +	{ +		return mUseRetryAfter; +	} -	// Default: false +    /// Instructs the LLCore::HTTPRequest to follow redirects  +	/// Default: false  	void				setFollowRedirects(bool follow_redirect);  	bool				getFollowRedirects() const -		{ -			return mFollowRedirects; -		} - -	void				setSSLVerifyPeer(bool verify); +	{ +		return mFollowRedirects; +	} + +    /// Instructs the LLCore::HTTPRequest to verify that the exchanged security +    /// certificate is authentic.  +    /// Default: false +    void				setSSLVerifyPeer(bool verify);  	bool				getSSLVerifyPeer() const -		{ -			return mVerifyPeer; -		} - -	void				setSSLVerifyHost(unsigned int type); -	unsigned int		getSSLVerifyHost() const -		{ -			return mVerifyHost; -		} - +	{ +		return mVerifyPeer; +	} + +    /// Instructs the LLCore::HTTPRequest to verify that the name in the  +    /// security certificate matches the name of the host contacted. +    /// Default: false +    void				setSSLVerifyHost(bool verify); +	bool	        	getSSLVerifyHost() const +	{ +		return mVerifyHost; +	} + +    /// Sets the time for DNS name caching in seconds.  Setting this value +    /// to 0 will disable name caching.  Setting this value to -1 causes the  +    /// name cache to never time out. +    /// Default: -1  	void				setDNSCacheTimeout(int timeout);  	int					getDNSCacheTimeout() const -		{ -			return mDNSCacheTimeout; -		} +	{ +		return mDNSCacheTimeout; +	}  protected:  	bool				mWantHeaders; @@ -145,7 +159,7 @@ protected:  	bool				mUseRetryAfter;  	bool				mFollowRedirects;  	bool				mVerifyPeer; -	unsigned int		mVerifyHost; +	bool        		mVerifyHost;  	int					mDNSCacheTimeout;  }; // end class HttpOptions diff --git a/indra/llcorehttp/httprequest.cpp b/indra/llcorehttp/httprequest.cpp index 5f1ed3d43b..df8502b947 100755 --- a/indra/llcorehttp/httprequest.cpp +++ b/indra/llcorehttp/httprequest.cpp @@ -117,7 +117,7 @@ HttpStatus HttpRequest::setStaticPolicyOption(EPolicyOption opt, policy_t pclass  	return HttpService::instanceOf()->setPolicyOption(opt, pclass, value, ret_value);  } -HttpStatus HttpRequest::setStaticPolicyOption(EPolicyOption opt, policy_t pclass, policyCallback value, policyCallback * ret_value) +HttpStatus HttpRequest::setStaticPolicyOption(EPolicyOption opt, policy_t pclass, policyCallback_t value, policyCallback_t * ret_value)  {  	if (HttpService::RUNNING == HttpService::instanceOf()->getState())  	{ @@ -204,7 +204,7 @@ HttpHandle HttpRequest::requestGet(policy_t policy_id,  	HttpStatus status;  	HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID); -	HttpOpRequest * op = new HttpOpRequest(this); +	HttpOpRequest * op = new HttpOpRequest();  	if (! (status = op->setupGet(policy_id, priority, url, options, headers)))  	{  		op->release(); @@ -238,7 +238,7 @@ HttpHandle HttpRequest::requestGetByteRange(policy_t policy_id,  	HttpStatus status;  	HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID); -	HttpOpRequest * op = new HttpOpRequest(this); +	HttpOpRequest * op = new HttpOpRequest();  	if (! (status = op->setupGetByteRange(policy_id, priority, url, offset, len, options, headers)))  	{  		op->release(); @@ -271,7 +271,7 @@ HttpHandle HttpRequest::requestPost(policy_t policy_id,  	HttpStatus status;  	HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID); -	HttpOpRequest * op = new HttpOpRequest(this); +	HttpOpRequest * op = new HttpOpRequest();  	if (! (status = op->setupPost(policy_id, priority, url, body, options, headers)))  	{  		op->release(); @@ -304,7 +304,7 @@ HttpHandle HttpRequest::requestPut(policy_t policy_id,  	HttpStatus status;  	HttpHandle handle(LLCORE_HTTP_HANDLE_INVALID); -	HttpOpRequest * op = new HttpOpRequest(this); +	HttpOpRequest * op = new HttpOpRequest();  	if (! (status = op->setupPut(policy_id, priority, url, body, options, headers)))  	{  		op->release(); diff --git a/indra/llcorehttp/httprequest.h b/indra/llcorehttp/httprequest.h index 4cacb3a20b..f7ce82d412 100755 --- a/indra/llcorehttp/httprequest.h +++ b/indra/llcorehttp/httprequest.h @@ -237,7 +237,7 @@ public:  	/// Prototype for policy based callbacks.  The callback methods will be executed  	/// on the worker thread so no modifications should be made to the HttpHandler object. -	typedef HttpStatus(*policyCallback)(const std::string &, HttpHandler const * const, void *); +    typedef boost::function<HttpStatus(const std::string &, HttpHandler const * const, void *)> policyCallback_t;  	/// Set a policy option for a global or class parameter at  	/// startup time (prior to thread start). @@ -255,7 +255,7 @@ public:  	static HttpStatus setStaticPolicyOption(EPolicyOption opt, policy_t pclass,  											const std::string & value, std::string * ret_value);  	static HttpStatus setStaticPolicyOption(EPolicyOption opt, policy_t pclass, -											policyCallback value, policyCallback * ret_value);; +											policyCallback_t value, policyCallback_t * ret_value);;  	/// Set a parameter on a class-based policy option.  Calls  	/// made after the start of the servicing thread are | 
