diff OrthancServer/Sources/OrthancWebDav.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 6831de40acd9
children 350a22c094f2
line wrap: on
line diff
--- a/OrthancServer/Sources/OrthancWebDav.cpp	Thu Feb 11 09:33:48 2021 +0100
+++ b/OrthancServer/Sources/OrthancWebDav.cpp	Thu Feb 11 11:00:05 2021 +0100
@@ -1282,15 +1282,14 @@
           {
             LOG(INFO) << "Uploading DICOM file extracted from a ZIP archive in WebDAV: " << filename;
           
-            DicomInstanceToStore instance;
-            instance.SetOrigin(DicomInstanceOrigin::FromWebDav());
-            instance.SetBuffer(uncompressedFile.c_str(), uncompressedFile.size());
+            std::unique_ptr<DicomInstanceToStore> instance(DicomInstanceToStore::CreateFromBuffer(uncompressedFile));
+            instance->SetOrigin(DicomInstanceOrigin::FromWebDav());
 
             std::string publicId;
 
             try
             {
-              context_.Store(publicId, instance, StoreInstanceMode_Default);
+              context_.Store(publicId, *instance, StoreInstanceMode_Default);
             }
             catch (OrthancException& e)
             {
@@ -1306,14 +1305,13 @@
       }
       else
       {
-        DicomInstanceToStore instance;
-        instance.SetOrigin(DicomInstanceOrigin::FromWebDav());
-        instance.SetBuffer(content.c_str(), content.size());
+        std::unique_ptr<DicomInstanceToStore> instance(DicomInstanceToStore::CreateFromBuffer(content));
+        instance->SetOrigin(DicomInstanceOrigin::FromWebDav());
 
         try
         {
           std::string publicId;
-          StoreStatus status = context_.Store(publicId, instance, StoreInstanceMode_Default);
+          StoreStatus status = context_.Store(publicId, *instance, StoreInstanceMode_Default);
           if (status == StoreStatus_Success ||
               status == StoreStatus_AlreadyStored)
           {