# HG changeset patch # User Sebastien Jodogne # Date 1466761343 -7200 # Node ID 21a8ca9ad928b85da077bd59d34a96e0a741aef2 # Parent 0f35383dd6cc2c521fff69b6c4d78b0e921e3eef HttpClient::SetConvertHeadersToLowerCase diff -r 0f35383dd6cc -r 21a8ca9ad928 Core/HttpClient.cpp --- a/Core/HttpClient.cpp Thu Jun 23 17:32:01 2016 +0200 +++ b/Core/HttpClient.cpp Fri Jun 24 11:42:23 2016 +0200 @@ -233,9 +233,17 @@ } + struct CurlHeaderParameters + { + bool lowerCase_; + HttpClient::HttpHeaders* headers_; + }; + + static size_t CurlHeaderCallback(void *buffer, size_t size, size_t nmemb, void *payload) { - HttpClient::HttpHeaders& headers = *(static_cast(payload)); + CurlHeaderParameters& parameters = *(static_cast(payload)); + assert(parameters.headers_ != NULL); size_t length = size * nmemb; if (length == 0) @@ -250,14 +258,19 @@ if (colon != std::string::npos && eol != std::string::npos) { - std::string tmp; - Toolbox::ToLowerCase(tmp, s.substr(0, colon)); + std::string tmp(s.substr(0, colon)); + + if (parameters.lowerCase_) + { + Toolbox::ToLowerCase(tmp); + } + std::string key = Toolbox::StripSpaces(tmp); if (!key.empty()) { std::string value = Toolbox::StripSpaces(s.substr(colon + 1, eol)); - headers[key] = value; + (*parameters.headers_) [key] = value; } } @@ -304,7 +317,8 @@ HttpClient::HttpClient() : pimpl_(new PImpl), verifyPeers_(true), - pkcs11Enabled_(false) + pkcs11Enabled_(false), + headersToLowerCase_(true) { Setup(); } @@ -393,6 +407,8 @@ answerBody.clear(); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_URL, url_.c_str())); + CurlHeaderParameters headerParameters; + if (answerHeaders == NULL) { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERFUNCTION, NULL)); @@ -400,8 +416,10 @@ } else { + headerParameters.lowerCase_ = headersToLowerCase_; + headerParameters.headers_ = answerHeaders; CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERFUNCTION, &CurlHeaderCallback)); - CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERDATA, answerHeaders)); + CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERDATA, &headerParameters)); } #if ORTHANC_SSL_ENABLED == 1 diff -r 0f35383dd6cc -r 21a8ca9ad928 Core/HttpClient.h --- a/Core/HttpClient.h Thu Jun 23 17:32:01 2016 +0200 +++ b/Core/HttpClient.h Fri Jun 24 11:42:23 2016 +0200 @@ -66,6 +66,7 @@ std::string clientCertificateKeyFile_; std::string clientCertificateKeyPassword_; bool pkcs11Enabled_; + bool headersToLowerCase_; void Setup(); @@ -232,6 +233,16 @@ return clientCertificateKeyPassword_; } + void SetConvertHeadersToLowerCase(bool lowerCase) + { + headersToLowerCase_ = lowerCase; + } + + bool IsConvertHeadersToLowerCase() const + { + return headersToLowerCase_; + } + static void GlobalInitialize(); static void GlobalFinalize(); diff -r 0f35383dd6cc -r 21a8ca9ad928 Plugins/Engine/OrthancPlugins.cpp --- a/Plugins/Engine/OrthancPlugins.cpp Thu Jun 23 17:32:01 2016 +0200 +++ b/Plugins/Engine/OrthancPlugins.cpp Fri Jun 24 11:42:23 2016 +0200 @@ -1781,6 +1781,7 @@ HttpClient client; client.SetUrl(p.url); + client.SetConvertHeadersToLowerCase(false); if (p.timeout != 0) {