comparison Core/DicomNetworking/DicomStoreUserConnection.cpp @ 3881:f23ab7829a8d transcoding

reorganization
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 05 May 2020 10:35:39 +0200
parents cdd0cb5ec4e4
children 904575738462
comparison
equal deleted inserted replaced
3880:cdd0cb5ec4e4 3881:f23ab7829a8d
176 } 176 }
177 177
178 178
179 void DicomStoreUserConnection::LookupParameters(std::string& sopClassUid, 179 void DicomStoreUserConnection::LookupParameters(std::string& sopClassUid,
180 std::string& sopInstanceUid, 180 std::string& sopInstanceUid,
181 DicomTransferSyntax& transferSyntax,
182 DcmDataset& dataset) 181 DcmDataset& dataset)
183 { 182 {
184 OFString a, b; 183 OFString a, b;
185 if (!dataset.findAndGetOFString(DCM_SOPClassUID, a).good() || 184 if (!dataset.findAndGetOFString(DCM_SOPClassUID, a).good() ||
186 !dataset.findAndGetOFString(DCM_SOPInstanceUID, b).good()) 185 !dataset.findAndGetOFString(DCM_SOPInstanceUID, b).good())
190 parameters_.GetRemoteModality().GetApplicationEntityTitle()); 189 parameters_.GetRemoteModality().GetApplicationEntityTitle());
191 } 190 }
192 191
193 sopClassUid.assign(a.c_str()); 192 sopClassUid.assign(a.c_str());
194 sopInstanceUid.assign(b.c_str()); 193 sopInstanceUid.assign(b.c_str());
195
196 if (!FromDcmtkBridge::LookupOrthancTransferSyntax(
197 transferSyntax, dataset.getOriginalXfer()))
198 {
199 throw OrthancException(ErrorCode_InternalError,
200 "Unknown transfer syntax from DCMTK");
201 }
202 } 194 }
203 195
204 196
205 bool DicomStoreUserConnection::NegotiatePresentationContext( 197 bool DicomStoreUserConnection::NegotiatePresentationContext(
206 uint8_t& presentationContextId, 198 uint8_t& presentationContextId,
312 association_->Open(parameters_); 304 association_->Open(parameters_);
313 return LookupPresentationContext(presentationContextId, sopClassUid, transferSyntax); 305 return LookupPresentationContext(presentationContextId, sopClassUid, transferSyntax);
314 } 306 }
315 307
316 308
317 void DicomStoreUserConnection::StoreInternal(std::string& sopClassUid, 309 void DicomStoreUserConnection::Store(std::string& sopClassUid,
318 std::string& sopInstanceUid, 310 std::string& sopInstanceUid,
319 DcmDataset& dataset, 311 DcmDataset& dataset,
320 const std::string& moveOriginatorAET, 312 const std::string& moveOriginatorAET,
321 uint16_t moveOriginatorID) 313 uint16_t moveOriginatorID)
322 { 314 {
315 LookupParameters(sopClassUid, sopInstanceUid, dataset);
316
323 DicomTransferSyntax transferSyntax; 317 DicomTransferSyntax transferSyntax;
324 LookupParameters(sopClassUid, sopInstanceUid, transferSyntax, dataset); 318 if (!FromDcmtkBridge::LookupOrthancTransferSyntax(transferSyntax, dataset))
319 {
320 throw OrthancException(ErrorCode_InternalError,
321 "Unknown transfer syntax from DCMTK");
322 }
325 323
326 uint8_t presID; 324 uint8_t presID;
327 if (!NegotiatePresentationContext(presID, sopClassUid, transferSyntax)) 325 if (!NegotiatePresentationContext(presID, sopClassUid, transferSyntax))
328 { 326 {
329 throw OrthancException(ErrorCode_NetworkProtocol, 327 throw OrthancException(ErrorCode_NetworkProtocol,
403 dicom->getDataset() == NULL) 401 dicom->getDataset() == NULL)
404 { 402 {
405 throw OrthancException(ErrorCode_InternalError); 403 throw OrthancException(ErrorCode_InternalError);
406 } 404 }
407 405
408 StoreInternal(sopClassUid, sopInstanceUid, *dicom->getDataset(), 406 Store(sopClassUid, sopInstanceUid, *dicom->getDataset(),
409 moveOriginatorAET, moveOriginatorID); 407 moveOriginatorAET, moveOriginatorID);
410 } 408 }
411 409
412 410
413 bool DicomStoreUserConnection::LookupTranscoding(std::set<DicomTransferSyntax>& acceptedSyntaxes, 411 bool DicomStoreUserConnection::LookupTranscoding(std::set<DicomTransferSyntax>& acceptedSyntaxes,
414 const std::string& sopClassUid, 412 const std::string& sopClassUid,