prepare windows pingback
[ardour.git] / gtk2_ardour / pingback.cc
index 11429c120521d9359e4771d6d4e258a5418dfa19..10a48232d0ad17af214af543ff14b2babd6021e5 100644 (file)
 #include <fstream>
 #include <cstring>
 
+#ifndef PLATFORM_WINDOWS
 #include <sys/utsname.h>
+#endif
+
 #include <curl/curl.h>
 
 #include <glibmm/miscutils.h>
 
 #include "pbd/compose.h"
 #include "pbd/pthread_utils.h"
+
 #include "ardour/filesystem_paths.h"
+#include "ardour/rc_configuration.h"
 
 #include "pingback.h"
 
 using std::string;
+using namespace ARDOUR;
 
+#ifndef PLATFORM_WINDOWS // no pingback for windows, so far
 static size_t
 curl_write_data (char *bufptr, size_t size, size_t nitems, void *ptr)
 {
@@ -55,6 +62,7 @@ curl_write_data (char *bufptr, size_t size, size_t nitems, void *ptr)
 
         return size * nitems;
 }
+#endif
 
 struct ping_call {
     std::string version;
@@ -69,13 +77,7 @@ _pingback (void *arg)
 {
        ping_call* cm = static_cast<ping_call*> (arg);
        CURL* c;
-       struct utsname utb;
        string return_str;
-
-       if (uname (&utb)) {
-               return 0;
-       }
-
        //initialize curl
 
        curl_global_init (CURL_GLOBAL_NOTHING);
@@ -85,27 +87,35 @@ _pingback (void *arg)
        curl_easy_setopt (c, CURLOPT_WRITEDATA, &return_str); 
        char errbuf[CURL_ERROR_SIZE];
        curl_easy_setopt (c, CURLOPT_ERRORBUFFER, errbuf); 
-       /* we really would prefer to be able to authenticate the certificate
-          but this has issues that right now (march 2013), i don't understand.
-       */
-       curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0);
-
-       //get announcements from our server
-       std::cerr << "Checking for Announcements from ardour.org  ...\n";
 
        string url;
 
 #ifdef __APPLE__
-       url = "https://community.ardour.org/pingback/osx/";
+       url = Config->get_osx_pingback_url ();
+#elif defined PLATFORM_WINDOWS
+       url = Config->get_windows_pingback_url ();
 #else
-       url = "https://community.ardour.org/pingback/linux/";
+       url = Config->get_linux_pingback_url ();
 #endif
 
+       if (url.compare (0, 4, "http") != 0) {
+               delete cm;
+               return 0;
+       }
+
        char* v = curl_easy_escape (c, cm->version.c_str(), cm->version.length());
        url += v;
        url += '?';
        free (v);
 
+#ifndef PLATFORM_WINDOWS
+       struct utsname utb;
+
+       if (uname (&utb)) {
+               delete cm;
+               return 0;
+       }
+
        string uts = string_compose ("%1 %2 %3 %4", utb.sysname, utb.release, utb.version, utb.machine);
        string s;
        char* query;
@@ -126,15 +136,21 @@ _pingback (void *arg)
        s = string_compose ("m=%1", query);
        url += s;
        free (query);
-
-       std::cerr << "ping using " << url << std::endl;
+#else
+       // this is hilarious: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724429%28v=vs.85%29.aspx
+# if ( defined(__x86_64__) || defined(_M_X64) )
+       url += "a=64";
+# else
+       url += "a=32";
+# endif
+#endif /* PLATFORM_WINDOWS */
 
        curl_easy_setopt (c, CURLOPT_URL, url.c_str());
 
        return_str = "";
 
        if (curl_easy_perform (c) == 0) {
-               int http_status; 
+               long http_status; 
 
                curl_easy_getinfo (c, CURLINFO_RESPONSE_CODE, &http_status);
 
@@ -163,7 +179,6 @@ _pingback (void *arg)
 
        curl_easy_cleanup (c);
        delete cm;
-
        return 0;
 }