diff OrthancServer/DicomProtocol/DicomServer.cpp @ 2381:b8969010b534

uncoupling DCMTK primitives from Orthanc::Configuration
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 29 Aug 2017 19:59:01 +0200
parents 96b3ec054b69
children
line wrap: on
line diff
--- a/OrthancServer/DicomProtocol/DicomServer.cpp	Tue Aug 29 16:49:44 2017 +0200
+++ b/OrthancServer/DicomProtocol/DicomServer.cpp	Tue Aug 29 19:59:01 2017 +0200
@@ -39,7 +39,6 @@
 #include "../../Core/OrthancException.h"
 #include "../../Core/Toolbox.h"
 #include "../Internals/CommandDispatcher.h"
-#include "../OrthancInitialization.h"
 
 #include <boost/thread.hpp>
 
@@ -90,6 +89,7 @@
     aet_("ANY-SCP")
   {
     port_ = 104;
+    modalities_ = NULL;
     findRequestHandlerFactory_ = NULL;
     moveRequestHandlerFactory_ = NULL;
     storeRequestHandlerFactory_ = NULL;
@@ -179,6 +179,24 @@
     return aet_;
   }
 
+  void DicomServer::SetRemoteModalities(IRemoteModalities& modalities)
+  {
+    Stop();
+    modalities_ = &modalities;
+  }
+  
+  DicomServer::IRemoteModalities& DicomServer::GetRemoteModalities() const
+  {
+    if (modalities_ == NULL)
+    {
+      throw OrthancException(ErrorCode_BadSequenceOfCalls);
+    }
+    else
+    {
+      return *modalities_;
+    }
+  }
+    
   void DicomServer::SetFindRequestHandlerFactory(IFindRequestHandlerFactory& factory)
   {
     Stop();
@@ -296,6 +314,12 @@
 
   void DicomServer::Start()
   {
+    if (modalities_ == NULL)
+    {
+      LOG(ERROR) << "No list of modalities was provided to the DICOM server";
+      throw OrthancException(ErrorCode_BadSequenceOfCalls);
+    }
+    
     Stop();
 
     /* initialize network, i.e. create an instance of T_ASC_Network*. */
@@ -339,13 +363,20 @@
 
   bool DicomServer::IsMyAETitle(const std::string& aet) const
   {
+    if (modalities_ == NULL)
+    {
+      throw OrthancException(ErrorCode_BadSequenceOfCalls);
+    }
+    
     if (!HasCalledApplicationEntityTitleCheck())
     {
       // OK, no check on the AET.
       return true;
     }
-
-    return Configuration::IsSameAETitle(aet, GetApplicationEntityTitle());
+    else
+    {
+      return modalities_->IsSameAETitle(aet, GetApplicationEntityTitle());
+    }
   }
 
 }