Mercurial > hg > orthanc
comparison OrthancServer/ServerJobs/DicomModalityStoreJob.cpp @ 3875:ea1d32861cfc transcoding
moving timeout from DicomAssocation to DicomAssociationParameters
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 04 May 2020 14:49:31 +0200 |
parents | 2effa961f67f |
children | 8f7ad4989fec |
comparison
equal
deleted
inserted
replaced
3874:2effa961f67f | 3875:ea1d32861cfc |
---|---|
46 { | 46 { |
47 void DicomModalityStoreJob::OpenConnection() | 47 void DicomModalityStoreJob::OpenConnection() |
48 { | 48 { |
49 if (connection_.get() == NULL) | 49 if (connection_.get() == NULL) |
50 { | 50 { |
51 DicomAssociationParameters params(localAet_, remote_); | 51 connection_.reset(new DicomStoreUserConnection(parameters_)); |
52 connection_.reset(new DicomStoreUserConnection(params)); | |
53 | |
54 if (timeout_ > -1) | |
55 { | |
56 connection_->SetTimeout(timeout_); | |
57 } | |
58 } | 52 } |
59 } | 53 } |
60 | 54 |
61 | 55 |
62 bool DicomModalityStoreJob::HandleInstance(const std::string& instance) | 56 bool DicomModalityStoreJob::HandleInstance(const std::string& instance) |
63 { | 57 { |
64 assert(IsStarted()); | 58 assert(IsStarted()); |
65 OpenConnection(); | 59 OpenConnection(); |
66 | 60 |
67 LOG(INFO) << "Sending instance " << instance << " to modality \"" | 61 LOG(INFO) << "Sending instance " << instance << " to modality \"" |
68 << remote_.GetApplicationEntityTitle() << "\""; | 62 << parameters_.GetRemoteModality().GetApplicationEntityTitle() << "\""; |
69 | 63 |
70 std::string dicom; | 64 std::string dicom; |
71 | 65 |
72 try | 66 try |
73 { | 67 { |
107 if (sopClassUids_.size() == GetInstancesCount()) | 101 if (sopClassUids_.size() == GetInstancesCount()) |
108 { | 102 { |
109 assert(IsStarted()); | 103 assert(IsStarted()); |
110 connection_.reset(NULL); | 104 connection_.reset(NULL); |
111 | 105 |
112 const std::string& remoteAet = remote_.GetApplicationEntityTitle(); | 106 const std::string& remoteAet = parameters_.GetRemoteModality().GetApplicationEntityTitle(); |
113 | 107 |
114 LOG(INFO) << "Sending storage commitment request to modality: " << remoteAet; | 108 LOG(INFO) << "Sending storage commitment request to modality: " << remoteAet; |
115 | 109 |
116 // Create a "pending" storage commitment report BEFORE the | 110 // Create a "pending" storage commitment report BEFORE the |
117 // actual SCU call in order to avoid race conditions | 111 // actual SCU call in order to avoid race conditions |
119 transactionUid_, new StorageCommitmentReports::Report(remoteAet)); | 113 transactionUid_, new StorageCommitmentReports::Report(remoteAet)); |
120 | 114 |
121 std::vector<std::string> a(sopClassUids_.begin(), sopClassUids_.end()); | 115 std::vector<std::string> a(sopClassUids_.begin(), sopClassUids_.end()); |
122 std::vector<std::string> b(sopInstanceUids_.begin(), sopInstanceUids_.end()); | 116 std::vector<std::string> b(sopInstanceUids_.begin(), sopInstanceUids_.end()); |
123 | 117 |
124 DicomAssociationParameters parameters(localAet_, remote_); | 118 DicomAssociation::RequestStorageCommitment(parameters_, transactionUid_, a, b); |
125 DicomAssociation::RequestStorageCommitment(parameters, transactionUid_, a, b); | |
126 } | 119 } |
127 } | 120 } |
128 | 121 |
129 //boost::this_thread::sleep(boost::posix_time::milliseconds(500)); | 122 //boost::this_thread::sleep(boost::posix_time::milliseconds(500)); |
130 | 123 |
138 } | 131 } |
139 | 132 |
140 | 133 |
141 DicomModalityStoreJob::DicomModalityStoreJob(ServerContext& context) : | 134 DicomModalityStoreJob::DicomModalityStoreJob(ServerContext& context) : |
142 context_(context), | 135 context_(context), |
143 localAet_("ORTHANC"), | |
144 timeout_(-1), | |
145 moveOriginatorId_(0), // By default, not a C-MOVE | 136 moveOriginatorId_(0), // By default, not a C-MOVE |
146 storageCommitment_(false) // By default, no storage commitment | 137 storageCommitment_(false) // By default, no storage commitment |
147 { | 138 { |
148 ResetStorageCommitment(); | 139 ResetStorageCommitment(); |
149 } | 140 } |
155 { | 146 { |
156 throw OrthancException(ErrorCode_BadSequenceOfCalls); | 147 throw OrthancException(ErrorCode_BadSequenceOfCalls); |
157 } | 148 } |
158 else | 149 else |
159 { | 150 { |
160 localAet_ = aet; | 151 parameters_.SetLocalApplicationEntityTitle(aet); |
161 } | 152 } |
162 } | 153 } |
163 | 154 |
164 | 155 |
165 void DicomModalityStoreJob::SetRemoteModality(const RemoteModalityParameters& remote) | 156 void DicomModalityStoreJob::SetRemoteModality(const RemoteModalityParameters& remote) |
168 { | 159 { |
169 throw OrthancException(ErrorCode_BadSequenceOfCalls); | 160 throw OrthancException(ErrorCode_BadSequenceOfCalls); |
170 } | 161 } |
171 else | 162 else |
172 { | 163 { |
173 remote_ = remote; | 164 parameters_.SetRemoteModality(remote); |
174 } | 165 } |
175 } | 166 } |
176 | 167 |
177 | 168 |
169 void DicomModalityStoreJob::SetTimeout(uint32_t seconds) | |
170 { | |
171 if (IsStarted()) | |
172 { | |
173 throw OrthancException(ErrorCode_BadSequenceOfCalls); | |
174 } | |
175 else | |
176 { | |
177 parameters_.SetTimeout(seconds); | |
178 } | |
179 } | |
180 | |
181 | |
178 const std::string& DicomModalityStoreJob::GetMoveOriginatorAet() const | 182 const std::string& DicomModalityStoreJob::GetMoveOriginatorAet() const |
179 { | 183 { |
180 if (HasMoveOriginator()) | 184 if (HasMoveOriginator()) |
181 { | 185 { |
182 return moveOriginatorAet_; | 186 return moveOriginatorAet_; |
260 | 264 |
261 void DicomModalityStoreJob::GetPublicContent(Json::Value& value) | 265 void DicomModalityStoreJob::GetPublicContent(Json::Value& value) |
262 { | 266 { |
263 SetOfInstancesJob::GetPublicContent(value); | 267 SetOfInstancesJob::GetPublicContent(value); |
264 | 268 |
265 value["LocalAet"] = localAet_; | 269 value["LocalAet"] = parameters_.GetLocalApplicationEntityTitle(); |
266 value["RemoteAet"] = remote_.GetApplicationEntityTitle(); | 270 value["RemoteAet"] = parameters_.GetRemoteModality().GetApplicationEntityTitle(); |
267 | 271 |
268 if (HasMoveOriginator()) | 272 if (HasMoveOriginator()) |
269 { | 273 { |
270 value["MoveOriginatorAET"] = GetMoveOriginatorAet(); | 274 value["MoveOriginatorAET"] = GetMoveOriginatorAet(); |
271 value["MoveOriginatorID"] = GetMoveOriginatorId(); | 275 value["MoveOriginatorID"] = GetMoveOriginatorId(); |
276 value["StorageCommitmentTransactionUID"] = transactionUid_; | 280 value["StorageCommitmentTransactionUID"] = transactionUid_; |
277 } | 281 } |
278 } | 282 } |
279 | 283 |
280 | 284 |
281 static const char* LOCAL_AET = "LocalAet"; | |
282 static const char* REMOTE = "Remote"; | |
283 static const char* MOVE_ORIGINATOR_AET = "MoveOriginatorAet"; | 285 static const char* MOVE_ORIGINATOR_AET = "MoveOriginatorAet"; |
284 static const char* MOVE_ORIGINATOR_ID = "MoveOriginatorId"; | 286 static const char* MOVE_ORIGINATOR_ID = "MoveOriginatorId"; |
285 static const char* STORAGE_COMMITMENT = "StorageCommitment"; | 287 static const char* STORAGE_COMMITMENT = "StorageCommitment"; |
286 static const char* TIMEOUT = "Timeout"; | |
287 | 288 |
288 | 289 |
289 DicomModalityStoreJob::DicomModalityStoreJob(ServerContext& context, | 290 DicomModalityStoreJob::DicomModalityStoreJob(ServerContext& context, |
290 const Json::Value& serialized) : | 291 const Json::Value& serialized) : |
291 SetOfInstancesJob(serialized), | 292 SetOfInstancesJob(serialized), |
292 context_(context) | 293 context_(context) |
293 { | 294 { |
294 localAet_ = SerializationToolbox::ReadString(serialized, LOCAL_AET); | |
295 remote_ = RemoteModalityParameters(serialized[REMOTE]); | |
296 moveOriginatorAet_ = SerializationToolbox::ReadString(serialized, MOVE_ORIGINATOR_AET); | 295 moveOriginatorAet_ = SerializationToolbox::ReadString(serialized, MOVE_ORIGINATOR_AET); |
297 moveOriginatorId_ = static_cast<uint16_t> | 296 moveOriginatorId_ = static_cast<uint16_t> |
298 (SerializationToolbox::ReadUnsignedInteger(serialized, MOVE_ORIGINATOR_ID)); | 297 (SerializationToolbox::ReadUnsignedInteger(serialized, MOVE_ORIGINATOR_ID)); |
299 EnableStorageCommitment(SerializationToolbox::ReadBoolean(serialized, STORAGE_COMMITMENT)); | 298 EnableStorageCommitment(SerializationToolbox::ReadBoolean(serialized, STORAGE_COMMITMENT)); |
300 | 299 |
301 // New in Orthanc in 1.7.0 | 300 parameters_ = DicomAssociationParameters::UnserializeJob(serialized); |
302 timeout_ = SerializationToolbox::ReadInteger(serialized, TIMEOUT, -1); | |
303 } | 301 } |
304 | 302 |
305 | 303 |
306 bool DicomModalityStoreJob::Serialize(Json::Value& target) | 304 bool DicomModalityStoreJob::Serialize(Json::Value& target) |
307 { | 305 { |
309 { | 307 { |
310 return false; | 308 return false; |
311 } | 309 } |
312 else | 310 else |
313 { | 311 { |
314 target[LOCAL_AET] = localAet_; | 312 parameters_.SerializeJob(target); |
315 remote_.Serialize(target[REMOTE], true /* force advanced format */); | |
316 target[MOVE_ORIGINATOR_AET] = moveOriginatorAet_; | 313 target[MOVE_ORIGINATOR_AET] = moveOriginatorAet_; |
317 target[MOVE_ORIGINATOR_ID] = moveOriginatorId_; | 314 target[MOVE_ORIGINATOR_ID] = moveOriginatorId_; |
318 target[STORAGE_COMMITMENT] = storageCommitment_; | 315 target[STORAGE_COMMITMENT] = storageCommitment_; |
319 target[TIMEOUT] = timeout_; | |
320 return true; | 316 return true; |
321 } | 317 } |
322 } | 318 } |
323 } | 319 } |