1 /** 2 * Orthanc - A Lightweight, RESTful DICOM Store 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics 4 * Department, University Hospital of Liege, Belgium 5 * Copyright (C) 2017-2021 Osimis S.A., Belgium 6 * 7 * This program is free software: you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as 9 * published by the Free Software Foundation, either version 3 of the 10 * License, or (at your option) any later version. 11 * 12 * In addition, as a special exception, the copyright holders of this 13 * program give permission to link the code of its release with the 14 * OpenSSL project's "OpenSSL" library (or with modified versions of it 15 * that use the same license as the "OpenSSL" library), and distribute 16 * the linked executables. You must obey the GNU General Public License 17 * in all respects for all of the code used other than "OpenSSL". If you 18 * modify file(s) with this exception, you may extend this exception to 19 * your version of the file(s), but you are not obligated to do so. If 20 * you do not wish to do so, delete this exception statement from your 21 * version. If you delete this exception statement from all source files 22 * in the program, then also delete it here. 23 * 24 * This program is distributed in the hope that it will be useful, but 25 * WITHOUT ANY WARRANTY; without even the implied warranty of 26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 27 * General Public License for more details. 28 * 29 * You should have received a copy of the GNU General Public License 30 * along with this program. If not, see <http://www.gnu.org/licenses/>. 31 **/ 32 33 #pragma once 34 35 #include "../../OrthancFramework/Sources/Compatibility.h" // For ORTHANC_OVERRIDE 36 #include "../../OrthancFramework/Sources/DicomNetworking/IGetRequestHandler.h" 37 #include "../../OrthancFramework/Sources/DicomNetworking/RemoteModalityParameters.h" 38 39 #include <dcmtk/dcmnet/dimse.h> 40 41 #include <list> 42 43 class DcmFileFormat; 44 45 namespace Orthanc 46 { 47 class ServerContext; 48 49 class OrthancGetRequestHandler : public IGetRequestHandler 50 { 51 private: 52 ServerContext& context_; 53 std::string localAet_; 54 std::vector<std::string> instances_; 55 size_t position_; 56 std::string originatorAet_; 57 58 unsigned int completedCount_; 59 unsigned int warningCount_; 60 unsigned int failedCount_; 61 std::string failedUIDs_; 62 63 uint32_t timeout_; 64 bool allowTranscoding_; 65 66 bool LookupIdentifiers(std::list<std::string>& publicIds, 67 ResourceType level, 68 const DicomMap& input) const; 69 70 // Returns "false" iff cancel 71 bool PerformGetSubOp(T_ASC_Association *assoc, 72 const std::string& sopClassUid, 73 const std::string& sopInstanceUid, 74 DcmFileFormat* datasetRaw); 75 76 void AddFailedUIDInstance(const std::string& sopInstance); 77 78 public: 79 explicit OrthancGetRequestHandler(ServerContext& context); 80 81 virtual bool Handle(const DicomMap& input, 82 const std::string& originatorIp, 83 const std::string& originatorAet, 84 const std::string& calledAet, 85 uint32_t timeout) ORTHANC_OVERRIDE; 86 87 virtual bool DoNext(T_ASC_Association *assoc) ORTHANC_OVERRIDE; 88 GetSubOperationCount()89 virtual unsigned int GetSubOperationCount() const ORTHANC_OVERRIDE 90 { 91 return static_cast<unsigned int>(instances_.size()); 92 } 93 GetCompletedCount()94 virtual unsigned int GetCompletedCount() const ORTHANC_OVERRIDE 95 { 96 return completedCount_; 97 } 98 GetWarningCount()99 virtual unsigned int GetWarningCount() const ORTHANC_OVERRIDE 100 { 101 return warningCount_; 102 } 103 GetFailedCount()104 virtual unsigned int GetFailedCount() const ORTHANC_OVERRIDE 105 { 106 return failedCount_; 107 } 108 GetFailedUids()109 virtual const std::string& GetFailedUids() const ORTHANC_OVERRIDE 110 { 111 return failedUIDs_; 112 } 113 }; 114 } 115