Enable verbose curl output

Closes #1182.
This commit is contained in:
Eelco Dolstra 2017-01-24 13:15:24 +01:00
parent 3b4a15bd48
commit e3bf228c92
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE

View file

@ -172,6 +172,13 @@ struct CurlDownloader : public Downloader
return ((DownloadItem *) userp)->progressCallback(dltotal, dlnow); return ((DownloadItem *) userp)->progressCallback(dltotal, dlnow);
} }
static int debugCallback(CURL * handle, curl_infotype type, char * data, size_t size, void * userptr)
{
if (type == CURLINFO_TEXT)
vomit("curl: %s", chomp(std::string(data, size)));
return 0;
}
void init() void init()
{ {
// FIXME: handle parallel downloads. // FIXME: handle parallel downloads.
@ -184,6 +191,12 @@ struct CurlDownloader : public Downloader
if (!req) req = curl_easy_init(); if (!req) req = curl_easy_init();
curl_easy_reset(req); curl_easy_reset(req);
if (verbosity >= lvlVomit) {
curl_easy_setopt(req, CURLOPT_VERBOSE, 1);
curl_easy_setopt(req, CURLOPT_DEBUGFUNCTION, DownloadItem::debugCallback);
}
curl_easy_setopt(req, CURLOPT_URL, request.uri.c_str()); curl_easy_setopt(req, CURLOPT_URL, request.uri.c_str());
curl_easy_setopt(req, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(req, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(req, CURLOPT_NOSIGNAL, 1); curl_easy_setopt(req, CURLOPT_NOSIGNAL, 1);
@ -387,7 +400,7 @@ struct CurlDownloader : public Downloader
nextWakeup != std::chrono::steady_clock::time_point() nextWakeup != std::chrono::steady_clock::time_point()
? std::max(0, (int) std::chrono::duration_cast<std::chrono::milliseconds>(nextWakeup - std::chrono::steady_clock::now()).count()) ? std::max(0, (int) std::chrono::duration_cast<std::chrono::milliseconds>(nextWakeup - std::chrono::steady_clock::now()).count())
: 1000000000; : 1000000000;
//printMsg(lvlVomit, format("download thread waiting for %d ms") % sleepTimeMs); vomit("download thread waiting for %d ms", sleepTimeMs);
mc = curl_multi_wait(curlm, extraFDs, 1, sleepTimeMs, &numfds); mc = curl_multi_wait(curlm, extraFDs, 1, sleepTimeMs, &numfds);
if (mc != CURLM_OK) if (mc != CURLM_OK)
throw nix::Error(format("unexpected error from curl_multi_wait(): %s") % curl_multi_strerror(mc)); throw nix::Error(format("unexpected error from curl_multi_wait(): %s") % curl_multi_strerror(mc));