From 0996656eccceccccc4eea7ec74bfe60559ee2fff Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 16 Sep 2016 01:39:04 +0200 Subject: [PATCH] Allow to query HTTP headers --- gtk2_ardour/ardour_http.cc | 18 ++++++++++++++++++ gtk2_ardour/ardour_http.h | 8 ++++++++ 2 files changed, 26 insertions(+) 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(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 #include +#include namespace ArdourCurl { @@ -35,6 +36,10 @@ class HttpGet { size_t size; }; + struct HeaderInfo { + std::map 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 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;