diff OrthancFramework/Sources/DicomNetworking/Internals/CommandDispatcher.cpp @ 4473:68f52897c119

new URIs: /tools/accepted-transfer-syntaxes and /tools/unknown-sop-class-accepted to replace Lua callbacks for transfer syntaxes
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 26 Jan 2021 14:48:10 +0100
parents 9c070a34de18
children c1f36fd13730
line wrap: on
line diff
--- a/OrthancFramework/Sources/DicomNetworking/Internals/CommandDispatcher.cpp	Tue Jan 26 10:18:50 2021 +0100
+++ b/OrthancFramework/Sources/DicomNetworking/Internals/CommandDispatcher.cpp	Tue Jan 26 14:48:10 2021 +0100
@@ -76,14 +76,15 @@
 #  error The macro DCMTK_VERSION_NUMBER must be defined
 #endif
 
-#include "FindScp.h"
-#include "StoreScp.h"
-#include "MoveScp.h"
-#include "GetScp.h"
 #include "../../Compatibility.h"
-#include "../../Toolbox.h"
+#include "../../DicomParsing/FromDcmtkBridge.h"
 #include "../../Logging.h"
 #include "../../OrthancException.h"
+#include "../../Toolbox.h"
+#include "FindScp.h"
+#include "GetScp.h"
+#include "MoveScp.h"
+#include "StoreScp.h"
 
 #include <dcmtk/dcmdata/dcdeftag.h>     /* for storage commitment */
 #include <dcmtk/dcmdata/dcsequen.h>     /* for class DcmSequenceOfItems */
@@ -425,7 +426,7 @@
            * framework <= 1.8.2, where only the uncompressed transfer
            * syntaxes are accepted by default.
            **/
-          GetAllTransferSyntaxes(storageTransferSyntaxes);
+          GetAllDicomTransferSyntaxes(storageTransferSyntaxes);
         }
 
         if (storageTransferSyntaxes.empty())
@@ -446,7 +447,10 @@
            * class "DicomServer"?
            **/
           const DicomTransferSyntax PREFERRED_TRANSFER_SYNTAX = DicomTransferSyntax_LittleEndianExplicit;
-          
+
+          E_TransferSyntax dummy;
+          assert(FromDcmtkBridge::LookupDcmtkTransferSyntax(dummy, PREFERRED_TRANSFER_SYNTAX));
+
           std::vector<const char*> storageTransferSyntaxesC;
           storageTransferSyntaxesC.reserve(storageTransferSyntaxes.size());
 
@@ -456,11 +460,13 @@
           }
           
           for (std::set<DicomTransferSyntax>::const_iterator
-                 it = storageTransferSyntaxes.begin(); it != storageTransferSyntaxes.end(); ++it)
+                 syntax = storageTransferSyntaxes.begin(); syntax != storageTransferSyntaxes.end(); ++syntax)
           {
-            if (*it != PREFERRED_TRANSFER_SYNTAX)  // Don't add the preferred transfer syntax twice
+            if (*syntax != PREFERRED_TRANSFER_SYNTAX &&  // Don't add the preferred transfer syntax twice
+                // Make sure that the current version of DCMTK knows this transfer syntax
+                FromDcmtkBridge::LookupDcmtkTransferSyntax(dummy, *syntax))
             {
-              storageTransferSyntaxesC.push_back(GetTransferSyntaxUid(*it));
+              storageTransferSyntaxesC.push_back(GetTransferSyntaxUid(*syntax));
             }
           }