comparison Core/HttpClient.cpp @ 2045:21a8ca9ad928

HttpClient::SetConvertHeadersToLowerCase
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 24 Jun 2016 11:42:23 +0200
parents 0f35383dd6cc
children b89da14b3e8d
comparison
equal deleted inserted replaced
2044:0f35383dd6cc 2045:21a8ca9ad928
231 return length; 231 return length;
232 } 232 }
233 } 233 }
234 234
235 235
236 struct CurlHeaderParameters
237 {
238 bool lowerCase_;
239 HttpClient::HttpHeaders* headers_;
240 };
241
242
236 static size_t CurlHeaderCallback(void *buffer, size_t size, size_t nmemb, void *payload) 243 static size_t CurlHeaderCallback(void *buffer, size_t size, size_t nmemb, void *payload)
237 { 244 {
238 HttpClient::HttpHeaders& headers = *(static_cast<HttpClient::HttpHeaders*>(payload)); 245 CurlHeaderParameters& parameters = *(static_cast<CurlHeaderParameters*>(payload));
246 assert(parameters.headers_ != NULL);
239 247
240 size_t length = size * nmemb; 248 size_t length = size * nmemb;
241 if (length == 0) 249 if (length == 0)
242 { 250 {
243 return 0; 251 return 0;
248 std::size_t colon = s.find(':'); 256 std::size_t colon = s.find(':');
249 std::size_t eol = s.find("\r\n"); 257 std::size_t eol = s.find("\r\n");
250 if (colon != std::string::npos && 258 if (colon != std::string::npos &&
251 eol != std::string::npos) 259 eol != std::string::npos)
252 { 260 {
253 std::string tmp; 261 std::string tmp(s.substr(0, colon));
254 Toolbox::ToLowerCase(tmp, s.substr(0, colon)); 262
263 if (parameters.lowerCase_)
264 {
265 Toolbox::ToLowerCase(tmp);
266 }
267
255 std::string key = Toolbox::StripSpaces(tmp); 268 std::string key = Toolbox::StripSpaces(tmp);
256 269
257 if (!key.empty()) 270 if (!key.empty())
258 { 271 {
259 std::string value = Toolbox::StripSpaces(s.substr(colon + 1, eol)); 272 std::string value = Toolbox::StripSpaces(s.substr(colon + 1, eol));
260 headers[key] = value; 273 (*parameters.headers_) [key] = value;
261 } 274 }
262 } 275 }
263 276
264 return length; 277 return length;
265 } 278 }
302 315
303 316
304 HttpClient::HttpClient() : 317 HttpClient::HttpClient() :
305 pimpl_(new PImpl), 318 pimpl_(new PImpl),
306 verifyPeers_(true), 319 verifyPeers_(true),
307 pkcs11Enabled_(false) 320 pkcs11Enabled_(false),
321 headersToLowerCase_(true)
308 { 322 {
309 Setup(); 323 Setup();
310 } 324 }
311 325
312 326
391 HttpHeaders* answerHeaders) 405 HttpHeaders* answerHeaders)
392 { 406 {
393 answerBody.clear(); 407 answerBody.clear();
394 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_URL, url_.c_str())); 408 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_URL, url_.c_str()));
395 409
410 CurlHeaderParameters headerParameters;
411
396 if (answerHeaders == NULL) 412 if (answerHeaders == NULL)
397 { 413 {
398 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERFUNCTION, NULL)); 414 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERFUNCTION, NULL));
399 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERDATA, NULL)); 415 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERDATA, NULL));
400 } 416 }
401 else 417 else
402 { 418 {
419 headerParameters.lowerCase_ = headersToLowerCase_;
420 headerParameters.headers_ = answerHeaders;
403 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERFUNCTION, &CurlHeaderCallback)); 421 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERFUNCTION, &CurlHeaderCallback));
404 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERDATA, answerHeaders)); 422 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADERDATA, &headerParameters));
405 } 423 }
406 424
407 #if ORTHANC_SSL_ENABLED == 1 425 #if ORTHANC_SSL_ENABLED == 1
408 // Setup HTTPS-related options 426 // Setup HTTPS-related options
409 427