Merge branch 'master' of git://github.com/AlericInglewood/SingularityViewer
This commit is contained in:
@@ -197,7 +197,7 @@ class AIStateMachine : public LLThreadSafeRefCount
|
|||||||
bool mDebugAdvanceStatePending; // True while advance_state() was called by not handled yet.
|
bool mDebugAdvanceStatePending; // True while advance_state() was called by not handled yet.
|
||||||
bool mDebugRefCalled; // True when ref() is called (or will be called within the critial area of mMultiplexMutex).
|
bool mDebugRefCalled; // True when ref() is called (or will be called within the critial area of mMultiplexMutex).
|
||||||
#endif
|
#endif
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
protected:
|
protected:
|
||||||
bool mSMDebug; // Print debug output only when true.
|
bool mSMDebug; // Print debug output only when true.
|
||||||
#endif
|
#endif
|
||||||
@@ -210,7 +210,7 @@ class AIStateMachine : public LLThreadSafeRefCount
|
|||||||
mThreadId(AIThreadID::none), mDebugLastState(bs_killed), mDebugShouldRun(false), mDebugAborted(false), mDebugContPending(false),
|
mThreadId(AIThreadID::none), mDebugLastState(bs_killed), mDebugShouldRun(false), mDebugAborted(false), mDebugContPending(false),
|
||||||
mDebugSetStatePending(false), mDebugAdvanceStatePending(false), mDebugRefCalled(false),
|
mDebugSetStatePending(false), mDebugAdvanceStatePending(false), mDebugRefCalled(false),
|
||||||
#endif
|
#endif
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
mSMDebug(debug),
|
mSMDebug(debug),
|
||||||
#endif
|
#endif
|
||||||
mRuntime(0)
|
mRuntime(0)
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ class AIStateMachineThreadBase : public AIStateMachine {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
AIStateMachineThreadBase(CWD_ONLY(bool debug))
|
AIStateMachineThreadBase(CWD_ONLY(bool debug))
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
: AIStateMachine(debug)
|
: AIStateMachine(debug)
|
||||||
#endif
|
#endif
|
||||||
{ }
|
{ }
|
||||||
@@ -222,7 +222,7 @@ class AIStateMachineThread : public AIStateMachineThreadBase {
|
|||||||
public:
|
public:
|
||||||
// Constructor.
|
// Constructor.
|
||||||
AIStateMachineThread(CWD_ONLY(bool debug))
|
AIStateMachineThread(CWD_ONLY(bool debug))
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
: AIStateMachineThreadBase(debug)
|
: AIStateMachineThreadBase(debug)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class AITimer : public AIStateMachine {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
AITimer(CWD_ONLY(bool debug = false)) :
|
AITimer(CWD_ONLY(bool debug = false)) :
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
AIStateMachine(debug),
|
AIStateMachine(debug),
|
||||||
#endif
|
#endif
|
||||||
mInterval(0) { DoutEntering(dc::statemachine(mSMDebug), "AITimer(void) [" << (void*)this << "]"); }
|
mInterval(0) { DoutEntering(dc::statemachine(mSMDebug), "AITimer(void) [" << (void*)this << "]"); }
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ struct fake_channel {
|
|||||||
char const* mLabel;
|
char const* mLabel;
|
||||||
fake_channel(int on, char const* label) : mOn(on), mLabel(label) { }
|
fake_channel(int on, char const* label) : mOn(on), mLabel(label) { }
|
||||||
fake_channel(void) : mOn(0) { }
|
fake_channel(void) : mOn(0) { }
|
||||||
|
fake_channel& operator()(bool) { return *this; }
|
||||||
|
fake_channel const& operator()(bool) const { return *this; }
|
||||||
bool is_on() const { return !!mOn; }
|
bool is_on() const { return !!mOn; }
|
||||||
bool is_off() const { return !mOn; }
|
bool is_off() const { return !mOn; }
|
||||||
void on() const { }
|
void on() const { }
|
||||||
@@ -144,7 +146,11 @@ extern LL_COMMON_API fake_channel const snapshot;
|
|||||||
#define CWDEBUG_MARKER 0
|
#define CWDEBUG_MARKER 0
|
||||||
|
|
||||||
#define BACKTRACE do { } while(0)
|
#define BACKTRACE do { } while(0)
|
||||||
|
#ifdef DEBUG_CURLIO
|
||||||
|
#define CWD_ONLY(...) __VA_ARGS__
|
||||||
|
#else
|
||||||
#define CWD_ONLY(...)
|
#define CWD_ONLY(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // !DOXYGEN
|
#endif // !DOXYGEN
|
||||||
|
|
||||||
|
|||||||
@@ -765,8 +765,8 @@ DEFINE_FUNCTION_SETOPT4(curl_write_callback, CURLOPT_HEADERFUNCTION, CURLOPT_WRI
|
|||||||
//DEFINE_FUNCTION_SETOPT1(curl_read_callback, CURLOPT_READFUNCTION)
|
//DEFINE_FUNCTION_SETOPT1(curl_read_callback, CURLOPT_READFUNCTION)
|
||||||
DEFINE_FUNCTION_SETOPT1(curl_ssl_ctx_callback, CURLOPT_SSL_CTX_FUNCTION)
|
DEFINE_FUNCTION_SETOPT1(curl_ssl_ctx_callback, CURLOPT_SSL_CTX_FUNCTION)
|
||||||
DEFINE_FUNCTION_SETOPT3(curl_conv_callback, CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPT_CONV_TO_NETWORK_FUNCTION, CURLOPT_CONV_FROM_UTF8_FUNCTION)
|
DEFINE_FUNCTION_SETOPT3(curl_conv_callback, CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPT_CONV_TO_NETWORK_FUNCTION, CURLOPT_CONV_FROM_UTF8_FUNCTION)
|
||||||
#if 0 // Not used by the viewer.
|
|
||||||
DEFINE_FUNCTION_SETOPT1(curl_progress_callback, CURLOPT_PROGRESSFUNCTION)
|
DEFINE_FUNCTION_SETOPT1(curl_progress_callback, CURLOPT_PROGRESSFUNCTION)
|
||||||
|
#if 0 // Not used by the viewer.
|
||||||
DEFINE_FUNCTION_SETOPT1(curl_seek_callback, CURLOPT_SEEKFUNCTION)
|
DEFINE_FUNCTION_SETOPT1(curl_seek_callback, CURLOPT_SEEKFUNCTION)
|
||||||
DEFINE_FUNCTION_SETOPT1(curl_ioctl_callback, CURLOPT_IOCTLFUNCTION)
|
DEFINE_FUNCTION_SETOPT1(curl_ioctl_callback, CURLOPT_IOCTLFUNCTION)
|
||||||
DEFINE_FUNCTION_SETOPT1(curl_sockopt_callback, CURLOPT_SOCKOPTFUNCTION)
|
DEFINE_FUNCTION_SETOPT1(curl_sockopt_callback, CURLOPT_SOCKOPTFUNCTION)
|
||||||
@@ -901,6 +901,23 @@ void CurlEasyRequest::setSSLCtxCallback(curl_ssl_ctx_callback callback, void* us
|
|||||||
setopt(CURLOPT_SSL_CTX_DATA, this);
|
setopt(CURLOPT_SSL_CTX_DATA, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//static
|
||||||
|
int CurlEasyRequest::progressCallback(void* userdata, double dltotal, double dlnow, double ultotal, double ulnow)
|
||||||
|
{
|
||||||
|
CurlEasyRequest* self = static_cast<CurlEasyRequest*>(userdata);
|
||||||
|
ThreadSafeBufferedCurlEasyRequest* lockobj = self->get_lockobj();
|
||||||
|
AICurlEasyRequest_wat lock_self(*lockobj);
|
||||||
|
return self->mProgressCallback(self->mProgressCallbackUserData, dltotal, dlnow, ultotal, ulnow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CurlEasyRequest::setProgressCallback(curl_progress_callback callback, void* userdata)
|
||||||
|
{
|
||||||
|
mProgressCallback = callback;
|
||||||
|
mProgressCallbackUserData = userdata;
|
||||||
|
setopt(CURLOPT_PROGRESSFUNCTION, callback ? &CurlEasyRequest::progressCallback : NULL);
|
||||||
|
setopt(CURLOPT_PROGRESSDATA, userdata ? this : NULL);
|
||||||
|
}
|
||||||
|
|
||||||
#define llmaybewarns lllog(LLApp::isExiting() ? LLError::LEVEL_INFO : LLError::LEVEL_WARN, NULL, NULL, false, true)
|
#define llmaybewarns lllog(LLApp::isExiting() ? LLError::LEVEL_INFO : LLError::LEVEL_WARN, NULL, NULL, false, true)
|
||||||
|
|
||||||
static size_t noHeaderCallback(char* ptr, size_t size, size_t nmemb, void* userdata)
|
static size_t noHeaderCallback(char* ptr, size_t size, size_t nmemb, void* userdata)
|
||||||
@@ -927,12 +944,19 @@ static CURLcode noSSLCtxCallback(CURL* curl, void* sslctx, void* parm)
|
|||||||
return CURLE_ABORTED_BY_CALLBACK;
|
return CURLE_ABORTED_BY_CALLBACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int noProgressCallback(void* userdata, double, double, double, double)
|
||||||
|
{
|
||||||
|
llmaybewarns << "Calling noProgressCallback(); curl session aborted." << llendl;
|
||||||
|
return -1; // Cause a CURLE_ABORTED_BY_CALLBACK
|
||||||
|
}
|
||||||
|
|
||||||
void CurlEasyRequest::revokeCallbacks(void)
|
void CurlEasyRequest::revokeCallbacks(void)
|
||||||
{
|
{
|
||||||
if (mHeaderCallback == &noHeaderCallback &&
|
if (mHeaderCallback == &noHeaderCallback &&
|
||||||
mWriteCallback == &noWriteCallback &&
|
mWriteCallback == &noWriteCallback &&
|
||||||
mReadCallback == &noReadCallback &&
|
mReadCallback == &noReadCallback &&
|
||||||
mSSLCtxCallback == &noSSLCtxCallback)
|
mSSLCtxCallback == &noSSLCtxCallback &&
|
||||||
|
mProgressCallback == &noProgressCallback)
|
||||||
{
|
{
|
||||||
// Already revoked.
|
// Already revoked.
|
||||||
return;
|
return;
|
||||||
@@ -941,6 +965,7 @@ void CurlEasyRequest::revokeCallbacks(void)
|
|||||||
mWriteCallback = &noWriteCallback;
|
mWriteCallback = &noWriteCallback;
|
||||||
mReadCallback = &noReadCallback;
|
mReadCallback = &noReadCallback;
|
||||||
mSSLCtxCallback = &noSSLCtxCallback;
|
mSSLCtxCallback = &noSSLCtxCallback;
|
||||||
|
mProgressCallback = &noProgressCallback;
|
||||||
if (active() && !no_warning())
|
if (active() && !no_warning())
|
||||||
{
|
{
|
||||||
llwarns << "Revoking callbacks on a still active CurlEasyRequest object!" << llendl;
|
llwarns << "Revoking callbacks on a still active CurlEasyRequest object!" << llendl;
|
||||||
@@ -949,6 +974,7 @@ void CurlEasyRequest::revokeCallbacks(void)
|
|||||||
curl_easy_setopt(getEasyHandle(), CURLOPT_WRITEHEADER, &noWriteCallback);
|
curl_easy_setopt(getEasyHandle(), CURLOPT_WRITEHEADER, &noWriteCallback);
|
||||||
curl_easy_setopt(getEasyHandle(), CURLOPT_READFUNCTION, &noReadCallback);
|
curl_easy_setopt(getEasyHandle(), CURLOPT_READFUNCTION, &noReadCallback);
|
||||||
curl_easy_setopt(getEasyHandle(), CURLOPT_SSL_CTX_FUNCTION, &noSSLCtxCallback);
|
curl_easy_setopt(getEasyHandle(), CURLOPT_SSL_CTX_FUNCTION, &noSSLCtxCallback);
|
||||||
|
curl_easy_setopt(getEasyHandle(), CURLOPT_PROGRESSFUNCTION, &noProgressCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
CurlEasyRequest::~CurlEasyRequest()
|
CurlEasyRequest::~CurlEasyRequest()
|
||||||
@@ -1077,6 +1103,8 @@ void CurlEasyRequest::applyDefaultOptions(void)
|
|||||||
setopt(CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
|
setopt(CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
|
||||||
// Disable SSL/TLS session caching; some servers (aka id.secondlife.com) refuse connections when session ids are enabled.
|
// Disable SSL/TLS session caching; some servers (aka id.secondlife.com) refuse connections when session ids are enabled.
|
||||||
setopt(CURLOPT_SSL_SESSIONID_CACHE, 0);
|
setopt(CURLOPT_SSL_SESSIONID_CACHE, 0);
|
||||||
|
// Call the progress callback funtion.
|
||||||
|
setopt(CURLOPT_NOPROGRESS, 0);
|
||||||
// Set the CURL options for either SOCKS or HTTP proxy.
|
// Set the CURL options for either SOCKS or HTTP proxy.
|
||||||
applyProxySettings();
|
applyProxySettings();
|
||||||
// Cause libcurl to print all it's I/O traffic on the debug channel.
|
// Cause libcurl to print all it's I/O traffic on the debug channel.
|
||||||
@@ -1095,6 +1123,7 @@ void CurlEasyRequest::finalizeRequest(std::string const& url, AIHTTPTimeoutPolic
|
|||||||
DoutCurlEntering("CurlEasyRequest::finalizeRequest(\"" << url << "\", " << policy.name() << ", " << (void*)state_machine << ")");
|
DoutCurlEntering("CurlEasyRequest::finalizeRequest(\"" << url << "\", " << policy.name() << ", " << (void*)state_machine << ")");
|
||||||
llassert(!mTimeoutPolicy); // May only call finalizeRequest once!
|
llassert(!mTimeoutPolicy); // May only call finalizeRequest once!
|
||||||
mResult = CURLE_FAILED_INIT; // General error code; the final result code is stored here by MultiHandle::check_msg_queue when msg is CURLMSG_DONE.
|
mResult = CURLE_FAILED_INIT; // General error code; the final result code is stored here by MultiHandle::check_msg_queue when msg is CURLMSG_DONE.
|
||||||
|
mIsHttps = strncmp(url.c_str(), "https:", 6) == 0;
|
||||||
#ifdef SHOW_ASSERT
|
#ifdef SHOW_ASSERT
|
||||||
// Do a sanity check on the headers.
|
// Do a sanity check on the headers.
|
||||||
int content_type_count = 0;
|
int content_type_count = 0;
|
||||||
@@ -1139,7 +1168,13 @@ void CurlEasyRequest::finalizeRequest(std::string const& url, AIHTTPTimeoutPolic
|
|||||||
// // get less connect time, while it still (also) has to wait for this DNS lookup.
|
// // get less connect time, while it still (also) has to wait for this DNS lookup.
|
||||||
void CurlEasyRequest::set_timeout_opts(void)
|
void CurlEasyRequest::set_timeout_opts(void)
|
||||||
{
|
{
|
||||||
setopt(CURLOPT_CONNECTTIMEOUT, mTimeoutPolicy->getConnectTimeout(getLowercaseHostname()));
|
U16 connect_timeout = mTimeoutPolicy->getConnectTimeout(getLowercaseHostname());
|
||||||
|
if (mIsHttps && connect_timeout < 30)
|
||||||
|
{
|
||||||
|
DoutCurl("Incrementing CURLOPT_CONNECTTIMEOUT of \"" << mTimeoutPolicy->name() << "\" from " << connect_timeout << " to 30 seconds.");
|
||||||
|
connect_timeout = 30;
|
||||||
|
}
|
||||||
|
setopt(CURLOPT_CONNECTTIMEOUT, connect_timeout);
|
||||||
setopt(CURLOPT_TIMEOUT, mTimeoutPolicy->getCurlTransaction());
|
setopt(CURLOPT_TIMEOUT, mTimeoutPolicy->getCurlTransaction());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1403,6 +1438,7 @@ void BufferedCurlEasyRequest::prepRequest(AICurlEasyRequest_wat& curl_easy_reque
|
|||||||
curl_easy_request_w->setWriteCallback(&curlWriteCallback, lockobj);
|
curl_easy_request_w->setWriteCallback(&curlWriteCallback, lockobj);
|
||||||
curl_easy_request_w->setReadCallback(&curlReadCallback, lockobj);
|
curl_easy_request_w->setReadCallback(&curlReadCallback, lockobj);
|
||||||
curl_easy_request_w->setHeaderCallback(&curlHeaderCallback, lockobj);
|
curl_easy_request_w->setHeaderCallback(&curlHeaderCallback, lockobj);
|
||||||
|
curl_easy_request_w->setProgressCallback(&curlProgressCallback, lockobj);
|
||||||
|
|
||||||
bool allow_cookies = headers.hasHeader("Cookie");
|
bool allow_cookies = headers.hasHeader("Cookie");
|
||||||
// Allow up to sixteen redirects.
|
// Allow up to sixteen redirects.
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ void AICurlEasyRequestStateMachine::finish_impl(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
AICurlEasyRequestStateMachine::AICurlEasyRequestStateMachine(CWD_ONLY(bool debug)) :
|
AICurlEasyRequestStateMachine::AICurlEasyRequestStateMachine(CWD_ONLY(bool debug)) :
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
AIStateMachine(debug),
|
AIStateMachine(debug),
|
||||||
#endif
|
#endif
|
||||||
mTotalDelayTimeout(AIHTTPTimeoutPolicy::getDebugSettingsCurlTimeout().getTotalDelay())
|
mTotalDelayTimeout(AIHTTPTimeoutPolicy::getDebugSettingsCurlTimeout().getTotalDelay())
|
||||||
|
|||||||
@@ -83,8 +83,8 @@ class CurlEasyHandle : public boost::noncopyable, protected AICurlEasyHandleEven
|
|||||||
//DECLARE_SETOPT(curl_read_callback); Same type as curl_write_callback
|
//DECLARE_SETOPT(curl_read_callback); Same type as curl_write_callback
|
||||||
DECLARE_SETOPT(curl_ssl_ctx_callback);
|
DECLARE_SETOPT(curl_ssl_ctx_callback);
|
||||||
DECLARE_SETOPT(curl_conv_callback);
|
DECLARE_SETOPT(curl_conv_callback);
|
||||||
#if 0 // Not used by the viewer.
|
|
||||||
DECLARE_SETOPT(curl_progress_callback);
|
DECLARE_SETOPT(curl_progress_callback);
|
||||||
|
#if 0 // Not used by the viewer.
|
||||||
DECLARE_SETOPT(curl_seek_callback);
|
DECLARE_SETOPT(curl_seek_callback);
|
||||||
DECLARE_SETOPT(curl_ioctl_callback);
|
DECLARE_SETOPT(curl_ioctl_callback);
|
||||||
DECLARE_SETOPT(curl_sockopt_callback);
|
DECLARE_SETOPT(curl_sockopt_callback);
|
||||||
@@ -235,6 +235,7 @@ class CurlEasyRequest : public CurlEasyHandle {
|
|||||||
static size_t writeCallback(char* ptr, size_t size, size_t nmemb, void* userdata);
|
static size_t writeCallback(char* ptr, size_t size, size_t nmemb, void* userdata);
|
||||||
static size_t readCallback(char* ptr, size_t size, size_t nmemb, void* userdata);
|
static size_t readCallback(char* ptr, size_t size, size_t nmemb, void* userdata);
|
||||||
static CURLcode SSLCtxCallback(CURL* curl, void* sslctx, void* userdata);
|
static CURLcode SSLCtxCallback(CURL* curl, void* sslctx, void* userdata);
|
||||||
|
static int progressCallback(void* userdata, double, double, double, double);
|
||||||
|
|
||||||
curl_write_callback mHeaderCallback;
|
curl_write_callback mHeaderCallback;
|
||||||
void* mHeaderCallbackUserData;
|
void* mHeaderCallbackUserData;
|
||||||
@@ -244,12 +245,15 @@ class CurlEasyRequest : public CurlEasyHandle {
|
|||||||
void* mReadCallbackUserData;
|
void* mReadCallbackUserData;
|
||||||
curl_ssl_ctx_callback mSSLCtxCallback;
|
curl_ssl_ctx_callback mSSLCtxCallback;
|
||||||
void* mSSLCtxCallbackUserData;
|
void* mSSLCtxCallbackUserData;
|
||||||
|
curl_progress_callback mProgressCallback;
|
||||||
|
void* mProgressCallbackUserData;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void setHeaderCallback(curl_write_callback callback, void* userdata);
|
void setHeaderCallback(curl_write_callback callback, void* userdata);
|
||||||
void setWriteCallback(curl_write_callback callback, void* userdata);
|
void setWriteCallback(curl_write_callback callback, void* userdata);
|
||||||
void setReadCallback(curl_read_callback callback, void* userdata);
|
void setReadCallback(curl_read_callback callback, void* userdata);
|
||||||
void setSSLCtxCallback(curl_ssl_ctx_callback callback, void* userdata);
|
void setSSLCtxCallback(curl_ssl_ctx_callback callback, void* userdata);
|
||||||
|
void setProgressCallback(curl_progress_callback callback, void* userdata);
|
||||||
|
|
||||||
// Call this if the set callbacks are about to be invalidated.
|
// Call this if the set callbacks are about to be invalidated.
|
||||||
void revokeCallbacks(void);
|
void revokeCallbacks(void);
|
||||||
@@ -315,6 +319,7 @@ class CurlEasyRequest : public CurlEasyHandle {
|
|||||||
AIPerServicePtr mPerServicePtr; // Pointer to the corresponding AIPerService.
|
AIPerServicePtr mPerServicePtr; // Pointer to the corresponding AIPerService.
|
||||||
LLPointer<curlthread::HTTPTimeout> mTimeout;// Timeout administration object associated with last created CurlSocketInfo.
|
LLPointer<curlthread::HTTPTimeout> mTimeout;// Timeout administration object associated with last created CurlSocketInfo.
|
||||||
bool mTimeoutIsOrphan; // Set to true when mTimeout is not (yet) associated with a CurlSocketInfo.
|
bool mTimeoutIsOrphan; // Set to true when mTimeout is not (yet) associated with a CurlSocketInfo.
|
||||||
|
bool mIsHttps; // Set if the url starts with "https:".
|
||||||
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
public:
|
public:
|
||||||
bool mDebugIsHeadOrGetMethod;
|
bool mDebugIsHeadOrGetMethod;
|
||||||
@@ -440,6 +445,7 @@ class BufferedCurlEasyRequest : public CurlEasyRequest {
|
|||||||
static size_t curlWriteCallback(char* data, size_t size, size_t nmemb, void* user_data);
|
static size_t curlWriteCallback(char* data, size_t size, size_t nmemb, void* user_data);
|
||||||
static size_t curlReadCallback(char* data, size_t size, size_t nmemb, void* user_data);
|
static size_t curlReadCallback(char* data, size_t size, size_t nmemb, void* user_data);
|
||||||
static size_t curlHeaderCallback(char* data, size_t size, size_t nmemb, void* user_data);
|
static size_t curlHeaderCallback(char* data, size_t size, size_t nmemb, void* user_data);
|
||||||
|
static int curlProgressCallback(void* user_data, double dltotal, double dlnow, double ultotal, double ulnow);
|
||||||
|
|
||||||
// Called from curlHeaderCallback.
|
// Called from curlHeaderCallback.
|
||||||
void setStatusAndReason(U32 status, std::string const& reason);
|
void setStatusAndReason(U32 status, std::string const& reason);
|
||||||
|
|||||||
@@ -2140,7 +2140,8 @@ void BufferedCurlEasyRequest::processOutput(void)
|
|||||||
sResponderCallbackMutex.unlock();
|
sResponderCallbackMutex.unlock();
|
||||||
mResponder = NULL;
|
mResponder = NULL;
|
||||||
|
|
||||||
resetState();
|
// Commented out because this easy handle is not going to be reused; it makes no sense to reset its state.
|
||||||
|
//resetState();
|
||||||
}
|
}
|
||||||
|
|
||||||
//static
|
//static
|
||||||
@@ -2354,6 +2355,24 @@ size_t BufferedCurlEasyRequest::curlHeaderCallback(char* data, size_t size, size
|
|||||||
return header_len;
|
return header_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//static
|
||||||
|
int BufferedCurlEasyRequest::curlProgressCallback(void* user_data, double dltotal, double dlnow, double ultotal, double ulnow)
|
||||||
|
{
|
||||||
|
if (ultotal > 0) // Zero just means it isn't known yet.
|
||||||
|
{
|
||||||
|
ThreadSafeBufferedCurlEasyRequest* lockobj = static_cast<ThreadSafeBufferedCurlEasyRequest*>(user_data);
|
||||||
|
DoutEntering(dc::curl, "BufferedCurlEasyRequest::curlProgressCallback(" << (void*)lockobj << ", " << dltotal << ", " << dlnow << ", " << ultotal << ", " << ulnow << ")");
|
||||||
|
|
||||||
|
if (ulnow == ultotal) // Everything uploaded?
|
||||||
|
{
|
||||||
|
AICurlEasyRequest_wat self_w(*lockobj);
|
||||||
|
self_w->httptimeout()->upload_finished();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
int debug_callback(CURL* handle, curl_infotype infotype, char* buf, size_t size, void* user_ptr)
|
int debug_callback(CURL* handle, curl_infotype infotype, char* buf, size_t size, void* user_ptr)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -157,10 +157,11 @@ void HTTPTimeout::upload_starting(void)
|
|||||||
// |
|
// |
|
||||||
void HTTPTimeout::upload_finished(void)
|
void HTTPTimeout::upload_finished(void)
|
||||||
{
|
{
|
||||||
// Disable this assert when there isn't enough debug output to do anything with it.
|
// This function can be called more than once. Ignore the second call.
|
||||||
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
if (mUploadFinished)
|
||||||
llassert(!mUploadFinished); // If we get here twice, then the 'upload finished' detection failed.
|
{
|
||||||
#endif
|
return;
|
||||||
|
}
|
||||||
mUploadFinished = true;
|
mUploadFinished = true;
|
||||||
// Only accept a call to upload_starting() if being_redirected() is called after this point.
|
// Only accept a call to upload_starting() if being_redirected() is called after this point.
|
||||||
mBeingRedirected = false;
|
mBeingRedirected = false;
|
||||||
|
|||||||
@@ -565,7 +565,7 @@ void debug_curl_remove_easy(CURL* handle)
|
|||||||
handles.erase(iter);
|
handles.erase(iter);
|
||||||
Dout(dc::warning, "debug_curl_remove_easy(" << (void*)handle << "): removed");
|
Dout(dc::warning, "debug_curl_remove_easy(" << (void*)handle << "): removed");
|
||||||
}
|
}
|
||||||
llassert(!print_debug(handle));
|
llassert(!gDebugCurlTerse || !print_debug(handle));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool debug_curl_print_debug(CURL* handle)
|
bool debug_curl_print_debug(CURL* handle)
|
||||||
@@ -577,34 +577,28 @@ extern "C" {
|
|||||||
|
|
||||||
void debug_curl_easy_cleanup(CURL* handle)
|
void debug_curl_easy_cleanup(CURL* handle)
|
||||||
{
|
{
|
||||||
|
Dout(dc::curltr(print_debug(handle)), "curl_easy_cleanup(" << (AICURL*)handle << ")");
|
||||||
curl_easy_cleanup(handle);
|
curl_easy_cleanup(handle);
|
||||||
if (print_debug(handle))
|
|
||||||
{
|
|
||||||
Dout(dc::curltr, "curl_easy_cleanup(" << (AICURL*)handle << ")");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CURL* debug_curl_easy_duphandle(CURL* handle)
|
CURL* debug_curl_easy_duphandle(CURL* handle)
|
||||||
{
|
{
|
||||||
CURL* ret;
|
Dout(dc::curltr(print_debug(handle))|continued_cf, "curl_easy_duphandle(" << (AICURL*)handle << ") = ");
|
||||||
ret = curl_easy_duphandle(handle);
|
CURL* ret = curl_easy_duphandle(handle);
|
||||||
if (!print_debug(handle)) return ret;
|
Dout(dc::finish, (AICURL*)ret);
|
||||||
Dout(dc::curltr, "curl_easy_duphandle(" << (AICURL*)handle << ") = " << (AICURL*)ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* debug_curl_easy_escape(CURL* curl, char* url, int length)
|
char* debug_curl_easy_escape(CURL* curl, char* url, int length)
|
||||||
{
|
{
|
||||||
char* ret;
|
Dout(dc::curltr(print_debug(curl))|continued_cf, "curl_easy_escape(" << (AICURL*)curl << ", \"" << url << "\", " << length << ") = ");
|
||||||
ret = curl_easy_escape(curl, url, length);
|
char* ret = curl_easy_escape(curl, url, length);
|
||||||
if (!print_debug(curl)) return ret;
|
Dout(dc::finish, '"' << ret << '"');
|
||||||
Dout(dc::curltr, "curl_easy_escape(" << (AICURL*)curl << ", \"" << url << "\", " << length << ") = \"" << ret << '"');
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLcode debug_curl_easy_getinfo(CURL* handle, CURLINFO info, ...)
|
CURLcode debug_curl_easy_getinfo(CURL* handle, CURLINFO info, ...)
|
||||||
{
|
{
|
||||||
CURLcode ret;
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
union param_type {
|
union param_type {
|
||||||
void* some_ptr;
|
void* some_ptr;
|
||||||
@@ -616,27 +610,27 @@ CURLcode debug_curl_easy_getinfo(CURL* handle, CURLINFO info, ...)
|
|||||||
va_start(ap, info);
|
va_start(ap, info);
|
||||||
param.some_ptr = va_arg(ap, void*);
|
param.some_ptr = va_arg(ap, void*);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
ret = curl_easy_getinfo(handle, info, param.some_ptr);
|
Dout(dc::curltr(print_debug(handle))|continued_cf, "curl_easy_getinfo(" << (AICURL*)handle << ", " << info << ", ");
|
||||||
if (!print_debug(handle)) return ret;
|
CURLcode ret = curl_easy_getinfo(handle, info, param.some_ptr);
|
||||||
if (info == CURLINFO_PRIVATE)
|
if (info == CURLINFO_PRIVATE)
|
||||||
{
|
{
|
||||||
Dout(dc::curltr, "curl_easy_getinfo(" << (AICURL*)handle << ", " << info << ", 0x" << std::hex << (size_t)param.some_ptr << std::dec << ") = " << ret);
|
Dout(dc::finish, "0x" << std::hex << (size_t)param.some_ptr << std::dec << ") = " << ret);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch((info & CURLINFO_TYPEMASK))
|
switch((info & CURLINFO_TYPEMASK))
|
||||||
{
|
{
|
||||||
case CURLINFO_STRING:
|
case CURLINFO_STRING:
|
||||||
Dout(dc::curltr, "curl_easy_getinfo(" << (AICURL*)handle << ", " << info << ", (char**){ \"" << (ret == CURLE_OK ? *param.char_ptr : " <unchanged> ") << "\" }) = " << ret);
|
Dout(dc::finish, "(char**){ \"" << (ret == CURLE_OK ? *param.char_ptr : " <unchanged> ") << "\" }) = " << ret);
|
||||||
break;
|
break;
|
||||||
case CURLINFO_LONG:
|
case CURLINFO_LONG:
|
||||||
Dout(dc::curltr, "curl_easy_getinfo(" << (AICURL*)handle << ", " << info << ", (long*){ " << (ret == CURLE_OK ? *param.long_ptr : 0L) << "L }) = " << ret);
|
Dout(dc::finish, "(long*){ " << (ret == CURLE_OK ? *param.long_ptr : 0L) << "L }) = " << ret);
|
||||||
break;
|
break;
|
||||||
case CURLINFO_DOUBLE:
|
case CURLINFO_DOUBLE:
|
||||||
Dout(dc::curltr, "curl_easy_getinfo(" << (AICURL*)handle << ", " << info << ", (double*){" << (ret == CURLE_OK ? *param.double_ptr : 0.) << "}) = " << ret);
|
Dout(dc::finish, "(double*){" << (ret == CURLE_OK ? *param.double_ptr : 0.) << "}) = " << ret);
|
||||||
break;
|
break;
|
||||||
case CURLINFO_SLIST:
|
case CURLINFO_SLIST:
|
||||||
Dout(dc::curltr, "curl_easy_getinfo(" << (AICURL*)handle << ", " << info << ", (curl_slist**){ " << (ret == CURLE_OK ? **param.curl_slist_ptr : unchanged_slist) << " }) = " << ret);
|
Dout(dc::finish, "(curl_slist**){ " << (ret == CURLE_OK ? **param.curl_slist_ptr : unchanged_slist) << " }) = " << ret);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -645,36 +639,32 @@ CURLcode debug_curl_easy_getinfo(CURL* handle, CURLINFO info, ...)
|
|||||||
|
|
||||||
CURL* debug_curl_easy_init(void)
|
CURL* debug_curl_easy_init(void)
|
||||||
{
|
{
|
||||||
CURL* ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_easy_init() = ");
|
||||||
ret = curl_easy_init();
|
CURL* ret = curl_easy_init();
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, (AICURL*)ret);
|
||||||
Dout(dc::curltr, "curl_easy_init() = " << (AICURL*)ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLcode debug_curl_easy_pause(CURL* handle, int bitmask)
|
CURLcode debug_curl_easy_pause(CURL* handle, int bitmask)
|
||||||
{
|
{
|
||||||
CURLcode ret;
|
Dout(dc::curltr(print_debug(handle))|continued_cf, "curl_easy_pause(" << (AICURL*)handle << ", 0x" << std::hex << bitmask << std::dec << ") = ");
|
||||||
ret = curl_easy_pause(handle, bitmask);
|
CURLcode ret = curl_easy_pause(handle, bitmask);
|
||||||
if (!print_debug(handle)) return ret;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_easy_pause(" << (AICURL*)handle << ", 0x" << std::hex << bitmask << std::dec << ") = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLcode debug_curl_easy_perform(CURL* handle)
|
CURLcode debug_curl_easy_perform(CURL* handle)
|
||||||
{
|
{
|
||||||
CURLcode ret;
|
Dout(dc::curltr(print_debug(handle))|continued_cf, "curl_easy_perform(" << (AICURL*)handle << ") = ");
|
||||||
ret = curl_easy_perform(handle);
|
CURLcode ret = curl_easy_perform(handle);
|
||||||
if (!print_debug(handle)) return ret;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_easy_perform(" << (AICURL*)handle << ") = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_curl_easy_reset(CURL* handle)
|
void debug_curl_easy_reset(CURL* handle)
|
||||||
{
|
{
|
||||||
|
Dout(dc::curltr(print_debug(handle)), "curl_easy_reset(" << (AICURL*)handle << ")");
|
||||||
curl_easy_reset(handle);
|
curl_easy_reset(handle);
|
||||||
if (!print_debug(handle)) return;
|
|
||||||
Dout(dc::curltr, "curl_easy_reset(" << (AICURL*)handle << ")");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLcode debug_curl_easy_setopt(CURL* handle, CURLoption option, ...)
|
CURLcode debug_curl_easy_setopt(CURL* handle, CURLoption option, ...)
|
||||||
@@ -710,11 +700,9 @@ CURLcode debug_curl_easy_setopt(CURL* handle, CURLoption option, ...)
|
|||||||
{
|
{
|
||||||
case CURLOPTTYPE_LONG:
|
case CURLOPTTYPE_LONG:
|
||||||
{
|
{
|
||||||
|
Dout(dc::curltr(print_debug(handle))|continued_cf, "curl_easy_setopt(" << (AICURL*)handle << ", " << option << ", " << param.along << "L) = ");
|
||||||
ret = curl_easy_setopt(handle, option, param.along);
|
ret = curl_easy_setopt(handle, option, param.along);
|
||||||
if (print_debug(handle))
|
Dout(dc::finish, ret);
|
||||||
{
|
|
||||||
Dout(dc::curltr, "curl_easy_setopt(" << (AICURL*)handle << ", " << option << ", " << param.along << "L) = " << ret);
|
|
||||||
}
|
|
||||||
if (option == CURLOPT_POSTFIELDSIZE)
|
if (option == CURLOPT_POSTFIELDSIZE)
|
||||||
{
|
{
|
||||||
postfieldsize = param.along;
|
postfieldsize = param.along;
|
||||||
@@ -723,9 +711,7 @@ CURLcode debug_curl_easy_setopt(CURL* handle, CURLoption option, ...)
|
|||||||
}
|
}
|
||||||
case CURLOPTTYPE_OBJECTPOINT:
|
case CURLOPTTYPE_OBJECTPOINT:
|
||||||
{
|
{
|
||||||
ret = curl_easy_setopt(handle, option, param.ptr);
|
LibcwDoutScopeBegin(LIBCWD_DEBUGCHANNELS, libcwd::libcw_do, dc::curltr(print_debug(handle))|continued_cf)
|
||||||
if (!print_debug(handle)) break;
|
|
||||||
LibcwDoutScopeBegin(LIBCWD_DEBUGCHANNELS, libcwd::libcw_do, dc::curltr)
|
|
||||||
LibcwDoutStream << "curl_easy_setopt(" << (AICURL*)handle << ", " << option << ", ";
|
LibcwDoutStream << "curl_easy_setopt(" << (AICURL*)handle << ", " << option << ", ";
|
||||||
// For a subset of all options that take a char*, print the string passed.
|
// For a subset of all options that take a char*, print the string passed.
|
||||||
if (option == CURLOPT_PROXY || // Set HTTP proxy to use. The parameter should be a char* to a zero terminated string holding the host name or dotted IP address.
|
if (option == CURLOPT_PROXY || // Set HTTP proxy to use. The parameter should be a char* to a zero terminated string holding the host name or dotted IP address.
|
||||||
@@ -771,8 +757,10 @@ CURLcode debug_curl_easy_setopt(CURL* handle, CURLoption option, ...)
|
|||||||
{
|
{
|
||||||
LibcwDoutStream << "(object*)0x" << std::hex << (size_t)param.ptr << std::dec << ")";
|
LibcwDoutStream << "(object*)0x" << std::hex << (size_t)param.ptr << std::dec << ")";
|
||||||
}
|
}
|
||||||
LibcwDoutStream << " = " << ret;
|
LibcwDoutStream << " = ";
|
||||||
LibcwDoutScopeEnd;
|
LibcwDoutScopeEnd;
|
||||||
|
ret = curl_easy_setopt(handle, option, param.ptr);
|
||||||
|
Dout(dc::finish, ret);
|
||||||
if (option == CURLOPT_HTTPHEADER && param.ptr)
|
if (option == CURLOPT_HTTPHEADER && param.ptr)
|
||||||
{
|
{
|
||||||
debug::Indent indent(2);
|
debug::Indent indent(2);
|
||||||
@@ -787,19 +775,15 @@ CURLcode debug_curl_easy_setopt(CURL* handle, CURLoption option, ...)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CURLOPTTYPE_FUNCTIONPOINT:
|
case CURLOPTTYPE_FUNCTIONPOINT:
|
||||||
|
Dout(dc::curltr(print_debug(handle))|continued_cf, "curl_easy_setopt(" << (AICURL*)handle << ", " << option << ", (function*)0x" << std::hex << (size_t)param.ptr << std::dec << ") = ");
|
||||||
ret = curl_easy_setopt(handle, option, param.ptr);
|
ret = curl_easy_setopt(handle, option, param.ptr);
|
||||||
if (print_debug(handle))
|
Dout(dc::finish, ret);
|
||||||
{
|
|
||||||
Dout(dc::curltr, "curl_easy_setopt(" << (AICURL*)handle << ", " << option << ", (function*)0x" << std::hex << (size_t)param.ptr << std::dec << ") = " << ret);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CURLOPTTYPE_OFF_T:
|
case CURLOPTTYPE_OFF_T:
|
||||||
{
|
{
|
||||||
|
Dout(dc::curltr(print_debug(handle))|continued_cf, "curl_easy_setopt(" << (AICURL*)handle << ", " << option << ", (curl_off_t)" << param.offset << ") = ");
|
||||||
ret = curl_easy_setopt(handle, option, param.offset);
|
ret = curl_easy_setopt(handle, option, param.offset);
|
||||||
if (print_debug(handle))
|
Dout(dc::finish, ret);
|
||||||
{
|
|
||||||
Dout(dc::curltr, "curl_easy_setopt(" << (AICURL*)handle << ", " << option << ", (curl_off_t)" << param.offset << ") = " << ret);
|
|
||||||
}
|
|
||||||
if (option == CURLOPT_POSTFIELDSIZE_LARGE)
|
if (option == CURLOPT_POSTFIELDSIZE_LARGE)
|
||||||
{
|
{
|
||||||
postfieldsize = (long)param.offset;
|
postfieldsize = (long)param.offset;
|
||||||
@@ -814,103 +798,93 @@ CURLcode debug_curl_easy_setopt(CURL* handle, CURLoption option, ...)
|
|||||||
|
|
||||||
char const* debug_curl_easy_strerror(CURLcode errornum)
|
char const* debug_curl_easy_strerror(CURLcode errornum)
|
||||||
{
|
{
|
||||||
char const* ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_easy_strerror(" << errornum << ") = ");
|
||||||
ret = curl_easy_strerror(errornum);
|
char const* ret = curl_easy_strerror(errornum);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, '"' << ret << '"');
|
||||||
Dout(dc::curltr, "curl_easy_strerror(" << errornum << ") = \"" << ret << '"');
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* debug_curl_easy_unescape(CURL* curl, char* url, int inlength, int* outlength)
|
char* debug_curl_easy_unescape(CURL* curl, char* url, int inlength, int* outlength)
|
||||||
{
|
{
|
||||||
char* ret;
|
Dout(dc::curltr(print_debug(curl))|continued_cf, "curl_easy_unescape(" << (AICURL*)curl << ", \"" << url << "\", " << inlength << ", ");
|
||||||
ret = curl_easy_unescape(curl, url, inlength, outlength);
|
char* ret = curl_easy_unescape(curl, url, inlength, outlength);
|
||||||
if (!print_debug(curl)) return ret;
|
Dout(dc::finish, ((ret && outlength) ? *outlength : 1) << ") = \"" << ret << '"');
|
||||||
Dout(dc::curltr, "curl_easy_unescape(" << (AICURL*)curl << ", \"" << url << "\", " << inlength << ", " << ((ret && outlength) ? *outlength : 1) << ") = \"" << ret << '"');
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_curl_free(char* ptr)
|
void debug_curl_free(char* ptr)
|
||||||
{
|
{
|
||||||
|
Dout(dc::curltr(!gDebugCurlTerse), "curl_free(0x" << std::hex << (size_t)ptr << std::dec << ")");
|
||||||
curl_free(ptr);
|
curl_free(ptr);
|
||||||
if (gDebugCurlTerse) return;
|
|
||||||
Dout(dc::curltr, "curl_free(0x" << std::hex << (size_t)ptr << std::dec << ")");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
time_t debug_curl_getdate(char const* datestring, time_t* now)
|
time_t debug_curl_getdate(char const* datestring, time_t* now)
|
||||||
{
|
{
|
||||||
time_t ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_getdate(\"" << datestring << "\", " << (now == NULL ? "NULL" : "<erroneous non-NULL value for 'now'>") << ") = ");
|
||||||
ret = curl_getdate(datestring, now);
|
time_t ret = curl_getdate(datestring, now);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_getdate(\"" << datestring << "\", " << (now == NULL ? "NULL" : "<erroneous non-NULL value for 'now'>") << ") = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_curl_global_cleanup(void)
|
void debug_curl_global_cleanup(void)
|
||||||
{
|
{
|
||||||
curl_global_cleanup();
|
|
||||||
Dout(dc::curltr, "curl_global_cleanup()");
|
Dout(dc::curltr, "curl_global_cleanup()");
|
||||||
|
curl_global_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLcode debug_curl_global_init(long flags)
|
CURLcode debug_curl_global_init(long flags)
|
||||||
{
|
{
|
||||||
CURLcode ret;
|
Dout(dc::curltr|continued_cf, "curl_global_init(0x" << std::hex << flags << std::dec << ") = ");
|
||||||
ret = curl_global_init(flags);
|
CURLcode ret = curl_global_init(flags);
|
||||||
Dout(dc::curltr, "curl_global_init(0x" << std::hex << flags << std::dec << ") = " << ret);
|
Dout(dc::finish, ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLMcode debug_curl_multi_add_handle(CURLM* multi_handle, CURL* easy_handle)
|
CURLMcode debug_curl_multi_add_handle(CURLM* multi_handle, CURL* easy_handle)
|
||||||
{
|
{
|
||||||
CURLMcode ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_multi_add_handle(" << (AICURLM*)multi_handle << ", " << (AICURL*)easy_handle << ") = ");
|
||||||
ret = curl_multi_add_handle(multi_handle, easy_handle);
|
CURLMcode ret = curl_multi_add_handle(multi_handle, easy_handle);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_multi_add_handle(" << (AICURLM*)multi_handle << ", " << (AICURL*)easy_handle << ") = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLMcode debug_curl_multi_assign(CURLM* multi_handle, curl_socket_t sockfd, void* sockptr)
|
CURLMcode debug_curl_multi_assign(CURLM* multi_handle, curl_socket_t sockfd, void* sockptr)
|
||||||
{
|
{
|
||||||
CURLMcode ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_multi_assign(" << (AICURLM*)multi_handle << ", " << Socket(sockfd) << ", " << sockptr << ") = ");
|
||||||
ret = curl_multi_assign(multi_handle, sockfd, sockptr);
|
CURLMcode ret = curl_multi_assign(multi_handle, sockfd, sockptr);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_multi_assign(" << (AICURLM*)multi_handle << ", " << Socket(sockfd) << ", " << sockptr << ") = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLMcode debug_curl_multi_cleanup(CURLM* multi_handle)
|
CURLMcode debug_curl_multi_cleanup(CURLM* multi_handle)
|
||||||
{
|
{
|
||||||
CURLMcode ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_multi_cleanup(" << (AICURLM*)multi_handle << ") = ");
|
||||||
ret = curl_multi_cleanup(multi_handle);
|
CURLMcode ret = curl_multi_cleanup(multi_handle);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_multi_cleanup(" << (AICURLM*)multi_handle << ") = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLMsg* debug_curl_multi_info_read(CURLM* multi_handle, int* msgs_in_queue)
|
CURLMsg* debug_curl_multi_info_read(CURLM* multi_handle, int* msgs_in_queue)
|
||||||
{
|
{
|
||||||
CURLMsg* ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_multi_info_read(" << (AICURLM*)multi_handle << ", ");
|
||||||
ret = curl_multi_info_read(multi_handle, msgs_in_queue);
|
CURLMsg* ret = curl_multi_info_read(multi_handle, msgs_in_queue);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, "{" << *msgs_in_queue << "}) = " << ret);
|
||||||
Dout(dc::curltr, "curl_multi_info_read(" << (AICURLM*)multi_handle << ", {" << *msgs_in_queue << "}) = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLM* debug_curl_multi_init(void)
|
CURLM* debug_curl_multi_init(void)
|
||||||
{
|
{
|
||||||
CURLM* ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_multi_init() = ");
|
||||||
ret = curl_multi_init();
|
CURLM* ret = curl_multi_init();
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, (AICURLM*)ret);
|
||||||
Dout(dc::curltr, "curl_multi_init() = " << (AICURLM*)ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLMcode debug_curl_multi_remove_handle(CURLM* multi_handle, CURL* easy_handle)
|
CURLMcode debug_curl_multi_remove_handle(CURLM* multi_handle, CURL* easy_handle)
|
||||||
{
|
{
|
||||||
CURLMcode ret;
|
Dout(dc::curltr(print_debug(easy_handle))|continued_cf, "curl_multi_remove_handle(" << (AICURLM*)multi_handle << ", " << (AICURL*)easy_handle << ") = ");
|
||||||
ret = curl_multi_remove_handle(multi_handle, easy_handle);
|
CURLMcode ret = curl_multi_remove_handle(multi_handle, easy_handle);
|
||||||
if (!print_debug(easy_handle)) return ret;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_multi_remove_handle(" << (AICURLM*)multi_handle << ", " << (AICURL*)easy_handle << ") = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -945,24 +919,24 @@ CURLMcode debug_curl_multi_setopt(CURLM* multi_handle, CURLMoption option, ...)
|
|||||||
switch (param_type)
|
switch (param_type)
|
||||||
{
|
{
|
||||||
case CURLOPTTYPE_LONG:
|
case CURLOPTTYPE_LONG:
|
||||||
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_easy_setopt(" << (AICURLM*)multi_handle << ", " << option << ", " << param.along << "L) = ");
|
||||||
ret = curl_multi_setopt(multi_handle, option, param.along);
|
ret = curl_multi_setopt(multi_handle, option, param.along);
|
||||||
if (gDebugCurlTerse) break;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_easy_setopt(" << (AICURLM*)multi_handle << ", " << option << ", " << param.along << "L) = " << ret);
|
|
||||||
break;
|
break;
|
||||||
case CURLOPTTYPE_OBJECTPOINT:
|
case CURLOPTTYPE_OBJECTPOINT:
|
||||||
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_easy_setopt(" << (AICURLM*)multi_handle << ", " << option << ", (object*)0x" << std::hex << (size_t)param.ptr << std::dec << ") = ");
|
||||||
ret = curl_multi_setopt(multi_handle, option, param.ptr);
|
ret = curl_multi_setopt(multi_handle, option, param.ptr);
|
||||||
if (gDebugCurlTerse) break;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_easy_setopt(" << (AICURLM*)multi_handle << ", " << option << ", (object*)0x" << std::hex << (size_t)param.ptr << std::dec << ") = " << ret);
|
|
||||||
break;
|
break;
|
||||||
case CURLOPTTYPE_FUNCTIONPOINT:
|
case CURLOPTTYPE_FUNCTIONPOINT:
|
||||||
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_easy_setopt(" << (AICURLM*)multi_handle << ", " << option << ", (function*)0x" << std::hex << (size_t)param.ptr << std::dec << ") = ");
|
||||||
ret = curl_multi_setopt(multi_handle, option, param.ptr);
|
ret = curl_multi_setopt(multi_handle, option, param.ptr);
|
||||||
if (gDebugCurlTerse) break;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_easy_setopt(" << (AICURLM*)multi_handle << ", " << option << ", (function*)0x" << std::hex << (size_t)param.ptr << std::dec << ") = " << ret);
|
|
||||||
break;
|
break;
|
||||||
case CURLOPTTYPE_OFF_T:
|
case CURLOPTTYPE_OFF_T:
|
||||||
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_easy_setopt(" << (AICURLM*)multi_handle << ", " << option << ", (curl_off_t)" << param.offset << ") = ");
|
||||||
ret = curl_multi_setopt(multi_handle, option, param.offset);
|
ret = curl_multi_setopt(multi_handle, option, param.offset);
|
||||||
if (gDebugCurlTerse) break;
|
Dout(dc::finish, ret);
|
||||||
Dout(dc::curltr, "curl_easy_setopt(" << (AICURLM*)multi_handle << ", " << option << ", (curl_off_t)" << param.offset << ") = " << ret);
|
|
||||||
break;
|
break;
|
||||||
default: // Stop compiler complaining about no default.
|
default: // Stop compiler complaining about no default.
|
||||||
break;
|
break;
|
||||||
@@ -972,54 +946,47 @@ CURLMcode debug_curl_multi_setopt(CURLM* multi_handle, CURLMoption option, ...)
|
|||||||
|
|
||||||
CURLMcode debug_curl_multi_socket_action(CURLM* multi_handle, curl_socket_t sockfd, int ev_bitmask, int* running_handles)
|
CURLMcode debug_curl_multi_socket_action(CURLM* multi_handle, curl_socket_t sockfd, int ev_bitmask, int* running_handles)
|
||||||
{
|
{
|
||||||
CURLMcode ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_multi_socket_action(" << (AICURLM*)multi_handle << ", " << Socket(sockfd) << ", " << EvBitmask(ev_bitmask) << ", ");
|
||||||
ret = curl_multi_socket_action(multi_handle, sockfd, ev_bitmask, running_handles);
|
CURLMcode ret = curl_multi_socket_action(multi_handle, sockfd, ev_bitmask, running_handles);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, "{" << (ret == CURLM_OK ? *running_handles : 0) << "}) = " << ret);
|
||||||
Dout(dc::curltr, "curl_multi_socket_action(" << (AICURLM*)multi_handle << ", " << Socket(sockfd) <<
|
|
||||||
", " << EvBitmask(ev_bitmask) << ", {" << (ret == CURLM_OK ? *running_handles : 0) << "}) = " << ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
char const* debug_curl_multi_strerror(CURLMcode errornum)
|
char const* debug_curl_multi_strerror(CURLMcode errornum)
|
||||||
{
|
{
|
||||||
char const* ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_multi_strerror(" << errornum << ") = ");
|
||||||
ret = curl_multi_strerror(errornum);
|
char const* ret = curl_multi_strerror(errornum);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, '"' << ret << '"');
|
||||||
Dout(dc::curltr, "curl_multi_strerror(" << errornum << ") = \"" << ret << '"');
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct curl_slist* debug_curl_slist_append(struct curl_slist* list, char const* string)
|
struct curl_slist* debug_curl_slist_append(struct curl_slist* list, char const* string)
|
||||||
{
|
{
|
||||||
struct curl_slist* ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_slist_append((curl_slist)@0x" << std::hex << (size_t)list << std::dec << ", \"" << string << "\") = ");
|
||||||
ret = curl_slist_append(list, string);
|
struct curl_slist* ret = curl_slist_append(list, string);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, *ret);
|
||||||
Dout(dc::curltr, "curl_slist_append((curl_slist)@0x" << std::hex << (size_t)list << std::dec << ", \"" << string << "\") = " << *ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void debug_curl_slist_free_all(struct curl_slist* list)
|
void debug_curl_slist_free_all(struct curl_slist* list)
|
||||||
{
|
{
|
||||||
|
Dout(dc::curltr(!gDebugCurlTerse), "curl_slist_free_all((curl_slist)@0x" << std::hex << (size_t)list << std::dec << ")");
|
||||||
curl_slist_free_all(list);
|
curl_slist_free_all(list);
|
||||||
if (gDebugCurlTerse) return;
|
|
||||||
Dout(dc::curltr, "curl_slist_free_all((curl_slist)@0x" << std::hex << (size_t)list << std::dec << ")");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* debug_curl_unescape(char const* url, int length)
|
char* debug_curl_unescape(char const* url, int length)
|
||||||
{
|
{
|
||||||
char* ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_unescape(\"" << url << "\", " << length << ") = ");
|
||||||
ret = curl_unescape(url, length);
|
char* ret = curl_unescape(url, length);
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, '"' << ret << '"');
|
||||||
Dout(dc::curltr, "curl_unescape(\"" << url << "\", " << length << ") = \"" << ret << '"');
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* debug_curl_version(void)
|
char* debug_curl_version(void)
|
||||||
{
|
{
|
||||||
char* ret;
|
Dout(dc::curltr(!gDebugCurlTerse)|continued_cf, "curl_version() = ");
|
||||||
ret = curl_version();
|
char* ret = curl_version();
|
||||||
if (gDebugCurlTerse) return ret;
|
Dout(dc::finish, '"' << ret << '"');
|
||||||
Dout(dc::curltr, "curl_version() = \"" << ret << '"');
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1414,7 +1414,7 @@ void LLMeshUploadThread::preStart()
|
|||||||
|
|
||||||
AIMeshUpload::AIMeshUpload(LLMeshUploadThread::instance_list& data, LLVector3& scale, bool upload_textures, bool upload_skin, bool upload_joints, std::string const& upload_url, bool do_upload,
|
AIMeshUpload::AIMeshUpload(LLMeshUploadThread::instance_list& data, LLVector3& scale, bool upload_textures, bool upload_skin, bool upload_joints, std::string const& upload_url, bool do_upload,
|
||||||
LLHandle<LLWholeModelFeeObserver> const& fee_observer, LLHandle<LLWholeModelUploadObserver> const& upload_observer) :
|
LLHandle<LLWholeModelFeeObserver> const& fee_observer, LLHandle<LLWholeModelUploadObserver> const& upload_observer) :
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
AIStateMachine(false),
|
AIStateMachine(false),
|
||||||
#endif
|
#endif
|
||||||
mMeshUpload(new AIStateMachineThread<LLMeshUploadThread>(CWD_ONLY(false))), mWholeModelUploadURL(upload_url)
|
mMeshUpload(new AIStateMachineThread<LLMeshUploadThread>(CWD_ONLY(false))), mWholeModelUploadURL(upload_url)
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class AIFetchInventoryFolder : public AIStateMachine {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
AIFetchInventoryFolder(CWD_ONLY(bool debug = false)) :
|
AIFetchInventoryFolder(CWD_ONLY(bool debug = false)) :
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
AIStateMachine(debug),
|
AIStateMachine(debug),
|
||||||
#endif
|
#endif
|
||||||
mCreate(false), mFetchContents(false), mExists(false), mCreated(false)
|
mCreate(false), mFetchContents(false), mExists(false), mCreated(false)
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ char const* AIFilePicker::state_str_impl(state_type run_state) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
AIFilePicker::AIFilePicker(CWD_ONLY(bool debug)) :
|
AIFilePicker::AIFilePicker(CWD_ONLY(bool debug)) :
|
||||||
#ifdef CWDEBUG
|
#if defined(CWDEBUG) || defined(DEBUG_CURLIO)
|
||||||
AIStateMachine(debug),
|
AIStateMachine(debug),
|
||||||
#endif
|
#endif
|
||||||
mPluginManager(NULL), mCanceled(false)
|
mPluginManager(NULL), mCanceled(false)
|
||||||
|
|||||||
Reference in New Issue
Block a user