Mercurial > hg > orthanc
comparison 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 |
comparison
equal
deleted
inserted
replaced
3612:22eef03feed7 | 3613:c1e2b91c2ab4 |
---|---|
1386 | 1386 |
1387 | 1387 |
1388 static void FillSopSequence(DcmDataset& dataset, | 1388 static void FillSopSequence(DcmDataset& dataset, |
1389 const DcmTagKey& tag, | 1389 const DcmTagKey& tag, |
1390 const std::vector<std::string>& sopClassUids, | 1390 const std::vector<std::string>& sopClassUids, |
1391 const std::vector<std::string>& sopInstanceUids) | 1391 const std::vector<std::string>& sopInstanceUids, |
1392 bool hasFailureReason, | |
1393 Uint16 failureReason) | |
1392 { | 1394 { |
1393 for (size_t i = 0; i < sopClassUids.size(); i++) | 1395 for (size_t i = 0; i < sopClassUids.size(); i++) |
1394 { | 1396 { |
1395 std::auto_ptr<DcmItem> item(new DcmItem); | 1397 std::auto_ptr<DcmItem> item(new DcmItem); |
1396 if (!item->putAndInsertString(DCM_ReferencedSOPClassUID, sopClassUids[i].c_str()).good() || | 1398 if (!item->putAndInsertString(DCM_ReferencedSOPClassUID, sopClassUids[i].c_str()).good() || |
1397 !item->putAndInsertString(DCM_ReferencedSOPInstanceUID, sopInstanceUids[i].c_str()).good() || | 1399 !item->putAndInsertString(DCM_ReferencedSOPInstanceUID, sopInstanceUids[i].c_str()).good() || |
1400 (hasFailureReason && | |
1401 !item->putAndInsertUint16(DCM_FailureReason, failureReason).good()) || | |
1398 !dataset.insertSequenceItem(tag, item.release()).good()) | 1402 !dataset.insertSequenceItem(tag, item.release()).good()) |
1399 { | 1403 { |
1400 throw OrthancException(ErrorCode_InternalError); | 1404 throw OrthancException(ErrorCode_InternalError); |
1401 } | 1405 } |
1402 } | 1406 } |
1461 if (!dataset.putAndInsertString(DCM_TransactionUID, transactionUid.c_str()).good()) | 1465 if (!dataset.putAndInsertString(DCM_TransactionUID, transactionUid.c_str()).good()) |
1462 { | 1466 { |
1463 throw OrthancException(ErrorCode_InternalError); | 1467 throw OrthancException(ErrorCode_InternalError); |
1464 } | 1468 } |
1465 | 1469 |
1466 FillSopSequence(dataset, DCM_ReferencedSOPSequence, successSopClassUids, successSopInstanceUids); | 1470 FillSopSequence(dataset, DCM_ReferencedSOPSequence, successSopClassUids, |
1471 successSopInstanceUids, false, 0); | |
1467 | 1472 |
1468 // http://dicom.nema.org/medical/dicom/2019a/output/chtml/part04/sect_J.3.3.html | 1473 // http://dicom.nema.org/medical/dicom/2019a/output/chtml/part04/sect_J.3.3.html |
1469 if (failureSopClassUids.empty()) | 1474 if (failureSopClassUids.empty()) |
1470 { | 1475 { |
1471 content.EventTypeID = 1; // "Storage Commitment Request Successful" | 1476 content.EventTypeID = 1; // "Storage Commitment Request Successful" |
1472 } | 1477 } |
1473 else | 1478 else |
1474 { | 1479 { |
1475 content.EventTypeID = 2; // "Storage Commitment Request Complete - Failures Exist" | 1480 content.EventTypeID = 2; // "Storage Commitment Request Complete - Failures Exist" |
1476 FillSopSequence(dataset, DCM_FailedSOPSequence, failureSopClassUids, failureSopInstanceUids); | 1481 |
1482 // Failure reason | |
1483 // http://dicom.nema.org/medical/dicom/2019a/output/chtml/part03/sect_C.14.html#sect_C.14.1.1 | |
1484 FillSopSequence(dataset, DCM_FailedSOPSequence, failureSopClassUids, | |
1485 failureSopInstanceUids, true, 0x0112 /* No such object instance == 274 */); | |
1477 } | 1486 } |
1478 | 1487 |
1479 int presID = ASC_findAcceptedPresentationContextID( | 1488 int presID = ASC_findAcceptedPresentationContextID( |
1480 pimpl_->assoc_, UID_StorageCommitmentPushModelSOPClass); | 1489 pimpl_->assoc_, UID_StorageCommitmentPushModelSOPClass); |
1481 if (presID == 0) | 1490 if (presID == 0) |
1599 if (!dataset.putAndInsertString(DCM_TransactionUID, transactionUid.c_str()).good()) | 1608 if (!dataset.putAndInsertString(DCM_TransactionUID, transactionUid.c_str()).good()) |
1600 { | 1609 { |
1601 throw OrthancException(ErrorCode_InternalError); | 1610 throw OrthancException(ErrorCode_InternalError); |
1602 } | 1611 } |
1603 | 1612 |
1604 FillSopSequence(dataset, DCM_ReferencedSOPSequence, sopClassUids, sopInstanceUids); | 1613 FillSopSequence(dataset, DCM_ReferencedSOPSequence, sopClassUids, sopInstanceUids, false, 0); |
1605 | 1614 |
1606 int presID = ASC_findAcceptedPresentationContextID( | 1615 int presID = ASC_findAcceptedPresentationContextID( |
1607 pimpl_->assoc_, UID_StorageCommitmentPushModelSOPClass); | 1616 pimpl_->assoc_, UID_StorageCommitmentPushModelSOPClass); |
1608 if (presID == 0) | 1617 if (presID == 0) |
1609 { | 1618 { |