diff options
author | Robin Gareus <robin@gareus.org> | 2016-09-16 01:39:04 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-09-16 01:39:04 +0200 |
commit | 0996656eccceccccc4eea7ec74bfe60559ee2fff (patch) | |
tree | 12a3e4901e1202b5de3f8b149796b8384739fa3c | |
parent | 4042c234b141fca03c44a315228b3715f114141d (diff) |
Allow to query HTTP headers
-rw-r--r-- | gtk2_ardour/ardour_http.cc | 18 | ||||
-rw-r--r-- | gtk2_ardour/ardour_http.h | 8 |
2 files changed, 26 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); diff --git a/gtk2_ardour/ardour_http.h b/gtk2_ardour/ardour_http.h index 06cf46f408..aa6b9f3936 100644 --- a/gtk2_ardour/ardour_http.h +++ b/gtk2_ardour/ardour_http.h @@ -21,6 +21,7 @@ #include <curl/curl.h> #include <string> +#include <map> namespace ArdourCurl { @@ -35,6 +36,10 @@ class HttpGet { size_t size; }; + struct HeaderInfo { + std::map<std::string, std::string> h; + }; + char* get (const char* url); std::string get (const std::string& url) { @@ -47,6 +52,8 @@ class HttpGet { long int status () const { return _status; } + std::map<std::string, std::string> header () const { return nfo.h; } + char* escape (const char* s, int l) const { return curl_easy_escape (_curl, s, l); } @@ -76,6 +83,7 @@ class HttpGet { char error_buffer[CURL_ERROR_SIZE]; struct MemStruct mem; + struct HeaderInfo nfo; static const char* ca_path; static const char* ca_info; |