26 #ifndef PLATFORM_WINDOWS
27 #include <sys/utsname.h>
30 #include <curl/curl.h>
32 #include <glibmm/miscutils.h>
45 #ifndef PLATFORM_WINDOWS // no pingback for windows, so far
51 string* sptr = (
string*) ptr;
53 for (
size_t i = 0; i < nitems; ++i) {
54 for (
size_t n = 0; n < size; ++n) {
55 if (*bufptr ==
'\n') {
71 ping_call (
const std::string& v,
const std::string& a)
72 : version (v), announce_path (a) {}
78 #ifndef PLATFORM_WINDOWS
90 curl_global_init (CURL_GLOBAL_NOTHING);
91 c = curl_easy_init ();
94 curl_easy_setopt (c, CURLOPT_WRITEDATA, &return_str);
95 char errbuf[CURL_ERROR_SIZE];
96 curl_easy_setopt (c, CURLOPT_ERRORBUFFER, errbuf);
101 url =
Config->get_osx_pingback_url ();
103 url =
Config->get_linux_pingback_url ();
106 char* v = curl_easy_escape (c, cm->
version.c_str(), cm->
version.length());
111 string uts =
string_compose (
"%1 %2 %3 %4", utb.sysname, utb.release, utb.version, utb.machine);
115 query = curl_easy_escape (c, utb.sysname, strlen (utb.sysname));
121 query = curl_easy_escape (c, utb.release, strlen (utb.release));
127 query = curl_easy_escape (c, utb.machine, strlen (utb.machine));
132 curl_easy_setopt (c, CURLOPT_URL, url.c_str());
136 if (curl_easy_perform (c) == 0) {
139 curl_easy_getinfo (c, CURLINFO_RESPONSE_CODE, &http_status);
141 if (http_status != 200) {
142 std::cerr <<
"Bad HTTP status" << std::endl;
146 if ( return_str.length() > 140 ) {
147 std::cerr <<
"Announcement string is too long (probably behind a proxy)." << std::endl;
149 std::cerr <<
"Announcement is: " << return_str << std::endl;
157 annc_file << return_str;
161 std::cerr <<
"curl failed: " << errbuf << std::endl;
164 curl_easy_cleanup (c);
174 void pingback (
const string& version,
const string& announce_path)
std::string announce_path
ping_call(const std::string &v, const std::string &a)
static void * _pingback(void *arg)
LIBARDOUR_API RCConfiguration * Config
static size_t curl_write_data(char *bufptr, size_t size, size_t nitems, void *ptr)
LIBPBD_API int pthread_create_and_store(std::string name, pthread_t *thread, void *(*start_routine)(void *), void *arg)
std::string string_compose(const std::string &fmt, const T1 &o1)
void pingback(const string &version, const string &announce_path)