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)
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);
#include <curl/curl.h>
#include <string>
+#include <map>
namespace ArdourCurl {
size_t size;
};
+ struct HeaderInfo {
+ std::map<std::string, std::string> h;
+ };
+
char* get (const char* url);
std::string get (const std::string& url) {
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);
}
char error_buffer[CURL_ERROR_SIZE];
struct MemStruct mem;
+ struct HeaderInfo nfo;
static const char* ca_path;
static const char* ca_info;