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 {