comparison Core/DicomNetworking/DicomStoreUserConnection.cpp @ 3879:a18b34dec94a transcoding

reorganization
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 04 May 2020 19:17:07 +0200
parents ea1d32861cfc
children cdd0cb5ec4e4
comparison
equal deleted inserted replaced
3878:661c931f22ad 3879:a18b34dec94a
151 151
152 152
153 void DicomStoreUserConnection::RegisterStorageClass(const std::string& sopClassUid, 153 void DicomStoreUserConnection::RegisterStorageClass(const std::string& sopClassUid,
154 DicomTransferSyntax syntax) 154 DicomTransferSyntax syntax)
155 { 155 {
156 StorageClasses::iterator found = storageClasses_.find(sopClassUid); 156 RegisteredClasses::iterator found = registeredClasses_.find(sopClassUid);
157 157
158 if (found == storageClasses_.end()) 158 if (found == registeredClasses_.end())
159 { 159 {
160 std::set<DicomTransferSyntax> ts; 160 std::set<DicomTransferSyntax> ts;
161 ts.insert(syntax); 161 ts.insert(syntax);
162 storageClasses_[sopClassUid] = ts; 162 registeredClasses_[sopClassUid] = ts;
163 } 163 }
164 else 164 else
165 { 165 {
166 found->second.insert(syntax); 166 found->second.insert(syntax);
167 } 167 }
215 LOG(INFO) << "Re-negociating DICOM association with " 215 LOG(INFO) << "Re-negociating DICOM association with "
216 << parameters_.GetRemoteModality().GetApplicationEntityTitle(); 216 << parameters_.GetRemoteModality().GetApplicationEntityTitle();
217 } 217 }
218 218
219 association_->ClearPresentationContexts(); 219 association_->ClearPresentationContexts();
220 RegisterStorageClass(sopClassUid, transferSyntax); 220 RegisterStorageClass(sopClassUid, transferSyntax); // (*)
221 221
222 222
223 /** 223 /**
224 * Step 2: Propose at least the mandatory SOP class. 224 * Step 2: Propose at least the mandatory SOP class.
225 **/ 225 **/
226 226
227 { 227 {
228 StorageClasses::const_iterator mandatory = storageClasses_.find(sopClassUid); 228 RegisteredClasses::const_iterator mandatory = registeredClasses_.find(sopClassUid);
229 229
230 if (mandatory == storageClasses_.end() || 230 if (mandatory == registeredClasses_.end() ||
231 mandatory->second.find(transferSyntax) == mandatory->second.end()) 231 mandatory->second.find(transferSyntax) == mandatory->second.end())
232 { 232 {
233 // Should never fail because of (*)
233 throw OrthancException(ErrorCode_InternalError); 234 throw OrthancException(ErrorCode_InternalError);
234 } 235 }
235 236
236 if (!ProposeStorageClass(sopClassUid, mandatory->second)) 237 if (!ProposeStorageClass(sopClassUid, mandatory->second))
237 { 238 {
246 /** 247 /**
247 * Step 3: Propose all the previously spotted SOP classes, as 248 * Step 3: Propose all the previously spotted SOP classes, as
248 * registered through the "RegisterStorageClass()" method. 249 * registered through the "RegisterStorageClass()" method.
249 **/ 250 **/
250 251
251 for (StorageClasses::const_iterator it = storageClasses_.begin(); 252 for (RegisteredClasses::const_iterator it = registeredClasses_.begin();
252 it != storageClasses_.end(); ++it) 253 it != registeredClasses_.end(); ++it)
253 { 254 {
254 if (it->first != sopClassUid) 255 if (it->first != sopClassUid)
255 { 256 {
256 ProposeStorageClass(it->first, it->second); 257 ProposeStorageClass(it->first, it->second);
257 } 258 }
275 for (int i = 0; i < numberOfDcmShortSCUStorageSOPClassUIDs; i++) 276 for (int i = 0; i < numberOfDcmShortSCUStorageSOPClassUIDs; i++)
276 { 277 {
277 std::string c(dcmShortSCUStorageSOPClassUIDs[i]); 278 std::string c(dcmShortSCUStorageSOPClassUIDs[i]);
278 279
279 if (c != sopClassUid && 280 if (c != sopClassUid &&
280 storageClasses_.find(c) == storageClasses_.end()) 281 registeredClasses_.find(c) == registeredClasses_.end())
281 { 282 {
282 ProposeStorageClass(c, ts); 283 ProposeStorageClass(c, ts);
283 } 284 }
284 } 285 }
285 } 286 }
293 association_->Open(parameters_); 294 association_->Open(parameters_);
294 return LookupPresentationContext(presentationContextId, sopClassUid, transferSyntax); 295 return LookupPresentationContext(presentationContextId, sopClassUid, transferSyntax);
295 } 296 }
296 297
297 298
298 void DicomStoreUserConnection::Store(std::string& sopClassUid, 299 void DicomStoreUserConnection::StoreInternal(std::string& sopClassUid,
299 std::string& sopInstanceUid, 300 std::string& sopInstanceUid,
300 DcmDataset& dataset, 301 DcmDataset& dataset,
301 const std::string& moveOriginatorAET, 302 const std::string& moveOriginatorAET,
302 uint16_t moveOriginatorID) 303 uint16_t moveOriginatorID)
303 { 304 {
304 DicomTransferSyntax transferSyntax; 305 DicomTransferSyntax transferSyntax;
305 LookupParameters(sopClassUid, sopInstanceUid, transferSyntax, dataset); 306 LookupParameters(sopClassUid, sopInstanceUid, transferSyntax, dataset);
306 307
307 uint8_t presID; 308 uint8_t presID;
370 } 371 }
371 372
372 373
373 void DicomStoreUserConnection::Store(std::string& sopClassUid, 374 void DicomStoreUserConnection::Store(std::string& sopClassUid,
374 std::string& sopInstanceUid, 375 std::string& sopInstanceUid,
375 ParsedDicomFile& parsed,
376 const std::string& moveOriginatorAET,
377 uint16_t moveOriginatorID)
378 {
379 if (parsed.GetDcmtkObject().getDataset() == NULL)
380 {
381 throw OrthancException(ErrorCode_InternalError);
382 }
383
384 Store(sopClassUid, sopInstanceUid, *parsed.GetDcmtkObject().getDataset(),
385 moveOriginatorAET, moveOriginatorID);
386 }
387
388
389 void DicomStoreUserConnection::Store(std::string& sopClassUid,
390 std::string& sopInstanceUid,
391 const void* buffer, 376 const void* buffer,
392 size_t size, 377 size_t size,
393 const std::string& moveOriginatorAET, 378 const std::string& moveOriginatorAET,
394 uint16_t moveOriginatorID) 379 uint16_t moveOriginatorID)
395 { 380 {
400 dicom->getDataset() == NULL) 385 dicom->getDataset() == NULL)
401 { 386 {
402 throw OrthancException(ErrorCode_InternalError); 387 throw OrthancException(ErrorCode_InternalError);
403 } 388 }
404 389
405 Store(sopClassUid, sopInstanceUid, *dicom->getDataset(), 390 StoreInternal(sopClassUid, sopInstanceUid, *dicom->getDataset(),
406 moveOriginatorAET, moveOriginatorID); 391 moveOriginatorAET, moveOriginatorID);
407 } 392 }
408 } 393 }