X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhttpfetch.cpp;h=326b5052ff4059fe41ceb96ea177b5124174251f;hb=37f771a95bd54e2072f07783df142da4a91e7bff;hp=ac743bf77fe9df6a7655e6963dead682b7c5d3c8;hpb=d4c0f91275fe70fef73b316c36abfb989dfd55b1;p=oweals%2Fminetest.git diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index ac743bf77..326b5052f 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -17,15 +17,15 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "socket.h" // for select() -#include "porting.h" // for sleep_ms(), get_sysinfo(), secure_rand_fill_buf() #include "httpfetch.h" +#include "porting.h" // for sleep_ms(), get_sysinfo(), secure_rand_fill_buf() #include #include #include #include -#include +#include #include +#include "network/socket.h" // for select() #include "threading/event.h" #include "config.h" #include "exceptions.h" @@ -42,12 +42,8 @@ std::map > g_httpfetch_results; PcgRandom g_callerid_randomness; HTTPFetchRequest::HTTPFetchRequest() : - url(""), - caller(HTTPFETCH_DISCARD), - request_id(0), timeout(g_settings->getS32("curl_timeout")), connect_timeout(timeout), - multipart(false), useragent(std::string(PROJECT_NAME_C "/") + g_version_hash + " (" + porting::get_sysinfo() + ")") { } @@ -174,7 +170,8 @@ class CurlHandlePool std::list handles; public: - CurlHandlePool() {} + CurlHandlePool() = default; + ~CurlHandlePool() { for (std::list::iterator it = handles.begin(); @@ -248,13 +245,18 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_, curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); - curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 1); + curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3); + curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip"); std::string bind_address = g_settings->get("bind_address"); if (!bind_address.empty()) { curl_easy_setopt(curl, CURLOPT_INTERFACE, bind_address.c_str()); } + if (!g_settings->getBool("enable_ipv6")) { + curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + } + #if LIBCURL_VERSION_NUM >= 0x071304 // Restrict protocols so that curl vulnerabilities in // other protocols don't affect us. @@ -276,7 +278,7 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_, curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, request.connect_timeout); - if (request.useragent != "") + if (!request.useragent.empty()) curl_easy_setopt(curl, CURLOPT_USERAGENT, request.useragent.c_str()); // Set up a write callback that writes to the @@ -312,13 +314,12 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_, } else if (request.post_data.empty()) { curl_easy_setopt(curl, CURLOPT_POST, 1); std::string str; - for (StringMap::iterator it = request.post_fields.begin(); - it != request.post_fields.end(); ++it) { - if (str != "") + for (auto &post_field : request.post_fields) { + if (!str.empty()) str += "&"; - str += urlencode(it->first); + str += urlencode(post_field.first); str += "="; - str += urlencode(it->second); + str += urlencode(post_field.second); } curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, str.size()); @@ -334,9 +335,8 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_, // modified until CURLOPT_POSTFIELDS is cleared } // Set additional HTTP headers - for (std::vector::iterator it = request.extra_headers.begin(); - it != request.extra_headers.end(); ++it) { - http_header = curl_slist_append(http_header, it->c_str()); + for (const std::string &extra_header : request.extra_headers) { + http_header = curl_slist_append(http_header, extra_header.c_str()); } curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_header); @@ -647,8 +647,6 @@ protected: void *run() { - DSTACK(FUNCTION_NAME); - CurlHandlePool pool; m_multi = curl_multi_init(); @@ -712,8 +710,8 @@ protected: } // Call curl_multi_remove_handle and cleanup easy handles - for (size_t i = 0; i < m_all_ongoing.size(); ++i) { - delete m_all_ongoing[i]; + for (HTTPFetchOngoing *i : m_all_ongoing) { + delete i; } m_all_ongoing.clear();