diff options
| author | Brad Linden <brad@lindenlab.com> | 2024-05-23 11:31:19 -0700 | 
|---|---|---|
| committer | Brad Linden <brad@lindenlab.com> | 2024-05-23 11:31:19 -0700 | 
| commit | a1f49564d670a2c41bfa25c833bba2564b9b7f48 (patch) | |
| tree | 1d205e51bc37621916a17d459ad83782fe41f975 /indra/newview/llxmlrpctransaction.cpp | |
| parent | 6af5db09faf5ea33a2d4c47b64e76f42edae178a (diff) | |
| parent | 6377610f6587989c126b00f490dfc8d527a1c2ce (diff) | |
Merge remote-tracking branch 'origin/DRTVWR-600-maint-A' into brad/merge-maint-a-to-dev
Diffstat (limited to 'indra/newview/llxmlrpctransaction.cpp')
| -rw-r--r-- | indra/newview/llxmlrpctransaction.cpp | 632 | 
1 files changed, 316 insertions, 316 deletions
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index a77c31eee3..1cd72a1cc5 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -1,25 +1,25 @@ -/**  +/**   * @file llxmlrpctransaction.cpp - * @brief LLXMLRPCTransaction and related class implementations  + * @brief LLXMLRPCTransaction and related class implementations   *   * $LicenseInfo:firstyear=2006&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2010, 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$   */ @@ -65,7 +65,7 @@  namespace boost  { -	using ::boost::movelib::unique_ptr; // move unique_ptr into the boost namespace. +    using ::boost::movelib::unique_ptr; // move unique_ptr into the boost namespace.  }  // Static instance of LLXMLRPCListener declared here so that every time we @@ -77,168 +77,168 @@ static LLXMLRPCListener listener("LLXMLRPCTransaction");  LLXMLRPCValue LLXMLRPCValue::operator[](const char* id) const  { -	return LLXMLRPCValue(XMLRPC_VectorGetValueWithID(mV, id)); +    return LLXMLRPCValue(XMLRPC_VectorGetValueWithID(mV, id));  }  std::string LLXMLRPCValue::asString() const  { -	const char* s = XMLRPC_GetValueString(mV); -	return s ? s : ""; +    const char* s = XMLRPC_GetValueString(mV); +    return s ? s : "";  } -int		LLXMLRPCValue::asInt() const	{ return XMLRPC_GetValueInt(mV); } -bool	LLXMLRPCValue::asBool() const	{ return XMLRPC_GetValueBoolean(mV) != 0; } -double	LLXMLRPCValue::asDouble() const	{ return XMLRPC_GetValueDouble(mV); } +int     LLXMLRPCValue::asInt() const    { return XMLRPC_GetValueInt(mV); } +bool    LLXMLRPCValue::asBool() const   { return XMLRPC_GetValueBoolean(mV) != 0; } +double  LLXMLRPCValue::asDouble() const { return XMLRPC_GetValueDouble(mV); }  LLXMLRPCValue LLXMLRPCValue::rewind()  { -	return LLXMLRPCValue(XMLRPC_VectorRewind(mV)); +    return LLXMLRPCValue(XMLRPC_VectorRewind(mV));  }  LLXMLRPCValue LLXMLRPCValue::next()  { -	return LLXMLRPCValue(XMLRPC_VectorNext(mV)); +    return LLXMLRPCValue(XMLRPC_VectorNext(mV));  }  bool LLXMLRPCValue::isValid() const  { -	return mV != NULL; +    return mV != NULL;  }  LLXMLRPCValue LLXMLRPCValue::createArray()  { -	return LLXMLRPCValue(XMLRPC_CreateVector(NULL, xmlrpc_vector_array)); +    return LLXMLRPCValue(XMLRPC_CreateVector(NULL, xmlrpc_vector_array));  }  LLXMLRPCValue LLXMLRPCValue::createStruct()  { -	return LLXMLRPCValue(XMLRPC_CreateVector(NULL, xmlrpc_vector_struct)); +    return LLXMLRPCValue(XMLRPC_CreateVector(NULL, xmlrpc_vector_struct));  }  void LLXMLRPCValue::append(LLXMLRPCValue& v)  { -	XMLRPC_AddValueToVector(mV, v.mV); +    XMLRPC_AddValueToVector(mV, v.mV);  }  void LLXMLRPCValue::appendString(const std::string& v)  { -	XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueString(NULL, v.c_str(), 0)); +    XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueString(NULL, v.c_str(), 0));  }  void LLXMLRPCValue::appendInt(int v)  { -	XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueInt(NULL, v)); +    XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueInt(NULL, v));  }  void LLXMLRPCValue::appendBool(bool v)  { -	XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueBoolean(NULL, v)); +    XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueBoolean(NULL, v));  }  void LLXMLRPCValue::appendDouble(double v)  { -	XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueDouble(NULL, v)); +    XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueDouble(NULL, v));  }  void LLXMLRPCValue::append(const char* id, LLXMLRPCValue& v)  { -	XMLRPC_SetValueID(v.mV, id, 0); -	XMLRPC_AddValueToVector(mV, v.mV); +    XMLRPC_SetValueID(v.mV, id, 0); +    XMLRPC_AddValueToVector(mV, v.mV);  }  void LLXMLRPCValue::appendString(const char* id, const std::string& v)  { -	XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueString(id, v.c_str(), 0)); +    XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueString(id, v.c_str(), 0));  }  void LLXMLRPCValue::appendInt(const char* id, int v)  { -	XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueInt(id, v)); +    XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueInt(id, v));  }  void LLXMLRPCValue::appendBool(const char* id, bool v)  { -	XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueBoolean(id, v)); +    XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueBoolean(id, v));  }  void LLXMLRPCValue::appendDouble(const char* id, double v)  { -	XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueDouble(id, v)); +    XMLRPC_AddValueToVector(mV, XMLRPC_CreateValueDouble(id, v));  }  void LLXMLRPCValue::cleanup()  { -	XMLRPC_CleanupValue(mV); -	mV = NULL; +    XMLRPC_CleanupValue(mV); +    mV = NULL;  }  XMLRPC_VALUE LLXMLRPCValue::getValue() const  { -	return mV; +    return mV;  }  class LLXMLRPCTransaction::Handler : public LLCore::HttpHandler  { -public:  -	Handler(LLCore::HttpRequest::ptr_t &request, LLXMLRPCTransaction::Impl *impl); -	virtual ~Handler(); +public: +    Handler(LLCore::HttpRequest::ptr_t &request, LLXMLRPCTransaction::Impl *impl); +    virtual ~Handler(); -	virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response); +    virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response); -	typedef std::shared_ptr<LLXMLRPCTransaction::Handler> ptr_t; +    typedef std::shared_ptr<LLXMLRPCTransaction::Handler> ptr_t;  private: -	LLXMLRPCTransaction::Impl *mImpl; -	LLCore::HttpRequest::ptr_t mRequest; +    LLXMLRPCTransaction::Impl *mImpl; +    LLCore::HttpRequest::ptr_t mRequest;  };  class LLXMLRPCTransaction::Impl  {  public: -	typedef LLXMLRPCTransaction::EStatus	EStatus; +    typedef LLXMLRPCTransaction::EStatus    EStatus; -	LLCore::HttpRequest::ptr_t	mHttpRequest; +    LLCore::HttpRequest::ptr_t  mHttpRequest; -	EStatus				mStatus; -	CURLcode			mCurlCode; -	std::string			mStatusMessage; -	std::string			mStatusURI; -	LLCore::HttpResponse::TransferStats::ptr_t	mTransferStats; -	Handler::ptr_t		mHandler; -	LLCore::HttpHandle	mPostH; +    EStatus             mStatus; +    CURLcode            mCurlCode; +    std::string         mStatusMessage; +    std::string         mStatusURI; +    LLCore::HttpResponse::TransferStats::ptr_t  mTransferStats; +    Handler::ptr_t      mHandler; +    LLCore::HttpHandle  mPostH; -	std::string			mURI; +    std::string         mURI; -	std::string			mProxyAddress; +    std::string         mProxyAddress; -	std::string			mResponseText; -	XMLRPC_REQUEST		mResponse; -	std::string         mCertStore; -	LLSD mErrorCertData; +    std::string         mResponseText; +    XMLRPC_REQUEST      mResponse; +    std::string         mCertStore; +    LLSD mErrorCertData; -	Impl(const std::string& uri, XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams); -	Impl(const std::string& uri, -		const std::string& method, LLXMLRPCValue params, bool useGzip); -	~Impl(); +    Impl(const std::string& uri, XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams); +    Impl(const std::string& uri, +        const std::string& method, LLXMLRPCValue params, bool useGzip); +    ~Impl(); -	bool process(); +    bool process(); -	void setStatus(EStatus code, const std::string& message = "", const std::string& uri = ""); -	void setHttpStatus(const LLCore::HttpStatus &status); +    void setStatus(EStatus code, const std::string& message = "", const std::string& uri = ""); +    void setHttpStatus(const LLCore::HttpStatus &status);  private: -	void init(XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams); +    void init(XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams);  }; -LLXMLRPCTransaction::Handler::Handler(LLCore::HttpRequest::ptr_t &request,  -		LLXMLRPCTransaction::Impl *impl) : -	mImpl(impl), -	mRequest(request) +LLXMLRPCTransaction::Handler::Handler(LLCore::HttpRequest::ptr_t &request, +        LLXMLRPCTransaction::Impl *impl) : +    mImpl(impl), +    mRequest(request)  {  } @@ -246,105 +246,105 @@ LLXMLRPCTransaction::Handler::~Handler()  {  } -void LLXMLRPCTransaction::Handler::onCompleted(LLCore::HttpHandle handle,  -	LLCore::HttpResponse * response) +void LLXMLRPCTransaction::Handler::onCompleted(LLCore::HttpHandle handle, +    LLCore::HttpResponse * response)  { -	LLCore::HttpStatus status = response->getStatus(); +    LLCore::HttpStatus status = response->getStatus(); -	if (!status) -	{ +    if (!status) +    {          mImpl->setHttpStatus(status);          LLSD errordata = status.getErrorData();          mImpl->mErrorCertData = errordata; -		if ((status.toULong() != CURLE_SSL_PEER_CERTIFICATE) && -			(status.toULong() != CURLE_SSL_CACERT)) -		{ -			// if we have a curl error that's not already been handled -			// (a non cert error), then generate the warning message as -			// appropriate -			LL_WARNS() << "LLXMLRPCTransaction error " -				<< status.toHex() << ": " << status.toString() << LL_ENDL; -			LL_WARNS() << "LLXMLRPCTransaction request URI: " -				<< mImpl->mURI << LL_ENDL; -		} - -		return; -	} - -	mImpl->setStatus(LLXMLRPCTransaction::StatusComplete); -	mImpl->mTransferStats = response->getTransferStats(); - -	// the contents of a buffer array are potentially noncontiguous, so we -	// will need to copy them into an contiguous block of memory for XMLRPC. -	LLCore::BufferArray *body = response->getBody(); -	char * bodydata = new char[body->size()]; - -	body->read(0, bodydata, body->size()); - -	mImpl->mResponse = XMLRPC_REQUEST_FromXML(bodydata, body->size(), 0); - -	delete[] bodydata; - -	bool		hasError = false; -	bool		hasFault = false; -	int			faultCode = 0; -	std::string	faultString; - -	LLXMLRPCValue error(XMLRPC_RequestGetError(mImpl->mResponse)); -	if (error.isValid()) -	{ -		hasError = true; -		faultCode = error["faultCode"].asInt(); -		faultString = error["faultString"].asString(); -	} -	else if (XMLRPC_ResponseIsFault(mImpl->mResponse)) -	{ -		hasFault = true; -		faultCode = XMLRPC_GetResponseFaultCode(mImpl->mResponse); -		faultString = XMLRPC_GetResponseFaultString(mImpl->mResponse); -	} - -	if (hasError || hasFault) -	{ -		mImpl->setStatus(LLXMLRPCTransaction::StatusXMLRPCError); - -		LL_WARNS() << "LLXMLRPCTransaction XMLRPC " -			<< (hasError ? "error " : "fault ") -			<< faultCode << ": " -			<< faultString << LL_ENDL; -		LL_WARNS() << "LLXMLRPCTransaction request URI: " -			<< mImpl->mURI << LL_ENDL; -	} +        if ((status.toULong() != CURLE_SSL_PEER_CERTIFICATE) && +            (status.toULong() != CURLE_SSL_CACERT)) +        { +            // if we have a curl error that's not already been handled +            // (a non cert error), then generate the warning message as +            // appropriate +            LL_WARNS() << "LLXMLRPCTransaction error " +                << status.toHex() << ": " << status.toString() << LL_ENDL; +            LL_WARNS() << "LLXMLRPCTransaction request URI: " +                << mImpl->mURI << LL_ENDL; +        } + +        return; +    } + +    mImpl->setStatus(LLXMLRPCTransaction::StatusComplete); +    mImpl->mTransferStats = response->getTransferStats(); + +    // the contents of a buffer array are potentially noncontiguous, so we +    // will need to copy them into an contiguous block of memory for XMLRPC. +    LLCore::BufferArray *body = response->getBody(); +    char * bodydata = new char[body->size()]; + +    body->read(0, bodydata, body->size()); + +    mImpl->mResponse = XMLRPC_REQUEST_FromXML(bodydata, body->size(), 0); + +    delete[] bodydata; + +    bool        hasError = false; +    bool        hasFault = false; +    int         faultCode = 0; +    std::string faultString; + +    LLXMLRPCValue error(XMLRPC_RequestGetError(mImpl->mResponse)); +    if (error.isValid()) +    { +        hasError = true; +        faultCode = error["faultCode"].asInt(); +        faultString = error["faultString"].asString(); +    } +    else if (XMLRPC_ResponseIsFault(mImpl->mResponse)) +    { +        hasFault = true; +        faultCode = XMLRPC_GetResponseFaultCode(mImpl->mResponse); +        faultString = XMLRPC_GetResponseFaultString(mImpl->mResponse); +    } + +    if (hasError || hasFault) +    { +        mImpl->setStatus(LLXMLRPCTransaction::StatusXMLRPCError); + +        LL_WARNS() << "LLXMLRPCTransaction XMLRPC " +            << (hasError ? "error " : "fault ") +            << faultCode << ": " +            << faultString << LL_ENDL; +        LL_WARNS() << "LLXMLRPCTransaction request URI: " +            << mImpl->mURI << LL_ENDL; +    }  }  //=========================================================================  LLXMLRPCTransaction::Impl::Impl(const std::string& uri, -		XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams) -	: mHttpRequest(), -	  mStatus(LLXMLRPCTransaction::StatusNotStarted), -	  mURI(uri), -	  mResponse(0) +        XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams) +    : mHttpRequest(), +      mStatus(LLXMLRPCTransaction::StatusNotStarted), +      mURI(uri), +      mResponse(0)  { -	init(request, useGzip, httpParams); +    init(request, useGzip, httpParams);  }  LLXMLRPCTransaction::Impl::Impl(const std::string& uri, -		const std::string& method, LLXMLRPCValue params, bool useGzip) -	: mHttpRequest(), -	  mStatus(LLXMLRPCTransaction::StatusNotStarted), -	  mURI(uri), -	  mResponse(0) -{ -	XMLRPC_REQUEST request = XMLRPC_RequestNew(); -	XMLRPC_RequestSetMethodName(request, method.c_str()); -	XMLRPC_RequestSetRequestType(request, xmlrpc_request_call); -	XMLRPC_RequestSetData(request, params.getValue()); -	 -	init(request, useGzip, LLSD()); +        const std::string& method, LLXMLRPCValue params, bool useGzip) +    : mHttpRequest(), +      mStatus(LLXMLRPCTransaction::StatusNotStarted), +      mURI(uri), +      mResponse(0) +{ +    XMLRPC_REQUEST request = XMLRPC_RequestNew(); +    XMLRPC_RequestSetMethodName(request, method.c_str()); +    XMLRPC_RequestSetRequestType(request, xmlrpc_request_call); +    XMLRPC_RequestSetData(request, params.getValue()); + +    init(request, useGzip, LLSD());      // DEV-28398: without this XMLRPC_RequestFree() call, it looks as though      // the 'request' object is simply leaked. It's less clear to me whether we      // should also ask to free request value data (second param 1), since the @@ -354,266 +354,266 @@ LLXMLRPCTransaction::Impl::Impl(const std::string& uri,  void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams)  { -	LLCore::HttpOptions::ptr_t httpOpts; -	LLCore::HttpHeaders::ptr_t httpHeaders; +    LLCore::HttpOptions::ptr_t httpOpts; +    LLCore::HttpHeaders::ptr_t httpHeaders; -	if (!mHttpRequest) -	{ -		mHttpRequest = LLCore::HttpRequest::ptr_t(new LLCore::HttpRequest); -	} +    if (!mHttpRequest) +    { +        mHttpRequest = LLCore::HttpRequest::ptr_t(new LLCore::HttpRequest); +    } -	// LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer -	httpOpts = LLCore::HttpOptions::ptr_t(new LLCore::HttpOptions());  +    // LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer +    httpOpts = LLCore::HttpOptions::ptr_t(new LLCore::HttpOptions()); -	// delay between repeats will start from 5 sec and grow to 20 sec with each repeat -	httpOpts->setMinBackoff(5E6L); -	httpOpts->setMaxBackoff(20E6L); +    // delay between repeats will start from 5 sec and grow to 20 sec with each repeat +    httpOpts->setMinBackoff(5E6L); +    httpOpts->setMaxBackoff(20E6L); -	httpOpts->setTimeout(httpParams.has("timeout") ? httpParams["timeout"].asInteger() : 40L); -	if (httpParams.has("retries")) -	{ -		httpOpts->setRetries(httpParams["retries"].asInteger()); -	} -	if (httpParams.has("DNSCacheTimeout")) -	{ -		httpOpts->setDNSCacheTimeout(httpParams["DNSCacheTimeout"].asInteger()); -	} +    httpOpts->setTimeout(httpParams.has("timeout") ? httpParams["timeout"].asInteger() : 40L); +    if (httpParams.has("retries")) +    { +        httpOpts->setRetries(httpParams["retries"].asInteger()); +    } +    if (httpParams.has("DNSCacheTimeout")) +    { +        httpOpts->setDNSCacheTimeout(httpParams["DNSCacheTimeout"].asInteger()); +    } -	bool vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert"); -	mCertStore = gSavedSettings.getString("CertStore"); +    bool vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert"); +    mCertStore = gSavedSettings.getString("CertStore"); -	httpOpts->setSSLVerifyPeer( vefifySSLCert ); -	httpOpts->setSSLVerifyHost( vefifySSLCert ? 2 : 0); +    httpOpts->setSSLVerifyPeer( vefifySSLCert ); +    httpOpts->setSSLVerifyHost( vefifySSLCert ? 2 : 0); -	// LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer -	httpHeaders = LLCore::HttpHeaders::ptr_t(new LLCore::HttpHeaders()); +    // LLRefCounted starts with a 1 ref, so don't add a ref in the smart pointer +    httpHeaders = LLCore::HttpHeaders::ptr_t(new LLCore::HttpHeaders()); -	httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_TEXT_XML); +    httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_TEXT_XML); -	std::string user_agent = stringize( -		LLVersionInfo::instance().getChannel(), ' ', -		LLVersionInfo::instance().getMajor(), '.', -		LLVersionInfo::instance().getMinor(), '.', -		LLVersionInfo::instance().getPatch(), " (", -		LLVersionInfo::instance().getBuild(), ')'); +    std::string user_agent = stringize( +        LLVersionInfo::instance().getChannel(), ' ', +        LLVersionInfo::instance().getMajor(), '.', +        LLVersionInfo::instance().getMinor(), '.', +        LLVersionInfo::instance().getPatch(), " (", +        LLVersionInfo::instance().getBuild(), ')'); -	httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent); +    httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, user_agent); -	///* Setting the DNS cache timeout to -1 disables it completely. -	//This might help with bug #503 */ -	//httpOpts->setDNSCacheTimeout(-1); +    ///* Setting the DNS cache timeout to -1 disables it completely. +    //This might help with bug #503 */ +    //httpOpts->setDNSCacheTimeout(-1); -	LLCore::BufferArray::ptr_t body = LLCore::BufferArray::ptr_t(new LLCore::BufferArray()); +    LLCore::BufferArray::ptr_t body = LLCore::BufferArray::ptr_t(new LLCore::BufferArray()); -	// TODO: See if there is a way to serialize to a preallocated buffer I'm  -	// not fond of the copy here. -	int	requestSize(0); -	char * requestText = XMLRPC_REQUEST_ToXML(request, &requestSize); +    // TODO: See if there is a way to serialize to a preallocated buffer I'm +    // not fond of the copy here. +    int requestSize(0); +    char * requestText = XMLRPC_REQUEST_ToXML(request, &requestSize); -	body->append(requestText, requestSize); -	 -	XMLRPC_Free(requestText); +    body->append(requestText, requestSize); -	mHandler = LLXMLRPCTransaction::Handler::ptr_t(new Handler( mHttpRequest, this )); +    XMLRPC_Free(requestText); -	mPostH = mHttpRequest->requestPost(LLCore::HttpRequest::DEFAULT_POLICY_ID, -		mURI, body.get(), httpOpts, httpHeaders, mHandler); +    mHandler = LLXMLRPCTransaction::Handler::ptr_t(new Handler( mHttpRequest, this )); + +    mPostH = mHttpRequest->requestPost(LLCore::HttpRequest::DEFAULT_POLICY_ID, +        mURI, body.get(), httpOpts, httpHeaders, mHandler);  }  LLXMLRPCTransaction::Impl::~Impl()  { -	if (mResponse) -	{ -		XMLRPC_RequestFree(mResponse, 1); -	} +    if (mResponse) +    { +        XMLRPC_RequestFree(mResponse, 1); +    }  }  bool LLXMLRPCTransaction::Impl::process()  { -	if (!mPostH || !mHttpRequest) -	{ -		LL_WARNS() << "transaction failed." << LL_ENDL; -		return true; //failed, quit. -	} +    if (!mPostH || !mHttpRequest) +    { +        LL_WARNS() << "transaction failed." << LL_ENDL; +        return true; //failed, quit. +    } -	switch (mStatus) -	{ -		case LLXMLRPCTransaction::StatusComplete: -		case LLXMLRPCTransaction::StatusCURLError: -		case LLXMLRPCTransaction::StatusXMLRPCError: -		case LLXMLRPCTransaction::StatusOtherError: -		{ -			return true; -		} +    switch (mStatus) +    { +        case LLXMLRPCTransaction::StatusComplete: +        case LLXMLRPCTransaction::StatusCURLError: +        case LLXMLRPCTransaction::StatusXMLRPCError: +        case LLXMLRPCTransaction::StatusOtherError: +        { +            return true; +        } -		case LLXMLRPCTransaction::StatusNotStarted: -		{ -			setStatus(LLXMLRPCTransaction::StatusStarted); -			break; -		} +        case LLXMLRPCTransaction::StatusNotStarted: +        { +            setStatus(LLXMLRPCTransaction::StatusStarted); +            break; +        } -		default: -			break; -	} +        default: +            break; +    } -	LLCore::HttpStatus status = mHttpRequest->update(0); +    LLCore::HttpStatus status = mHttpRequest->update(0); -	status = mHttpRequest->getStatus(); -	if (!status)  -	{ -		return false; -	} +    status = mHttpRequest->getStatus(); +    if (!status) +    { +        return false; +    } -	return false; +    return false;  }  void LLXMLRPCTransaction::Impl::setStatus(EStatus status, -	const std::string& message, const std::string& uri) -{ -	mStatus = status; -	mStatusMessage = message; -	mStatusURI = uri; - -	if (mStatusMessage.empty()) -	{ -		switch (mStatus) -		{ -			case StatusNotStarted: -				mStatusMessage = "(not started)"; -				break; -				 -			case StatusStarted: -				mStatusMessage = "(waiting for server response)"; -				break; -				 -			case StatusDownloading: -				mStatusMessage = "(reading server response)"; -				break; -				 -			case StatusComplete: -				mStatusMessage = "(done)"; -				break; -			default: -				// Usually this means that there's a problem with the login server, -				// not with the client.  Direct user to status page. -				mStatusMessage = LLTrans::getString("server_is_down"); -				mStatusURI = "http://status.secondlifegrid.net/"; -		} -	} +    const std::string& message, const std::string& uri) +{ +    mStatus = status; +    mStatusMessage = message; +    mStatusURI = uri; + +    if (mStatusMessage.empty()) +    { +        switch (mStatus) +        { +            case StatusNotStarted: +                mStatusMessage = "(not started)"; +                break; + +            case StatusStarted: +                mStatusMessage = "(waiting for server response)"; +                break; + +            case StatusDownloading: +                mStatusMessage = "(reading server response)"; +                break; + +            case StatusComplete: +                mStatusMessage = "(done)"; +                break; +            default: +                // Usually this means that there's a problem with the login server, +                // not with the client.  Direct user to status page. +                mStatusMessage = LLTrans::getString("server_is_down"); +                mStatusURI = "http://status.secondlifegrid.net/"; +        } +    }  }  void LLXMLRPCTransaction::Impl::setHttpStatus(const LLCore::HttpStatus &status)  { -	CURLcode code = static_cast<CURLcode>(status.toULong()); -	std::string message; -	std::string uri = "http://support.secondlife.com"; -	LLURI failuri(mURI); -	LLStringUtil::format_map_t args; +    CURLcode code = static_cast<CURLcode>(status.toULong()); +    std::string message; +    std::string uri = "http://support.secondlife.com"; +    LLURI failuri(mURI); +    LLStringUtil::format_map_t args; -	switch (code) -	{ -	case CURLE_COULDNT_RESOLVE_HOST: -		args["[HOSTNAME]"] = failuri.hostName(); -		message = LLTrans::getString("couldnt_resolve_host", args); -		break; +    switch (code) +    { +    case CURLE_COULDNT_RESOLVE_HOST: +        args["[HOSTNAME]"] = failuri.hostName(); +        message = LLTrans::getString("couldnt_resolve_host", args); +        break;  #if CURLE_SSL_PEER_CERTIFICATE != CURLE_SSL_CACERT -	case CURLE_SSL_PEER_CERTIFICATE: -		message = LLTrans::getString("ssl_peer_certificate"); -		break; +    case CURLE_SSL_PEER_CERTIFICATE: +        message = LLTrans::getString("ssl_peer_certificate"); +        break;  #endif -	case CURLE_SSL_CACERT: -	case CURLE_SSL_CONNECT_ERROR:		 -		message = LLTrans::getString("ssl_connect_error"); -		break; +    case CURLE_SSL_CACERT: +    case CURLE_SSL_CONNECT_ERROR: +        message = LLTrans::getString("ssl_connect_error"); +        break; -	default: -		break; -	} +    default: +        break; +    } -	mCurlCode = code; -	setStatus(StatusCURLError, message, uri); +    mCurlCode = code; +    setStatus(StatusCURLError, message, uri);  }  LLXMLRPCTransaction::LLXMLRPCTransaction( -	const std::string& uri, XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams) +    const std::string& uri, XMLRPC_REQUEST request, bool useGzip, const LLSD& httpParams)  : impl(* new Impl(uri, request, useGzip, httpParams))  { }  LLXMLRPCTransaction::LLXMLRPCTransaction( -	const std::string& uri, -	const std::string& method, LLXMLRPCValue params, bool useGzip) +    const std::string& uri, +    const std::string& method, LLXMLRPCValue params, bool useGzip)  : impl(* new Impl(uri, method, params, useGzip))  { }  LLXMLRPCTransaction::~LLXMLRPCTransaction()  { -	delete &impl; +    delete &impl;  }  bool LLXMLRPCTransaction::process()  { -	return impl.process(); +    return impl.process();  }  LLXMLRPCTransaction::EStatus LLXMLRPCTransaction::status(int* curlCode)  { -	if (curlCode) -	{ -		*curlCode =  -			(impl.mStatus == StatusCURLError) -				? impl.mCurlCode -				: CURLE_OK; -	} -		 -	return impl.mStatus; +    if (curlCode) +    { +        *curlCode = +            (impl.mStatus == StatusCURLError) +                ? impl.mCurlCode +                : CURLE_OK; +    } + +    return impl.mStatus;  }  std::string LLXMLRPCTransaction::statusMessage()  { -	return impl.mStatusMessage; +    return impl.mStatusMessage;  }  LLSD LLXMLRPCTransaction::getErrorCertData()  { -	return impl.mErrorCertData; +    return impl.mErrorCertData;  }  std::string LLXMLRPCTransaction::statusURI()  { -	return impl.mStatusURI; +    return impl.mStatusURI;  }  XMLRPC_REQUEST LLXMLRPCTransaction::response()  { -	return impl.mResponse; +    return impl.mResponse;  }  LLXMLRPCValue LLXMLRPCTransaction::responseValue()  { -	return LLXMLRPCValue(XMLRPC_RequestGetData(impl.mResponse)); +    return LLXMLRPCValue(XMLRPC_RequestGetData(impl.mResponse));  }  F64 LLXMLRPCTransaction::transferRate()  { -	if (impl.mStatus != StatusComplete) -	{ -		return 0.0L; -	} -	 -	double rate_bits_per_sec = impl.mTransferStats->mSpeedDownload * 8.0; -	 -	LL_INFOS("AppInit") << "Buffer size:   " << impl.mResponseText.size() << " B" << LL_ENDL; -	LL_DEBUGS("AppInit") << "Transfer size: " << impl.mTransferStats->mSizeDownload << " B" << LL_ENDL; -	LL_DEBUGS("AppInit") << "Transfer time: " << impl.mTransferStats->mTotalTime << " s" << LL_ENDL; -	LL_INFOS("AppInit") << "Transfer rate: " << rate_bits_per_sec / 1000.0 << " Kb/s" << LL_ENDL; - -	return rate_bits_per_sec; +    if (impl.mStatus != StatusComplete) +    { +        return 0.0L; +    } + +    double rate_bits_per_sec = impl.mTransferStats->mSpeedDownload * 8.0; + +    LL_INFOS("AppInit") << "Buffer size:   " << impl.mResponseText.size() << " B" << LL_ENDL; +    LL_DEBUGS("AppInit") << "Transfer size: " << impl.mTransferStats->mSizeDownload << " B" << LL_ENDL; +    LL_DEBUGS("AppInit") << "Transfer time: " << impl.mTransferStats->mTotalTime << " s" << LL_ENDL; +    LL_INFOS("AppInit") << "Transfer rate: " << rate_bits_per_sec / 1000.0 << " Kb/s" << LL_ENDL; + +    return rate_bits_per_sec;  }  | 
