summaryrefslogtreecommitdiff
path: root/indra/newview/llxmlrpctransaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llxmlrpctransaction.cpp')
-rw-r--r--indra/newview/llxmlrpctransaction.cpp632
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;
}