diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 4342a8b2a..25474c725 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -206,6 +206,10 @@ struct HTTPFetchOngoing request.timeout); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, request.connect_timeout); + + if (request.useragent != "") + curl_easy_setopt(curl, CURLOPT_USERAGENT, request.useragent.c_str()); + // Set up a write callback that writes to the // ostringstream ongoing->oss, unless the data // is to be discarded diff --git a/src/httpfetch.h b/src/httpfetch.h index 56a198baf..6eb01fe79 100644 --- a/src/httpfetch.h +++ b/src/httpfetch.h @@ -54,6 +54,9 @@ struct HTTPFetchRequest // If not empty, should contain entries such as "Accept: text/html" std::vector extra_headers; + //useragent to use + std::string useragent; + HTTPFetchRequest() { url = ""; diff --git a/src/serverlist.cpp b/src/serverlist.cpp index 7376bce99..204427f88 100644 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -30,9 +30,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "json/json.h" #include "convert_json.h" -#if USE_CURL -#include -#endif +#include "httpfetch.h" +#include "util/string.h" namespace ServerList { @@ -189,11 +188,6 @@ std::string serializeJson(std::vector serverlist) #if USE_CURL -static size_t ServerAnnounceCallback(void *contents, size_t size, size_t nmemb, void *userp) -{ - //((std::string*)userp)->append((char*)contents, size * nmemb); - return size * nmemb; -} void sendAnnounce(std::string action, const std::vector & clients_names, double uptime, u32 game_time, std::string gameid, std::vector mods) { Json::Value server; if (action.size()) @@ -235,24 +229,14 @@ void sendAnnounce(std::string action, const std::vector & clients_n } Json::StyledWriter writer; - CURL *curl; - curl = curl_easy_init(); - if (curl) - { - CURLcode res; - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - curl_easy_setopt(curl, CURLOPT_URL, (g_settings->get("serverlist_url")+std::string("/announce?json=")+curl_easy_escape(curl, writer.write( server ).c_str(), 0)).c_str()); - curl_easy_setopt(curl, CURLOPT_USERAGENT, (std::string("Minetest ")+minetest_version_hash).c_str()); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ServerList::ServerAnnounceCallback); - //curl_easy_setopt(curl, CURLOPT_WRITEDATA, &liststring); - curl_easy_setopt(curl, CURLOPT_TIMEOUT, 1); - curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 1); - res = curl_easy_perform(curl); - if (res != CURLE_OK) - errorstream<<"Serverlist at url "<get("serverlist_url")<<" error ("<get("serverlist_url") + + std::string("/announce?json=") + + urlencode(writer.write(server)); + fetchrequest.useragent = std::string("Minetest ")+minetest_version_hash; + fetchrequest.caller = HTTPFETCH_DISCARD; + fetchrequest.timeout = g_settings->getS32("curl_timeout"); + httpfetch_async(fetchrequest); } #endif