Mercurial > hg > orthanc
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 } |