summaryrefslogtreecommitdiff
path: root/gtk2_ardour/utils_videotl.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-06-14 13:51:08 +0200
committerRobin Gareus <robin@gareus.org>2013-06-14 13:58:56 +0200
commit006e3575be4b70d3fc920df009f3cae0a05c19f2 (patch)
treecb6a5072b6762c5875ea888537abdd2d4b47e04f /gtk2_ardour/utils_videotl.cc
parent748de7e794dbff2bf76510c5311bfefd71469007 (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.cc68
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" */