Mercurial > hg > orthanc
diff Core/RestApi/RestApiOutput.cpp @ 1514:d73a2178b319
support of deflate and gzip content-types
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 10 Aug 2015 16:43:59 +0200 |
parents | 7962563129c9 |
children | c94353fbd4e9 |
line wrap: on
line diff
--- a/Core/RestApi/RestApiOutput.cpp Mon Aug 10 16:01:37 2015 +0200 +++ b/Core/RestApi/RestApiOutput.cpp Mon Aug 10 16:43:59 2015 +0200 @@ -45,7 +45,8 @@ HttpMethod method) : output_(output), method_(method), - compression_(HttpCompression_None), + allowDeflateCompression_(false), + allowGzipCompression_(false), convertJsonToXml_(false) { alreadySent_ = false; @@ -78,6 +79,24 @@ } } + + HttpCompression RestApiOutput::GetPreferredCompression() const + { + if (allowGzipCompression_) + { + return HttpCompression_Gzip; + } + else if (allowDeflateCompression_) + { + return HttpCompression_Deflate; + } + else + { + return HttpCompression_None; + } + } + + void RestApiOutput::AnswerFile(HttpFileSender& sender) { CheckStatus(); @@ -95,7 +114,7 @@ std::string s; Toolbox::JsonToXml(s, value); output_.SetContentType("application/xml"); - output_.SendBody(s, compression_); + output_.SendBody(s, GetPreferredCompression()); #else LOG(ERROR) << "Orthanc was compiled without XML support"; throw OrthancException(ErrorCode_InternalError); @@ -105,7 +124,7 @@ { Json::StyledWriter writer; output_.SetContentType("application/json"); - output_.SendBody(writer.write(value), compression_); + output_.SendBody(writer.write(value), GetPreferredCompression()); } alreadySent_ = true; @@ -114,10 +133,8 @@ void RestApiOutput::AnswerBuffer(const std::string& buffer, const std::string& contentType) { - CheckStatus(); - output_.SetContentType(contentType.c_str()); - output_.SendBody(buffer, compression_); - alreadySent_ = true; + AnswerBuffer(buffer.size() == 0 ? NULL : buffer.c_str(), + buffer.size(), contentType); } void RestApiOutput::AnswerBuffer(const void* buffer, @@ -126,7 +143,7 @@ { CheckStatus(); output_.SetContentType(contentType.c_str()); - output_.SendBody(buffer, length, compression_); + output_.SendBody(buffer, length, GetPreferredCompression()); alreadySent_ = true; }