Mercurial > hg > orthanc
comparison OrthancFramework/Sources/HttpClient.cpp @ 4650:9804d6490872
Reduced memory consumption of HTTP/REST plugins calls on POST/PUT if chunked transfer is disabled
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 04 May 2021 10:57:42 +0200 |
parents | 017ab543e6ef |
children | e8967149d87a |
comparison
equal
deleted
inserted
replaced
4649:e915102093de | 4650:9804d6490872 |
---|---|
620 lastStatus_ = HttpStatus_None; | 620 lastStatus_ = HttpStatus_None; |
621 SetVerbose(GlobalParameters::GetInstance().IsDefaultVerbose()); | 621 SetVerbose(GlobalParameters::GetInstance().IsDefaultVerbose()); |
622 timeout_ = GlobalParameters::GetInstance().GetDefaultTimeout(); | 622 timeout_ = GlobalParameters::GetInstance().GetDefaultTimeout(); |
623 GlobalParameters::GetInstance().GetDefaultProxy(proxy_); | 623 GlobalParameters::GetInstance().GetDefaultProxy(proxy_); |
624 GlobalParameters::GetInstance().GetSslConfiguration(verifyPeers_, caCertificates_); | 624 GlobalParameters::GetInstance().GetSslConfiguration(verifyPeers_, caCertificates_); |
625 | |
626 hasExternalBody_ = false; | |
627 externalBodyData_ = NULL; | |
628 externalBodySize_ = 0; | |
625 } | 629 } |
626 | 630 |
627 | 631 |
628 HttpClient::HttpClient() : | 632 HttpClient::HttpClient() : |
629 pimpl_(new PImpl), | 633 pimpl_(new PImpl), |
716 { | 720 { |
717 return timeout_; | 721 return timeout_; |
718 } | 722 } |
719 | 723 |
720 | 724 |
721 void HttpClient::SetBody(const std::string& data) | 725 void HttpClient::AssignBody(const std::string& data) |
722 { | 726 { |
723 body_ = data; | 727 body_ = data; |
724 pimpl_->requestBody_.Clear(); | 728 pimpl_->requestBody_.Clear(); |
725 } | 729 hasExternalBody_ = false; |
726 | 730 } |
727 std::string &HttpClient::GetBody() | 731 |
728 { | 732 |
729 return body_; | 733 void HttpClient::AssignBody(const void* data, |
730 } | 734 size_t size) |
731 | 735 { |
732 const std::string &HttpClient::GetBody() const | 736 if (size != 0 && |
733 { | 737 data == NULL) |
734 return body_; | 738 { |
739 throw OrthancException(ErrorCode_NullPointer); | |
740 } | |
741 else | |
742 { | |
743 body_.assign(reinterpret_cast<const char*>(data), size); | |
744 pimpl_->requestBody_.Clear(); | |
745 hasExternalBody_ = false; | |
746 } | |
735 } | 747 } |
736 | 748 |
737 | 749 |
738 void HttpClient::SetBody(IRequestBody& body) | 750 void HttpClient::SetBody(IRequestBody& body) |
739 { | 751 { |
740 body_.clear(); | 752 body_.clear(); |
741 pimpl_->requestBody_.SetBody(body); | 753 pimpl_->requestBody_.SetBody(body); |
754 hasExternalBody_ = false; | |
742 } | 755 } |
743 | 756 |
744 | 757 |
758 void HttpClient::SetExternalBody(const void* data, | |
759 size_t size) | |
760 { | |
761 if (size != 0 && | |
762 data == NULL) | |
763 { | |
764 throw OrthancException(ErrorCode_NullPointer); | |
765 } | |
766 else | |
767 { | |
768 body_.clear(); | |
769 pimpl_->requestBody_.Clear(); | |
770 hasExternalBody_ = true; | |
771 externalBodyData_ = data; | |
772 externalBodySize_ = size; | |
773 } | |
774 } | |
775 | |
776 | |
745 void HttpClient::ClearBody() | 777 void HttpClient::ClearBody() |
746 { | 778 { |
747 body_.clear(); | 779 body_.clear(); |
748 pimpl_->requestBody_.Clear(); | 780 pimpl_->requestBody_.Clear(); |
781 hasExternalBody_ = false; | |
749 } | 782 } |
750 | 783 |
751 | 784 |
752 void HttpClient::SetVerbose(bool isVerbose) | 785 void HttpClient::SetVerbose(bool isVerbose) |
753 { | 786 { |
974 if (pimpl_->userHeaders_.IsEmpty()) | 1007 if (pimpl_->userHeaders_.IsEmpty()) |
975 { | 1008 { |
976 pimpl_->defaultPostHeaders_.Assign(pimpl_->curl_); | 1009 pimpl_->defaultPostHeaders_.Assign(pimpl_->curl_); |
977 } | 1010 } |
978 | 1011 |
979 if (body_.size() > 0) | 1012 if (hasExternalBody_) |
1013 { | |
1014 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, externalBodyData_)); | |
1015 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, externalBodySize_)); | |
1016 } | |
1017 else if (body_.size() > 0) | |
980 { | 1018 { |
981 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, body_.c_str())); | 1019 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, body_.c_str())); |
982 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, body_.size())); | 1020 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, body_.size())); |
983 } | 1021 } |
984 else | 1022 else |