Mercurial > hg > orthanc
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 } |