diff options
author | Robin Gareus <robin@gareus.org> | 2013-06-14 13:51:08 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2013-06-14 13:58:56 +0200 |
commit | 006e3575be4b70d3fc920df009f3cae0a05c19f2 (patch) | |
tree | cb6a5072b6762c5875ea888537abdd2d4b47e04f /gtk2_ardour/utils_videotl.cc | |
parent | 748de7e794dbff2bf76510c5311bfefd71469007 (diff) |
NOOP clean up code
move curl-http-get wrapper-function which is used by various
videotimeline related code to util.c
Diffstat (limited to 'gtk2_ardour/utils_videotl.cc')
-rw-r--r-- | gtk2_ardour/utils_videotl.cc | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/gtk2_ardour/utils_videotl.cc b/gtk2_ardour/utils_videotl.cc index b90abf7fb8..504fc3d2eb 100644 --- a/gtk2_ardour/utils_videotl.cc +++ b/gtk2_ardour/utils_videotl.cc @@ -314,3 +314,71 @@ video_draw_cross (Glib::RefPtr<Gdk::Pixbuf> img) if (n_channels>3) p[3] = 255; } } + + +extern "C" { +#include <curl/curl.h> + + struct MemoryStruct { + char *data; + size_t size; + }; + + static size_t + WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) { + size_t realsize = size * nmemb; + struct MemoryStruct *mem = (struct MemoryStruct *)data; + + mem->data = (char *)realloc(mem->data, mem->size + realsize + 1); + if (mem->data) { + memcpy(&(mem->data[mem->size]), ptr, realsize); + mem->size += realsize; + mem->data[mem->size] = 0; + } + return realsize; + } + + char *curl_http_get (const char *u, int *status) { + CURL *curl; + CURLcode res; + struct MemoryStruct chunk; + long int httpstatus; + if (status) *status = 0; + //usleep(500000); return NULL; // TEST & DEBUG + if (strncmp("http://", u, 7)) return NULL; + + chunk.data=NULL; + chunk.size=0; + + curl = curl_easy_init(); + if(!curl) return NULL; + curl_easy_setopt(curl, CURLOPT_URL, u); + + curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); + curl_easy_setopt(curl, CURLOPT_USERAGENT, ARDOUR_USER_AGENT); + curl_easy_setopt(curl, CURLOPT_TIMEOUT, ARDOUR_CURL_TIMEOUT); + curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); +#ifdef CURLERRORDEBUG + char curlerror[CURL_ERROR_SIZE] = ""; + curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curlerror); +#endif + + res = curl_easy_perform(curl); + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &httpstatus); + curl_easy_cleanup(curl); + if (status) *status = httpstatus; + if (res) { +#ifdef CURLERRORDEBUG + printf("curl_http_get() failed: %s\n", curlerror); +#endif + return NULL; + } + if (httpstatus != 200) { + free (chunk.data); + chunk.data = NULL; + } + return (chunk.data); + } + +} /* end extern "C" */ |