comparison OrthancServer/ServerJobs/DicomModalityStoreJob.cpp @ 3862:594263db316a transcoding

DicomModalityStoreJob now uses DicomStoreUserConnection
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 27 Apr 2020 17:28:55 +0200
parents 138d0dde41b5
children 09798f2b985f
comparison
equal deleted inserted replaced
3861:eb8280b30031 3862:594263db316a
33 33
34 #include "../PrecompiledHeadersServer.h" 34 #include "../PrecompiledHeadersServer.h"
35 #include "DicomModalityStoreJob.h" 35 #include "DicomModalityStoreJob.h"
36 36
37 #include "../../Core/Compatibility.h" 37 #include "../../Core/Compatibility.h"
38 #include "../../Core/DicomNetworking/DicomAssociation.h"
38 #include "../../Core/Logging.h" 39 #include "../../Core/Logging.h"
39 #include "../../Core/SerializationToolbox.h" 40 #include "../../Core/SerializationToolbox.h"
40 #include "../ServerContext.h" 41 #include "../ServerContext.h"
41 #include "../StorageCommitmentReports.h" 42 #include "../StorageCommitmentReports.h"
42 43
45 { 46 {
46 void DicomModalityStoreJob::OpenConnection() 47 void DicomModalityStoreJob::OpenConnection()
47 { 48 {
48 if (connection_.get() == NULL) 49 if (connection_.get() == NULL)
49 { 50 {
50 connection_.reset(new DicomUserConnection(localAet_, remote_)); 51 connection_.reset(new DicomStoreUserConnection(localAet_, remote_));
51 } 52 }
52 } 53 }
53 54
54 55
55 bool DicomModalityStoreJob::HandleInstance(const std::string& instance) 56 bool DicomModalityStoreJob::HandleInstance(const std::string& instance)
72 return false; 73 return false;
73 } 74 }
74 75
75 std::string sopClassUid, sopInstanceUid; 76 std::string sopClassUid, sopInstanceUid;
76 77
78 const void* data = dicom.empty() ? NULL : dicom.c_str();
79
77 if (HasMoveOriginator()) 80 if (HasMoveOriginator())
78 { 81 {
79 connection_->Store(sopClassUid, sopInstanceUid, dicom, moveOriginatorAet_, moveOriginatorId_); 82 connection_->Store(sopClassUid, sopInstanceUid, data, dicom.size(),
80 } 83 moveOriginatorAet_, moveOriginatorId_);
81 else 84 }
82 { 85 else
83 connection_->Store(sopClassUid, sopInstanceUid, dicom); 86 {
87 connection_->Store(sopClassUid, sopInstanceUid, data, dicom.size());
84 } 88 }
85 89
86 if (storageCommitment_) 90 if (storageCommitment_)
87 { 91 {
88 sopClassUids_.push_back(sopClassUid); 92 sopClassUids_.push_back(sopClassUid);
94 throw OrthancException(ErrorCode_InternalError); 98 throw OrthancException(ErrorCode_InternalError);
95 } 99 }
96 100
97 if (sopClassUids_.size() == GetInstancesCount()) 101 if (sopClassUids_.size() == GetInstancesCount())
98 { 102 {
103 assert(IsStarted());
104 connection_.reset(NULL);
105
99 const std::string& remoteAet = remote_.GetApplicationEntityTitle(); 106 const std::string& remoteAet = remote_.GetApplicationEntityTitle();
100 107
101 LOG(INFO) << "Sending storage commitment request to modality: " << remoteAet; 108 LOG(INFO) << "Sending storage commitment request to modality: " << remoteAet;
102 109
103 // Create a "pending" storage commitment report BEFORE the 110 // Create a "pending" storage commitment report BEFORE the
104 // actual SCU call in order to avoid race conditions 111 // actual SCU call in order to avoid race conditions
105 context_.GetStorageCommitmentReports().Store( 112 context_.GetStorageCommitmentReports().Store(
106 transactionUid_, new StorageCommitmentReports::Report(remoteAet)); 113 transactionUid_, new StorageCommitmentReports::Report(remoteAet));
107 114
108 assert(IsStarted());
109 OpenConnection();
110
111 std::vector<std::string> a(sopClassUids_.begin(), sopClassUids_.end()); 115 std::vector<std::string> a(sopClassUids_.begin(), sopClassUids_.end());
112 std::vector<std::string> b(sopInstanceUids_.begin(), sopInstanceUids_.end()); 116 std::vector<std::string> b(sopInstanceUids_.begin(), sopInstanceUids_.end());
113 connection_->RequestStorageCommitment(transactionUid_, a, b); 117
118 DicomAssociationParameters parameters(localAet_, remote_);
119 DicomAssociation::RequestStorageCommitment(parameters, transactionUid_, a, b);
114 } 120 }
115 } 121 }
116 122
117 //boost::this_thread::sleep(boost::posix_time::milliseconds(500)); 123 //boost::this_thread::sleep(boost::posix_time::milliseconds(500));
118 124