changeset 7072:6c78bd3fcded

Added SiemensSyngoCT manufacturer
author Alain Mazy <am@orthanc.team>
date Wed, 12 Aug 2026 11:47:56 +0200
parents c5e5774720fc
children 66f7a5185a4c
files NEWS OrthancFramework/Sources/DicomNetworking/DicomControlUserConnection.cpp OrthancFramework/Sources/Enumerations.cpp OrthancFramework/Sources/Enumerations.h OrthancServer/Resources/Configuration.json
diffstat 5 files changed, 22 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/NEWS	Wed Aug 12 11:02:10 2026 +0200
+++ b/NEWS	Wed Aug 12 11:47:56 2026 +0200
@@ -35,7 +35,8 @@
   - "Name" was documented as "MyOrthanc" while its default value is "ORTHANC".
 * Orthanc no longer accepts DICOM association from modalities whose AET contains invalid characters.
 * Orthanc now ignores leading/trailing spaces in AET.
-
+* Experimental: New "Manufacturer" "SiemensSyngoCT" to propose both the SCU and SCP C-Store roles when
+  performing a C-Get SCU.
 
 REST API
 --------
--- a/OrthancFramework/Sources/DicomNetworking/DicomControlUserConnection.cpp	Wed Aug 12 11:02:10 2026 +0200
+++ b/OrthancFramework/Sources/DicomNetworking/DicomControlUserConnection.cpp	Wed Aug 12 11:47:56 2026 +0200
@@ -296,9 +296,16 @@
         throw OrthancException(ErrorCode_BadSequenceOfCalls); // the acceptedStorageSopClassUids should always be defined for a C-Get
       }
 
+      DicomAssociationRole proposedStoreRole = DicomAssociationRole_Scu;
+
+      if (parameters_.GetRemoteModality().GetManufacturer() == ModalityManufacturer_SiemensSyngoCT)
+      {
+        proposedStoreRole = DicomAssociationRole_Default; // it seems SyngoCT won't accept a C-Store/SCP only and requires both SCU and SCP roles to be proposed
+      }
+
       for (std::set<std::string>::const_iterator it = acceptedStorageSopClasses.begin(); it != acceptedStorageSopClasses.end(); ++it)
       {
-        association_->ProposePresentationContext(*it, proposedStorageTransferSyntaxes, DicomAssociationRole_Scp);
+        association_->ProposePresentationContext(*it, proposedStorageTransferSyntaxes, proposedStoreRole);
       }
     }
   }
--- a/OrthancFramework/Sources/Enumerations.cpp	Wed Aug 12 11:02:10 2026 +0200
+++ b/OrthancFramework/Sources/Enumerations.cpp	Wed Aug 12 11:47:56 2026 +0200
@@ -816,7 +816,10 @@
       
       case ModalityManufacturer_GE:
         return "GE";
-      
+
+      case ModalityManufacturer_SiemensSyngoCT:
+        return "SiemensSyngoCT";
+        
       default:
         throw OrthancException(ErrorCode_ParameterOutOfRange);
     }
@@ -1633,6 +1636,10 @@
     {
       return ModalityManufacturer_GE;
     }
+    else if (manufacturer == "SiemensSyngoCT")
+    {
+      return ModalityManufacturer_SiemensSyngoCT;
+    }
     else if (manufacturer == "AgfaImpax" ||
              manufacturer == "SyngoVia")
     {
--- a/OrthancFramework/Sources/Enumerations.h	Wed Aug 12 11:02:10 2026 +0200
+++ b/OrthancFramework/Sources/Enumerations.h	Wed Aug 12 11:47:56 2026 +0200
@@ -679,7 +679,8 @@
     ModalityManufacturer_GenericNoWildcardInDates,
     ModalityManufacturer_GenericNoUniversalWildcard,
     ModalityManufacturer_Vitrea,
-    ModalityManufacturer_GE
+    ModalityManufacturer_GE,
+    ModalityManufacturer_SiemensSyngoCT
   };
 
   enum DicomRequestType
--- a/OrthancServer/Resources/Configuration.json	Wed Aug 12 11:02:10 2026 +0200
+++ b/OrthancServer/Resources/Configuration.json	Wed Aug 12 11:47:56 2026 +0200
@@ -369,6 +369,8 @@
      * - "Vitrea",
      * - "GE" (Enterprise Archive, MRI consoles and Advantage Workstation
      *   from GE Healthcare).
+     * - "SiemensSyngoCT" (proposes both SCP and SCU C-Store roles when performing
+     *    a C-Get SCU)
      *
      * This parameter is case-sensitive.
      **/