comparison OrthancServer/Sources/main.cpp @ 4508:8f9090b137f1

Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 11 Feb 2021 11:00:05 +0100
parents 97d103b57cd1
children 350a22c094f2
comparison
equal deleted inserted replaced
4507:b4c58795f3a8 4508:8f9090b137f1
86 virtual void Handle(DcmDataset& dicom, 86 virtual void Handle(DcmDataset& dicom,
87 const std::string& remoteIp, 87 const std::string& remoteIp,
88 const std::string& remoteAet, 88 const std::string& remoteAet,
89 const std::string& calledAet) ORTHANC_OVERRIDE 89 const std::string& calledAet) ORTHANC_OVERRIDE
90 { 90 {
91 std::string dicomFile; 91 std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromDcmDataset(dicom));
92
93 if (!FromDcmtkBridge::SaveToMemoryBuffer(dicomFile, dicom))
94 {
95 throw OrthancException(ErrorCode_InternalError, "Cannot write DICOM file to memory");
96 }
97 92
98 if (dicomFile.size() > 0) 93 if (toStore->GetBufferSize() > 0)
99 { 94 {
100 DicomInstanceToStore toStore; 95 toStore->SetOrigin(DicomInstanceOrigin::FromDicomProtocol
101 toStore.SetOrigin(DicomInstanceOrigin::FromDicomProtocol 96 (remoteIp.c_str(), remoteAet.c_str(), calledAet.c_str()));
102 (remoteIp.c_str(), remoteAet.c_str(), calledAet.c_str()));
103 toStore.SetBuffer(dicomFile.c_str(), dicomFile.size());
104 97
105 std::string id; 98 std::string id;
106 context_.Store(id, toStore, StoreInstanceMode_Default); 99 context_.Store(id, *toStore, StoreInstanceMode_Default);
107 } 100 }
108 } 101 }
109 }; 102 };
110 103
111 104