Mercurial > hg > orthanc
diff Core/DicomNetworking/DicomUserConnection.cpp @ 3635:8c0ef729d5a8 storage-commitment
StorageCommitmentScpJob
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 29 Jan 2020 17:39:31 +0100 |
parents | c1e2b91c2ab4 |
children | f6a73611ec5c |
line wrap: on
line diff
--- a/Core/DicomNetworking/DicomUserConnection.cpp Wed Jan 29 08:51:31 2020 +0100 +++ b/Core/DicomNetworking/DicomUserConnection.cpp Wed Jan 29 17:39:31 2020 +0100 @@ -1387,23 +1387,46 @@ static void FillSopSequence(DcmDataset& dataset, const DcmTagKey& tag, - const std::vector<std::string>& sopClassUids, - const std::vector<std::string>& sopInstanceUids, + const std::list<std::string>& sopClassUids, + const std::list<std::string>& sopInstanceUids, bool hasFailureReason, Uint16 failureReason) { - for (size_t i = 0; i < sopClassUids.size(); i++) + assert(sopClassUids.size() == sopInstanceUids.size()); + + if (sopInstanceUids.empty()) { - 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()) + // Add an empty sequence + if (!dataset.insertEmptyElement(tag).good()) { throw OrthancException(ErrorCode_InternalError); } } + else + { + std::list<std::string>::const_iterator currentClass = sopClassUids.begin(); + std::list<std::string>::const_iterator currentInstance = sopInstanceUids.begin(); + + while (currentClass != sopClassUids.end()) + { + std::auto_ptr<DcmItem> item(new DcmItem); + if (!item->putAndInsertString(DCM_ReferencedSOPClassUID, currentClass->c_str()).good() || + !item->putAndInsertString(DCM_ReferencedSOPInstanceUID, currentInstance->c_str()).good() || + (hasFailureReason && + !item->putAndInsertUint16(DCM_FailureReason, failureReason).good()) || + !dataset.insertSequenceItem(tag, item.release()).good()) + { + throw OrthancException(ErrorCode_InternalError); + } + + ++currentClass; + ++currentInstance; + } + + for (size_t i = 0; i < sopClassUids.size(); i++) + { + } + } } @@ -1411,10 +1434,10 @@ void DicomUserConnection::ReportStorageCommitment( const std::string& transactionUid, - const std::vector<std::string>& successSopClassUids, - const std::vector<std::string>& successSopInstanceUids, - const std::vector<std::string>& failureSopClassUids, - const std::vector<std::string>& failureSopInstanceUids) + const std::list<std::string>& successSopClassUids, + const std::list<std::string>& successSopInstanceUids, + const std::list<std::string>& failureSopClassUids, + const std::list<std::string>& failureSopInstanceUids) { if (successSopClassUids.size() != successSopInstanceUids.size() || failureSopClassUids.size() != failureSopInstanceUids.size()) @@ -1551,8 +1574,8 @@ void DicomUserConnection::RequestStorageCommitment( const std::string& transactionUid, - const std::vector<std::string>& sopClassUids, - const std::vector<std::string>& sopInstanceUids) + const std::list<std::string>& sopClassUids, + const std::list<std::string>& sopInstanceUids) { if (sopClassUids.size() != sopInstanceUids.size()) {