comparison 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
comparison
equal deleted inserted replaced
3634:103ee029982e 3635:8c0ef729d5a8
1385 } 1385 }
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::list<std::string>& sopClassUids,
1391 const std::vector<std::string>& sopInstanceUids, 1391 const std::list<std::string>& sopInstanceUids,
1392 bool hasFailureReason, 1392 bool hasFailureReason,
1393 Uint16 failureReason) 1393 Uint16 failureReason)
1394 { 1394 {
1395 for (size_t i = 0; i < sopClassUids.size(); i++) 1395 assert(sopClassUids.size() == sopInstanceUids.size());
1396 { 1396
1397 std::auto_ptr<DcmItem> item(new DcmItem); 1397 if (sopInstanceUids.empty())
1398 if (!item->putAndInsertString(DCM_ReferencedSOPClassUID, sopClassUids[i].c_str()).good() || 1398 {
1399 !item->putAndInsertString(DCM_ReferencedSOPInstanceUID, sopInstanceUids[i].c_str()).good() || 1399 // Add an empty sequence
1400 (hasFailureReason && 1400 if (!dataset.insertEmptyElement(tag).good())
1401 !item->putAndInsertUint16(DCM_FailureReason, failureReason).good()) ||
1402 !dataset.insertSequenceItem(tag, item.release()).good())
1403 { 1401 {
1404 throw OrthancException(ErrorCode_InternalError); 1402 throw OrthancException(ErrorCode_InternalError);
1403 }
1404 }
1405 else
1406 {
1407 std::list<std::string>::const_iterator currentClass = sopClassUids.begin();
1408 std::list<std::string>::const_iterator currentInstance = sopInstanceUids.begin();
1409
1410 while (currentClass != sopClassUids.end())
1411 {
1412 std::auto_ptr<DcmItem> item(new DcmItem);
1413 if (!item->putAndInsertString(DCM_ReferencedSOPClassUID, currentClass->c_str()).good() ||
1414 !item->putAndInsertString(DCM_ReferencedSOPInstanceUID, currentInstance->c_str()).good() ||
1415 (hasFailureReason &&
1416 !item->putAndInsertUint16(DCM_FailureReason, failureReason).good()) ||
1417 !dataset.insertSequenceItem(tag, item.release()).good())
1418 {
1419 throw OrthancException(ErrorCode_InternalError);
1420 }
1421
1422 ++currentClass;
1423 ++currentInstance;
1424 }
1425
1426 for (size_t i = 0; i < sopClassUids.size(); i++)
1427 {
1405 } 1428 }
1406 } 1429 }
1407 } 1430 }
1408 1431
1409 1432
1410 1433
1411 1434
1412 void DicomUserConnection::ReportStorageCommitment( 1435 void DicomUserConnection::ReportStorageCommitment(
1413 const std::string& transactionUid, 1436 const std::string& transactionUid,
1414 const std::vector<std::string>& successSopClassUids, 1437 const std::list<std::string>& successSopClassUids,
1415 const std::vector<std::string>& successSopInstanceUids, 1438 const std::list<std::string>& successSopInstanceUids,
1416 const std::vector<std::string>& failureSopClassUids, 1439 const std::list<std::string>& failureSopClassUids,
1417 const std::vector<std::string>& failureSopInstanceUids) 1440 const std::list<std::string>& failureSopInstanceUids)
1418 { 1441 {
1419 if (successSopClassUids.size() != successSopInstanceUids.size() || 1442 if (successSopClassUids.size() != successSopInstanceUids.size() ||
1420 failureSopClassUids.size() != failureSopInstanceUids.size()) 1443 failureSopClassUids.size() != failureSopInstanceUids.size())
1421 { 1444 {
1422 throw OrthancException(ErrorCode_ParameterOutOfRange); 1445 throw OrthancException(ErrorCode_ParameterOutOfRange);
1549 1572
1550 1573
1551 1574
1552 void DicomUserConnection::RequestStorageCommitment( 1575 void DicomUserConnection::RequestStorageCommitment(
1553 const std::string& transactionUid, 1576 const std::string& transactionUid,
1554 const std::vector<std::string>& sopClassUids, 1577 const std::list<std::string>& sopClassUids,
1555 const std::vector<std::string>& sopInstanceUids) 1578 const std::list<std::string>& sopInstanceUids)
1556 { 1579 {
1557 if (sopClassUids.size() != sopInstanceUids.size()) 1580 if (sopClassUids.size() != sopInstanceUids.size())
1558 { 1581 {
1559 throw OrthancException(ErrorCode_ParameterOutOfRange); 1582 throw OrthancException(ErrorCode_ParameterOutOfRange);
1560 } 1583 }