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