Merge branch 'master' of git://github.com/AlericInglewood/SingularityViewer

This commit is contained in:
Latif Khalifa
2013-11-26 00:36:53 +01:00
13 changed files with 177 additions and 142 deletions

View File

@@ -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)

View File

@@ -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
{ {

View File

@@ -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 << "]"); }

View File

@@ -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

View File

@@ -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.

View File

@@ -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())

View File

@@ -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);

View File

@@ -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)
{ {

View File

@@ -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;

View File

@@ -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;
} }

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)