Mercurial > hg > orthanc
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 |