diff OrthancServer/Sources/OrthancFindRequestHandler.cpp @ 5058:d4e5ca0c9307

Fix the "Never" option of the "StorageAccessOnFind" that was sill accessing files (bug introduced in 1.11.0)
author Alain Mazy <am@osimis.io>
date Wed, 03 Aug 2022 10:49:50 +0200
parents 2cfa50d8eb60
children 0ea402b4d901
line wrap: on
line diff
--- a/OrthancServer/Sources/OrthancFindRequestHandler.cpp	Tue Aug 02 11:38:31 2022 +0200
+++ b/OrthancServer/Sources/OrthancFindRequestHandler.cpp	Wed Aug 03 10:49:50 2022 +0200
@@ -49,7 +49,8 @@
                         const std::list<DicomTag>& sequencesToReturn,
                         const std::string& defaultPrivateCreator,
                         const std::map<uint16_t, std::string>& privateCreators,
-                        const std::string& retrieveAet)
+                        const std::string& retrieveAet,
+                        bool allowStorageAccess)
   {
     ExpandedResource resource;
     std::set<DicomTag> requestedTags;
@@ -58,7 +59,7 @@
     requestedTags.erase(DICOM_TAG_QUERY_RETRIEVE_LEVEL); // this is not part of the answer
 
     // reuse ExpandResource to get missing tags and computed tags (ModalitiesInStudy ...).  This code is therefore shared between C-Find, tools/find, list-resources and QIDO-RS
-    context.ExpandResource(resource, publicId, mainDicomTags, instanceId, dicomAsJson, level, requestedTags, ExpandResourceDbFlags_IncludeMainDicomTags);
+    context.ExpandResource(resource, publicId, mainDicomTags, instanceId, dicomAsJson, level, requestedTags, ExpandResourceDbFlags_IncludeMainDicomTags, allowStorageAccess);
 
     DicomMap result;
 
@@ -246,6 +247,7 @@
     std::string                 defaultPrivateCreator_;       // the private creator to use if the group is not defined in the query itself
     const std::map<uint16_t, std::string>& privateCreators_;  // the private creators defined in the query itself
     std::string                 retrieveAet_;
+    FindStorageAccessMode       findStorageAccessMode_;
 
   public:
     LookupVisitor(DicomFindAnswers&  answers,
@@ -253,14 +255,16 @@
                   ResourceType level,
                   const DicomMap& query,
                   const std::list<DicomTag>& sequencesToReturn,
-                  const std::map<uint16_t, std::string>& privateCreators) :
+                  const std::map<uint16_t, std::string>& privateCreators,
+                  FindStorageAccessMode findStorageAccessMode) :
       answers_(answers),
       context_(context),
       level_(level),
       query_(query),
       queryAsArray_(query),
       sequencesToReturn_(sequencesToReturn),
-      privateCreators_(privateCreators)
+      privateCreators_(privateCreators),
+      findStorageAccessMode_(findStorageAccessMode)
     {
       answers_.SetComplete(false);
 
@@ -308,7 +312,7 @@
                        const Json::Value* dicomAsJson) ORTHANC_OVERRIDE
     {
       AddAnswer(answers_, context_, publicId, instanceId, mainDicomTags, dicomAsJson, level_, queryAsArray_, sequencesToReturn_,
-                defaultPrivateCreator_, privateCreators_, retrieveAet_);
+                defaultPrivateCreator_, privateCreators_, retrieveAet_, IsStorageAccessAllowedForAnswers(findStorageAccessMode_));
     }
   };
 
@@ -478,7 +482,7 @@
     size_t limit = (level == ResourceType_Instance) ? maxInstances_ : maxResults_;
 
 
-    LookupVisitor visitor(answers, context_, level, *filteredInput, sequencesToReturn, privateCreators);
+    LookupVisitor visitor(answers, context_, level, *filteredInput, sequencesToReturn, privateCreators, context_.GetFindStorageAccessMode());
     context_.Apply(visitor, lookup, level, 0 /* "since" is not relevant to C-FIND */, limit);
   }