diff OrthancServer/DicomProtocol/DicomUserConnection.cpp @ 2069:fabf7820d1f1

New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 13 Jul 2016 16:52:39 +0200
parents 655489d9165d
children b9bd52c72ba2
line wrap: on
line diff
--- a/OrthancServer/DicomProtocol/DicomUserConnection.cpp	Wed Jul 13 16:10:25 2016 +0200
+++ b/OrthancServer/DicomProtocol/DicomUserConnection.cpp	Wed Jul 13 16:52:39 2016 +0200
@@ -133,6 +133,9 @@
 
 namespace Orthanc
 {
+  // By default, the timeout for DICOM SCU (client) connections is set to 10 seconds
+  static uint32_t defaultTimeout_ = 10;
+
   struct DicomUserConnection::PImpl
   {
     // Connection state
@@ -782,7 +785,7 @@
     remotePort_ = 104;
     manufacturer_ = ModalityManufacturer_Generic;
 
-    SetTimeout(10); 
+    SetTimeout(defaultTimeout_);
     pimpl_->net_ = NULL;
     pimpl_->params_ = NULL;
     pimpl_->assoc_ = NULL;
@@ -1102,14 +1105,16 @@
 
   void DicomUserConnection::SetTimeout(uint32_t seconds)
   {
-    if (seconds <= 0)
+    if (seconds == 0)
     {
-      throw OrthancException(ErrorCode_ParameterOutOfRange);
+      DisableTimeout();
     }
-
-    dcmConnectionTimeout.set(seconds);
-    pimpl_->dimseTimeout_ = seconds;
-    pimpl_->acseTimeout_ = 10;
+    else
+    {
+      dcmConnectionTimeout.set(seconds);
+      pimpl_->dimseTimeout_ = seconds;
+      pimpl_->acseTimeout_ = 10;  // Timeout used during association negociation
+    }
   }
 
 
@@ -1121,7 +1126,7 @@
      */
     dcmConnectionTimeout.set(-1);
     pimpl_->dimseTimeout_ = 0;
-    pimpl_->acseTimeout_ = 10;
+    pimpl_->acseTimeout_ = 10;  // Timeout used during association negociation
   }
 
 
@@ -1191,4 +1196,12 @@
 
     ExecuteFind(result, pimpl_->assoc_, dataset, sopClass, true, NULL, pimpl_->dimseTimeout_);
   }
+
+  
+  void DicomUserConnection::SetDefaultTimeout(uint32_t seconds)
+  {
+    LOG(INFO) << "Default timeout for DICOM connections if Orthanc acts as SCU (client): " 
+              << seconds << " seconds (0 = no timeout)";
+    defaultTimeout_ = seconds;
+  }  
 }