summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_http.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-09-16 01:39:04 +0200
committerRobin Gareus <robin@gareus.org>2016-09-16 01:39:04 +0200
commit0996656eccceccccc4eea7ec74bfe60559ee2fff (patch)
tree12a3e4901e1202b5de3f8b149796b8384739fa3c /gtk2_ardour/ardour_http.cc
parent4042c234b141fca03c44a315228b3715f114141d (diff)
Allow to query HTTP headers
Diffstat (limited to 'gtk2_ardour/ardour_http.cc')
-rw-r--r--gtk2_ardour/ardour_http.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/gtk2_ardour/ardour_http.cc b/gtk2_ardour/ardour_http.cc
index 3ffea61b33..ba028d6f00 100644
--- a/gtk2_ardour/ardour_http.cc
+++ b/gtk2_ardour/ardour_http.cc
@@ -105,6 +105,22 @@ WriteMemoryCallback (void *ptr, size_t size, size_t nmemb, void *data) {
return realsize;
}
+static size_t headerCallback (char* ptr, size_t size, size_t nmemb, void* data)
+{
+ size_t realsize = size * nmemb;
+ struct HttpGet::HeaderInfo *nfo = (struct HttpGet::HeaderInfo*)data;
+ std::string header (static_cast<const char*>(ptr), realsize);
+ std::string::size_type index = header.find (':', 0);
+ if (index != std::string::npos) {
+ std::string k = header.substr (0, index);
+ std::string v = header.substr (index + 2);
+ k.erase(k.find_last_not_of (" \n\r\t")+1);
+ v.erase(v.find_last_not_of (" \n\r\t")+1);
+ nfo->h[k] = v;
+ }
+
+ return realsize;
+}
HttpGet::HttpGet (bool p, bool ssl)
: persist (p)
@@ -116,6 +132,8 @@ HttpGet::HttpGet (bool p, bool ssl)
curl_easy_setopt (_curl, CURLOPT_WRITEDATA, (void *)&mem);
curl_easy_setopt (_curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
+ curl_easy_setopt (_curl, CURLOPT_HEADERDATA, (void *)&nfo);
+ curl_easy_setopt (_curl, CURLOPT_HEADERFUNCTION, headerCallback);
curl_easy_setopt (_curl, CURLOPT_USERAGENT, PROGRAM_NAME VERSIONSTRING);
curl_easy_setopt (_curl, CURLOPT_TIMEOUT, ARDOUR_CURL_TIMEOUT);
curl_easy_setopt (_curl, CURLOPT_NOSIGNAL, 1);