Mercurial > hg > orthanc
diff OrthancServer/OrthancFindRequestHandler.cpp @ 947:c2c28dd17e87 query-retrieve
integration mainline -> query-retrieve
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 25 Jun 2014 12:09:38 +0200 |
parents | 67e6400fca03 83489fddd8c5 |
children | 111e23bb4904 |
line wrap: on
line diff
--- a/OrthancServer/OrthancFindRequestHandler.cpp Wed Apr 16 16:34:09 2014 +0200 +++ b/OrthancServer/OrthancFindRequestHandler.cpp Wed Jun 25 12:09:38 2014 +0200 @@ -29,6 +29,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. **/ + +#include "PrecompiledHeadersServer.h" #include "OrthancFindRequestHandler.h" #include <glog/logging.h> @@ -37,6 +39,7 @@ #include "../Core/DicomFormat/DicomArray.h" #include "ServerToolbox.h" #include "OrthancInitialization.h" +#include "FromDcmtkBridge.h" namespace Orthanc { @@ -439,7 +442,26 @@ } - void OrthancFindRequestHandler::Handle(DicomFindAnswers& answers, + bool OrthancFindRequestHandler::HasReachedLimit(const DicomFindAnswers& answers, + ResourceType level) const + { + switch (level) + { + case ResourceType_Patient: + case ResourceType_Study: + case ResourceType_Series: + return (maxResults_ != 0 && answers.GetSize() >= maxResults_); + + case ResourceType_Instance: + return (maxInstances_ != 0 && answers.GetSize() >= maxInstances_); + + default: + throw OrthancException(ErrorCode_InternalError); + } + } + + + bool OrthancFindRequestHandler::Handle(DicomFindAnswers& answers, const DicomMap& input, const std::string& callingAETitle) { @@ -450,13 +472,14 @@ ModalityManufacturer manufacturer; { - std::string symbolicName, address; - int port; + RemoteModalityParameters modality; - if (!LookupDicomModalityUsingAETitle(callingAETitle, symbolicName, address, port, manufacturer)) + if (!Configuration::LookupDicomModalityUsingAETitle(modality, callingAETitle)) { throw OrthancException("Unknown modality"); } + + manufacturer = modality.GetManufacturer(); } @@ -576,6 +599,12 @@ if (Matches(info, query)) { + if (HasReachedLimit(answers, level)) + { + // Too many results, stop before recording this new match + return false; + } + AddAnswer(answers, info, query); } } @@ -585,6 +614,8 @@ // This resource has probably been deleted during the find request } } + + return true; // All the matching resources have been returned } }