changeset 643:a111b79189c2

WADO-RS retrieve frame: fix issue #219
author Alain Mazy <am@osimis.io>
date Wed, 24 Jan 2024 13:27:51 +0100
parents c85e05785f9f
children 1efd6296c589
files NEWS Plugin/WadoRsRetrieveFrames.cpp
diffstat 2 files changed, 30 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/NEWS	Tue Dec 19 12:07:22 2023 +0100
+++ b/NEWS	Wed Jan 24 13:27:51 2024 +0100
@@ -1,3 +1,13 @@
+Pending changes in the mainline
+===============================
+
+Maintenance
+-----------
+
+* WADO-RS retrieve frame: fix issue 219 (https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=219)
+  by converting BigEndianExplicitVR to LittleEndianExplicitVR.
+
+
 Version 1.16 (2023-12-19)
 =========================
 
--- a/Plugin/WadoRsRetrieveFrames.cpp	Tue Dec 19 12:07:22 2023 +0100
+++ b/Plugin/WadoRsRetrieveFrames.cpp	Wed Jan 24 13:27:51 2024 +0100
@@ -329,9 +329,18 @@
       // The "transfer-syntax" info was added in version 1.1 of the plugin
       return "application/octet-stream; transfer-syntax=1.2.840.10008.1.2";
 
+    // note: these 2 syntaxes are not supposed to be used in retrieve frames
+    // according to https://dicom.nema.org/MEDICAL/dicom/2019a/output/chtml/part18/chapter_6.html#table_6.1.1.8-3b
+    // "The Implicit VR Little Endian (1.2.840.10008.1.2), and Explicit VR Big Endian (1.2.840.10008.1.2.2) transfer syntaxes shall not be used with Web Services."
     case Orthanc::DicomTransferSyntax_LittleEndianExplicit:
       return "application/octet-stream; transfer-syntax=1.2.840.10008.1.2.1";
 
+    case Orthanc::DicomTransferSyntax_BigEndianExplicit:
+      return "application/octet-stream; transfer-syntax=1.2.840.10008.1.2.2";
+
+    case Orthanc::DicomTransferSyntax_DeflatedLittleEndianExplicit:
+      return "application/octet-stream; transfer-syntax=1.2.840.10008.1.2.1.99";
+
     case Orthanc::DicomTransferSyntax_JPEGProcess1:
       return "image/jpeg; transfer-syntax=1.2.840.10008.1.2.4.50";
 
@@ -369,7 +378,7 @@
       return "image/jpx; transfer-syntax=1.2.840.10008.1.2.4.93";
 
     default:
-      throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, std::string("WADO RS Retrieve frame: unhandled Transfer syntax ") + Orthanc::GetTransferSyntaxUid(syntax));
   }
 }
 
@@ -463,7 +472,16 @@
       throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, "Unknown transfer syntax: " + currentSyntaxString);
     }
 
-    Orthanc::DicomTransferSyntax targetSyntax = currentSyntax;  
+    Orthanc::DicomTransferSyntax targetSyntax = currentSyntax;
+
+    if (currentSyntax == Orthanc::DicomTransferSyntax_BigEndianExplicit || currentSyntax == Orthanc::DicomTransferSyntax_LittleEndianImplicit)
+    {
+      // note: these 2 syntaxes are not supposed to be used in retrieve frames
+      // according to https://dicom.nema.org/MEDICAL/dicom/2019a/output/chtml/part18/chapter_6.html#table_6.1.1.8-3b
+      // "The Implicit VR Little Endian (1.2.840.10008.1.2), and Explicit VR Big Endian (1.2.840.10008.1.2.2) transfer syntaxes shall not be used with Web Services."
+      targetSyntax = Orthanc::DicomTransferSyntax_LittleEndianExplicit;
+    }    
+
     bool transcodeThisInstance = false;
     
     if (ParseTransferSyntax(targetSyntax, request))