Mercurial > hg > orthanc
diff Core/DicomNetworking/DicomUserConnection.cpp @ 3613:c1e2b91c2ab4 storage-commitment
all the abstractions for storage commitment are available
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 21 Jan 2020 17:01:46 +0100 |
parents | 0ce9c1c6474f |
children | 8c0ef729d5a8 |
line wrap: on
line diff
--- a/Core/DicomNetworking/DicomUserConnection.cpp Tue Jan 21 14:20:50 2020 +0100 +++ b/Core/DicomNetworking/DicomUserConnection.cpp Tue Jan 21 17:01:46 2020 +0100 @@ -1388,13 +1388,17 @@ static void FillSopSequence(DcmDataset& dataset, const DcmTagKey& tag, const std::vector<std::string>& sopClassUids, - const std::vector<std::string>& sopInstanceUids) + const std::vector<std::string>& sopInstanceUids, + bool hasFailureReason, + Uint16 failureReason) { for (size_t i = 0; i < sopClassUids.size(); i++) { std::auto_ptr<DcmItem> item(new DcmItem); if (!item->putAndInsertString(DCM_ReferencedSOPClassUID, sopClassUids[i].c_str()).good() || !item->putAndInsertString(DCM_ReferencedSOPInstanceUID, sopInstanceUids[i].c_str()).good() || + (hasFailureReason && + !item->putAndInsertUint16(DCM_FailureReason, failureReason).good()) || !dataset.insertSequenceItem(tag, item.release()).good()) { throw OrthancException(ErrorCode_InternalError); @@ -1463,7 +1467,8 @@ throw OrthancException(ErrorCode_InternalError); } - FillSopSequence(dataset, DCM_ReferencedSOPSequence, successSopClassUids, successSopInstanceUids); + FillSopSequence(dataset, DCM_ReferencedSOPSequence, successSopClassUids, + successSopInstanceUids, false, 0); // http://dicom.nema.org/medical/dicom/2019a/output/chtml/part04/sect_J.3.3.html if (failureSopClassUids.empty()) @@ -1473,7 +1478,11 @@ else { content.EventTypeID = 2; // "Storage Commitment Request Complete - Failures Exist" - FillSopSequence(dataset, DCM_FailedSOPSequence, failureSopClassUids, failureSopInstanceUids); + + // Failure reason + // http://dicom.nema.org/medical/dicom/2019a/output/chtml/part03/sect_C.14.html#sect_C.14.1.1 + FillSopSequence(dataset, DCM_FailedSOPSequence, failureSopClassUids, + failureSopInstanceUids, true, 0x0112 /* No such object instance == 274 */); } int presID = ASC_findAcceptedPresentationContextID( @@ -1601,7 +1610,7 @@ throw OrthancException(ErrorCode_InternalError); } - FillSopSequence(dataset, DCM_ReferencedSOPSequence, sopClassUids, sopInstanceUids); + FillSopSequence(dataset, DCM_ReferencedSOPSequence, sopClassUids, sopInstanceUids, false, 0); int presID = ASC_findAcceptedPresentationContextID( pimpl_->assoc_, UID_StorageCommitmentPushModelSOPClass);