Mercurial > hg > orthanc-dicomweb
changeset 634:d78c4b632ed3
Fix parsing of Accept header 'multipart/related; type=application/octet-stream; transfer-syntax=*' that is used by OHIF
author | Alain Mazy <am@osimis.io> |
---|---|
date | Tue, 14 Nov 2023 11:35:14 +0100 |
parents | a3bc8844a744 |
children | b892d390e6b4 |
files | NEWS Plugin/WadoRsRetrieveFrames.cpp |
diffstat | 2 files changed, 14 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Mon Nov 13 20:39:52 2023 +0100 +++ b/NEWS Tue Nov 14 11:35:14 2023 +0100 @@ -3,6 +3,8 @@ * Removed misleading log messages about transcoding. https://discourse.orthanc-server.org/t/dicomweb-plugin-1-13-possible-unnecessary-transcoding/3979 +* Fix parsing of Accept header "multipart/related; type=application/octet-stream; transfer-syntax=*" that is used by OHIF. + Version 1.15 (2023-08-24) =========================
--- a/Plugin/WadoRsRetrieveFrames.cpp Mon Nov 13 20:39:52 2023 +0100 +++ b/Plugin/WadoRsRetrieveFrames.cpp Tue Nov 14 11:35:14 2023 +0100 @@ -111,33 +111,24 @@ if (type == "application/octet-stream") { - if (transferSyntax.empty() || - transferSyntax == "1.2.840.10008.1.2.1") + if (transferSyntax.empty()) { syntax = Orthanc::DicomTransferSyntax_LittleEndianExplicit; return true; } - else if (transferSyntax == "1.2.840.10008.1.2") - { - syntax = Orthanc::DicomTransferSyntax_LittleEndianImplicit; - return true; - } - else if (transferSyntax == "1.2.840.10008.1.2.2") // New in 1.3 - { - syntax = Orthanc::DicomTransferSyntax_BigEndianExplicit; - return false; - } else if (transferSyntax == "*") { - // New in DICOMweb plugin 1.1 - return false; + // don't change transferSyntax, it must have been set to the 'current' value before calling this method + return true; } else { - throw Orthanc::OrthancException( - Orthanc::ErrorCode_BadRequest, - "DICOMweb RetrieveFrames: Cannot specify a transfer syntax (" + - transferSyntax + ") for default Little Endian uncompressed pixel data"); + if (!Orthanc::LookupTransferSyntax(syntax, transferSyntax)) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, + "Unknown transfer syntax in 'Accept' header: " + transferSyntax); + } + return true; } } else @@ -287,7 +278,7 @@ } } - // By default, DICOMweb expectes Little Endian uncompressed pixel data + // By default, DICOMweb expects Little Endian uncompressed pixel data syntax = Orthanc::DicomTransferSyntax_LittleEndianExplicit; return true; } @@ -455,7 +446,6 @@ OrthancPlugins::LogInfo(s); } - Orthanc::DicomTransferSyntax targetSyntax; Orthanc::DicomTransferSyntax currentSyntax; std::unique_ptr<OrthancPlugins::DicomInstance> instance(new OrthancPlugins::DicomInstance(content.GetData(), content.GetSize())); @@ -465,6 +455,8 @@ "Unknown transfer syntax: " + std::string(GetTransferSyntaxUid(currentSyntax))); } + Orthanc::DicomTransferSyntax targetSyntax = currentSyntax; + if (ParseTransferSyntax(targetSyntax, request) && targetSyntax != currentSyntax) { OrthancPlugins::LogInfo("DICOMweb RetrieveFrames: Transcoding instance " + orthancId +