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 }