Use httpfetch_async in serverlist announce code
authorKahrl <kahrl@gmx.net>
Thu, 29 Aug 2013 03:58:13 +0000 (05:58 +0200)
committerKahrl <kahrl@gmx.net>
Fri, 13 Dec 2013 17:05:39 +0000 (18:05 +0100)
src/httpfetch.cpp
src/httpfetch.h
src/serverlist.cpp

index 4342a8b2a9509d680502434ad8d5d932053af9a7..25474c725bee6721f99dc2240562842d7b068fdd 100644 (file)
@@ -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
index 56a198baf0014773e1ddf9f2596e0cceb46c29ac..6eb01fe79a04af083f73f4aace93121d14148866 100644 (file)
@@ -54,6 +54,9 @@ struct HTTPFetchRequest
        // If not empty, should contain entries such as "Accept: text/html"
        std::vector<std::string> extra_headers;
 
+       //useragent to use
+       std::string useragent;
+
        HTTPFetchRequest()
        {
                url = "";
index 7376bce9990c4ad7c54b89321ce63e011c512a46..204427f8870a46496d0fae2b94d81eee129f10f7 100644 (file)
@@ -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 <curl/curl.h>
-#endif
+#include "httpfetch.h"
+#include "util/string.h"
 
 namespace ServerList
 {
@@ -189,11 +188,6 @@ std::string serializeJson(std::vector<ServerListSpec> 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<std::string> & clients_names, double uptime, u32 game_time, std::string gameid, std::vector<ModSpec> mods) {
        Json::Value server;
        if (action.size())
@@ -235,24 +229,14 @@ void sendAnnounce(std::string action, const std::vector<std::string> & 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 "<<g_settings->get("serverlist_url")<<" error ("<<curl_easy_strerror(res)<<")"<<std::endl;
-               curl_easy_cleanup(curl);
-       }
-
+       HTTPFetchRequest fetchrequest;
+       fetchrequest.url = g_settings->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