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 +