Mercurial > hg > orthanc
comparison 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 |
comparison
equal
deleted
inserted
replaced
2068:879f3be759ef | 2069:fabf7820d1f1 |
---|---|
131 static const unsigned int MAXIMUM_STORAGE_SOP_CLASSES = 64; | 131 static const unsigned int MAXIMUM_STORAGE_SOP_CLASSES = 64; |
132 | 132 |
133 | 133 |
134 namespace Orthanc | 134 namespace Orthanc |
135 { | 135 { |
136 // By default, the timeout for DICOM SCU (client) connections is set to 10 seconds | |
137 static uint32_t defaultTimeout_ = 10; | |
138 | |
136 struct DicomUserConnection::PImpl | 139 struct DicomUserConnection::PImpl |
137 { | 140 { |
138 // Connection state | 141 // Connection state |
139 uint32_t dimseTimeout_; | 142 uint32_t dimseTimeout_; |
140 uint32_t acseTimeout_; | 143 uint32_t acseTimeout_; |
780 remoteHost_("127.0.0.1") | 783 remoteHost_("127.0.0.1") |
781 { | 784 { |
782 remotePort_ = 104; | 785 remotePort_ = 104; |
783 manufacturer_ = ModalityManufacturer_Generic; | 786 manufacturer_ = ModalityManufacturer_Generic; |
784 | 787 |
785 SetTimeout(10); | 788 SetTimeout(defaultTimeout_); |
786 pimpl_->net_ = NULL; | 789 pimpl_->net_ = NULL; |
787 pimpl_->params_ = NULL; | 790 pimpl_->params_ = NULL; |
788 pimpl_->assoc_ = NULL; | 791 pimpl_->assoc_ = NULL; |
789 | 792 |
790 // SOP classes for C-ECHO, C-FIND and C-MOVE (**) | 793 // SOP classes for C-ECHO, C-FIND and C-MOVE (**) |
1100 } | 1103 } |
1101 | 1104 |
1102 | 1105 |
1103 void DicomUserConnection::SetTimeout(uint32_t seconds) | 1106 void DicomUserConnection::SetTimeout(uint32_t seconds) |
1104 { | 1107 { |
1105 if (seconds <= 0) | 1108 if (seconds == 0) |
1106 { | 1109 { |
1107 throw OrthancException(ErrorCode_ParameterOutOfRange); | 1110 DisableTimeout(); |
1108 } | 1111 } |
1109 | 1112 else |
1110 dcmConnectionTimeout.set(seconds); | 1113 { |
1111 pimpl_->dimseTimeout_ = seconds; | 1114 dcmConnectionTimeout.set(seconds); |
1112 pimpl_->acseTimeout_ = 10; | 1115 pimpl_->dimseTimeout_ = seconds; |
1116 pimpl_->acseTimeout_ = 10; // Timeout used during association negociation | |
1117 } | |
1113 } | 1118 } |
1114 | 1119 |
1115 | 1120 |
1116 void DicomUserConnection::DisableTimeout() | 1121 void DicomUserConnection::DisableTimeout() |
1117 { | 1122 { |
1119 * Global timeout (seconds) for connecting to remote hosts. | 1124 * Global timeout (seconds) for connecting to remote hosts. |
1120 * Default value is -1 which selects infinite timeout, i.e. blocking connect(). | 1125 * Default value is -1 which selects infinite timeout, i.e. blocking connect(). |
1121 */ | 1126 */ |
1122 dcmConnectionTimeout.set(-1); | 1127 dcmConnectionTimeout.set(-1); |
1123 pimpl_->dimseTimeout_ = 0; | 1128 pimpl_->dimseTimeout_ = 0; |
1124 pimpl_->acseTimeout_ = 10; | 1129 pimpl_->acseTimeout_ = 10; // Timeout used during association negociation |
1125 } | 1130 } |
1126 | 1131 |
1127 | 1132 |
1128 void DicomUserConnection::CheckStorageSOPClassesInvariant() const | 1133 void DicomUserConnection::CheckStorageSOPClassesInvariant() const |
1129 { | 1134 { |
1189 DcmDataset* dataset = query.GetDcmtkObject().getDataset(); | 1194 DcmDataset* dataset = query.GetDcmtkObject().getDataset(); |
1190 const char* sopClass = UID_FINDModalityWorklistInformationModel; | 1195 const char* sopClass = UID_FINDModalityWorklistInformationModel; |
1191 | 1196 |
1192 ExecuteFind(result, pimpl_->assoc_, dataset, sopClass, true, NULL, pimpl_->dimseTimeout_); | 1197 ExecuteFind(result, pimpl_->assoc_, dataset, sopClass, true, NULL, pimpl_->dimseTimeout_); |
1193 } | 1198 } |
1199 | |
1200 | |
1201 void DicomUserConnection::SetDefaultTimeout(uint32_t seconds) | |
1202 { | |
1203 LOG(INFO) << "Default timeout for DICOM connections if Orthanc acts as SCU (client): " | |
1204 << seconds << " seconds (0 = no timeout)"; | |
1205 defaultTimeout_ = seconds; | |
1206 } | |
1194 } | 1207 } |