From 062be76e41a0353467372e0aff70b77331dfcecc Mon Sep 17 00:00:00 2001 From: Charles-Henri Bruyand Date: Wed, 7 Dec 2022 15:26:15 +0100 Subject: [PATCH] minicurl: fix missing CURLOPT_XFERINFOFUNCTION on old curl versions --- pdns/minicurl.cc | 18 ++++++++++++++++++ pdns/minicurl.hh | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/pdns/minicurl.cc b/pdns/minicurl.cc index 02b5204562..948f3f488a 100644 --- a/pdns/minicurl.cc +++ b/pdns/minicurl.cc @@ -65,6 +65,7 @@ size_t MiniCurl::write_callback(char *ptr, size_t size, size_t nmemb, void *user return 0; } +#if defined(LIBCURL_VERSION_NUM) && LIBCURL_VERSION_NUM >= 0x072000 // 7.32.0 size_t MiniCurl::progress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { if (clientp != nullptr) { @@ -75,6 +76,18 @@ size_t MiniCurl::progress_callback(void *clientp, curl_off_t dltotal, curl_off_t } return 0; } +#else +size_t MiniCurl::progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) +{ + if (clientp != nullptr) { + MiniCurl* us = static_cast(clientp); + if (us->d_byteslimit > 0 && dlnow > static_cast(us->d_byteslimit)) { + return static_cast(dlnow); + } + } + return 0; +} +#endif static string extractHostFromURL(const std::string& url) { @@ -131,8 +144,13 @@ void MiniCurl::setupURL(const std::string& str, const ComboAddress* rem, const C if (d_byteslimit > 0) { /* enable progress meter */ curl_easy_setopt(d_curl, CURLOPT_NOPROGRESS, 0L); +#if defined(LIBCURL_VERSION_NUM) && LIBCURL_VERSION_NUM >= 0x072000 // 7.32.0 curl_easy_setopt(d_curl, CURLOPT_XFERINFOFUNCTION, progress_callback); curl_easy_setopt(d_curl, CURLOPT_XFERINFODATA, this); +#else + curl_easy_setopt(d_curl, CURLOPT_PROGRESSFUNCTION, progress_callback); + curl_easy_setopt(d_curl, CURLOPT_PROGRESSDATA, this); +#endif } curl_easy_setopt(d_curl, CURLOPT_TIMEOUT, static_cast(timeout)); diff --git a/pdns/minicurl.hh b/pdns/minicurl.hh index c5bbf3316e..52447a886a 100644 --- a/pdns/minicurl.hh +++ b/pdns/minicurl.hh @@ -43,7 +43,11 @@ public: private: CURL *d_curl; static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata); +#if defined(LIBCURL_VERSION_NUM) && LIBCURL_VERSION_NUM >= 0x072000 // 7.32.0 static size_t progress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); +#else + static size_t progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow); +#endif std::string d_data; size_t d_byteslimit; struct curl_slist* d_header_list = nullptr; -- 2.47.2