# HG changeset patch # User Sebastien Jodogne # Date 1558605986 -7200 # Node ID 0528a6c36f3d12f4890a9a09f3a4d7db7021de4e # Parent 974e12006b7ddbf1e1f2b656ccd30bebab0686a7 HTTP header "Accept-Encoding" is honored for streams without built-in support for compression diff -r 974e12006b7d -r 0528a6c36f3d Core/HttpServer/HttpOutput.cpp --- a/Core/HttpServer/HttpOutput.cpp Fri May 17 08:42:24 2019 +0200 +++ b/Core/HttpServer/HttpOutput.cpp Thu May 23 12:06:26 2019 +0200 @@ -34,11 +34,12 @@ #include "../PrecompiledHeaders.h" #include "HttpOutput.h" +#include "../ChunkedBuffer.h" +#include "../Compression/GzipCompressor.h" +#include "../Compression/ZlibCompressor.h" #include "../Logging.h" #include "../OrthancException.h" #include "../Toolbox.h" -#include "../Compression/GzipCompressor.h" -#include "../Compression/ZlibCompressor.h" #include #include @@ -599,6 +600,34 @@ } + static void AnswerStreamAsBuffer(HttpOutput& output, + IHttpStreamAnswer& stream) + { + ChunkedBuffer buffer; + + while (stream.ReadNextChunk()) + { + if (stream.GetChunkSize() > 0) + { + buffer.AddChunk(stream.GetChunkContent(), stream.GetChunkSize()); + } + } + + std::string s; + buffer.Flatten(s); + + output.SetContentType(stream.GetContentType()); + + std::string filename; + if (stream.HasContentFilename(filename)) + { + output.SetContentFilename(filename.c_str()); + } + + output.Answer(s); + } + + void HttpOutput::Answer(IHttpStreamAnswer& stream) { HttpCompression compression = stream.SetupHttpCompression(isGzipAllowed_, isDeflateAllowed_); @@ -606,7 +635,18 @@ switch (compression) { case HttpCompression_None: + { + if (isGzipAllowed_ || isDeflateAllowed_) + { + // New in Orthanc 1.5.7: Compress streams without built-in + // compression, if requested by the "Accept-Encoding" HTTP + // header + AnswerStreamAsBuffer(*this, stream); + return; + } + break; + } case HttpCompression_Gzip: stateMachine_.AddHeader("Content-Encoding", "gzip"); diff -r 974e12006b7d -r 0528a6c36f3d NEWS --- a/NEWS Fri May 17 08:42:24 2019 +0200 +++ b/NEWS Thu May 23 12:06:26 2019 +0200 @@ -16,6 +16,7 @@ * Size of the Orthanc static binaries are reduced by compressing ICU data * Anonymization: Preserve hierarchical relationships in (0008,1115) [] (0020,000e) * Allow the serialization of signed 16bpp images in PAM format +* HTTP header "Accept-Encoding" is honored for streams without built-in support for compression * Fix issue #136 (C-FIND request fails when found DICOM file does not have certain tags) * Fix issue #137 (C-STORE fails for unknown SOP Class although server is configured to accept any) * Fix issue #138 (POST to modalities/{name} accepts invalid characters)