annotate OrthancServer/Sources/main.cpp @ 5183:5ec3dcdf78b9

renamed HousekeeperThread as MemoryTrimmingThread to avoid confusion with Housekeeper plugin
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sat, 25 Mar 2023 12:07:39 +0100
parents bdec57f3cbf2
children 0ea402b4d901
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
62
a70bb32802ae renaming Server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
2 * Orthanc - A Lightweight, RESTful DICOM Store
1900
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1872
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
1288
6e7e5ed91c2d upgrade to year 2015
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1285
diff changeset
4 * Department, University Hospital of Liege, Belgium
4870
43e613a7756b upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4833
diff changeset
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium
43e613a7756b upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4833
diff changeset
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 *
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * This program is free software: you can redistribute it and/or
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * modify it under the terms of the GNU General Public License as
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * published by the Free Software Foundation, either version 3 of the
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * License, or (at your option) any later version.
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 *
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful, but
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * General Public License for more details.
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 *
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 **/
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
831
84513f2ee1f3 pch for unit tests and server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 824
diff changeset
23 #include "PrecompiledHeadersServer.h"
750
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 730
diff changeset
24 #include "OrthancRestApi/OrthancRestApi.h"
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25
4045
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
26 #include "../../OrthancFramework/Sources/Compatibility.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
27 #include "../../OrthancFramework/Sources/DicomFormat/DicomArray.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
28 #include "../../OrthancFramework/Sources/DicomNetworking/DicomAssociationParameters.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
29 #include "../../OrthancFramework/Sources/DicomNetworking/DicomServer.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
30 #include "../../OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.h"
4399
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
31 #include "../../OrthancFramework/Sources/FileStorage/MemoryStorageArea.h"
4045
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
32 #include "../../OrthancFramework/Sources/HttpServer/FilesystemHttpHandler.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
33 #include "../../OrthancFramework/Sources/HttpServer/HttpServer.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
34 #include "../../OrthancFramework/Sources/Logging.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
35 #include "../../OrthancFramework/Sources/Lua/LuaFunctionCall.h"
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
36 #include "../Plugins/Engine/OrthancPlugins.h"
4399
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
37 #include "Database/SQLiteDatabaseWrapper.h"
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4026
diff changeset
38 #include "EmbeddedResourceHttpHandler.h"
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
39 #include "OrthancConfiguration.h"
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
40 #include "OrthancFindRequestHandler.h"
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4026
diff changeset
41 #include "OrthancGetRequestHandler.h"
62
a70bb32802ae renaming Server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
42 #include "OrthancInitialization.h"
619
70d0f27e5bd3 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 618
diff changeset
43 #include "OrthancMoveRequestHandler.h"
4240
799c0c527ced reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4239
diff changeset
44 #include "OrthancWebDav.h"
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
45 #include "ServerContext.h"
5061
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
46 #include "ServerEnumerations.h"
3636
bce6ee64f2a4 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3635
diff changeset
47 #include "ServerJobs/StorageCommitmentScpJob.h"
730
309e686b41e7 better logging about nonexistent tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 725
diff changeset
48 #include "ServerToolbox.h"
3736
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
49 #include "StorageCommitmentReports.h"
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50
4240
799c0c527ced reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4239
diff changeset
51 #include <boost/algorithm/string/predicate.hpp>
4230
b313a0001893 WebDavStorage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4228
diff changeset
52
b313a0001893 WebDavStorage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4228
diff changeset
53
62
a70bb32802ae renaming Server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
54 using namespace Orthanc;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56
4439
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
57 static const char* const KEY_DICOM_TLS_PRIVATE_KEY = "DicomTlsPrivateKey";
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
58 static const char* const KEY_DICOM_TLS_ENABLED = "DicomTlsEnabled";
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
59 static const char* const KEY_DICOM_TLS_CERTIFICATE = "DicomTlsCertificate";
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
60 static const char* const KEY_DICOM_TLS_TRUSTED_CERTIFICATES = "DicomTlsTrustedCertificates";
4451
f4dbdb2dcba6 new configuration option "MaximumPduLength" to tune the maximum PDU length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4442
diff changeset
61 static const char* const KEY_MAXIMUM_PDU_LENGTH = "MaximumPduLength";
4656
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
62 static const char* const KEY_DICOM_TLS_REMOTE_CERTIFICATE_REQUIRED = "DicomTlsRemoteCertificateRequired";
4439
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
63
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
64
613
60d90e48e809 query/retrieve
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 565
diff changeset
65 class OrthancStoreRequestHandler : public IStoreRequestHandler
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 {
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67 private:
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
68 ServerContext& context_;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 public:
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
71 explicit OrthancStoreRequestHandler(ServerContext& context) :
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
72 context_(context)
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73 {
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75
1573
3309878b3e16 more information about the origin of requests submitted to the DICOM handlers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1572
diff changeset
76
4796
94616af363ec added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents: 4793
diff changeset
77 virtual uint16_t Handle(DcmDataset& dicom,
94616af363ec added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents: 4793
diff changeset
78 const std::string& remoteIp,
94616af363ec added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents: 4793
diff changeset
79 const std::string& remoteAet,
94616af363ec added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents: 4793
diff changeset
80 const std::string& calledAet) ORTHANC_OVERRIDE
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 {
4508
8f9090b137f1 Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4505
diff changeset
82 std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromDcmDataset(dicom));
4502
e3e759cbd19c refactoring IStoreRequestHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4482
diff changeset
83
4508
8f9090b137f1 Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4505
diff changeset
84 if (toStore->GetBufferSize() > 0)
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 {
4508
8f9090b137f1 Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4505
diff changeset
86 toStore->SetOrigin(DicomInstanceOrigin::FromDicomProtocol
8f9090b137f1 Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4505
diff changeset
87 (remoteIp.c_str(), remoteAet.c_str(), calledAet.c_str()));
1005
84b6d7bca6db refactoring of ServerContext::Store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 996
diff changeset
88
84b6d7bca6db refactoring of ServerContext::Store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 996
diff changeset
89 std::string id;
4796
94616af363ec added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents: 4793
diff changeset
90 ServerContext::StoreResult result = context_.Store(id, *toStore, StoreInstanceMode_Default);
94616af363ec added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents: 4793
diff changeset
91 return result.GetCStoreStatusCode();
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 }
4796
94616af363ec added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents: 4793
diff changeset
93
94616af363ec added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
Alain Mazy <am@osimis.io>
parents: 4793
diff changeset
94 return STATUS_STORE_Error_CannotUnderstand;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 };
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98
1797
23722a191e4e worklists are working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1796
diff changeset
99
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
100 class OrthancStorageCommitmentRequestHandler : public IStorageCommitmentRequestHandler
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
101 {
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
102 private:
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
103 ServerContext& context_;
3606
33ba63637d48 DicomUserConnection: sending N-EVENT-REPORT-RQ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3604
diff changeset
104
3604
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
105 public:
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
106 explicit OrthancStorageCommitmentRequestHandler(ServerContext& context) :
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
107 context_(context)
3604
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
108 {
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
109 }
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
110
3613
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
111 virtual void HandleRequest(const std::string& transactionUid,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
112 const std::vector<std::string>& referencedSopClassUids,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
113 const std::vector<std::string>& referencedSopInstanceUids,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
114 const std::string& remoteIp,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
115 const std::string& remoteAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
116 const std::string& calledAet) ORTHANC_OVERRIDE
3604
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
117 {
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
118 if (referencedSopClassUids.size() != referencedSopInstanceUids.size())
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
119 {
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
120 throw OrthancException(ErrorCode_InternalError);
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121 }
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
122
3767
c6658187e4b1 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3736
diff changeset
123 std::unique_ptr<StorageCommitmentScpJob> job(
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
124 new StorageCommitmentScpJob(context_, transactionUid, remoteAet, calledAet));
3606
33ba63637d48 DicomUserConnection: sending N-EVENT-REPORT-RQ
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3604
diff changeset
125
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
126 for (size_t i = 0; i < referencedSopClassUids.size(); i++)
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
127 {
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
128 job->AddInstance(referencedSopClassUids[i], referencedSopInstanceUids[i]);
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
129 }
3613
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
130
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
131 job->MarkAsReady();
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
132
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
133 context_.GetJobsEngine().GetRegistry().Submit(job.release(), 0 /* default priority */);
3613
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
134 }
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
135
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
136 virtual void HandleReport(const std::string& transactionUid,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
137 const std::vector<std::string>& successSopClassUids,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
138 const std::vector<std::string>& successSopInstanceUids,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
139 const std::vector<std::string>& failedSopClassUids,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
140 const std::vector<std::string>& failedSopInstanceUids,
3736
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
141 const std::vector<StorageCommitmentFailureReason>& failureReasons,
3613
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
142 const std::string& remoteIp,
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
143 const std::string& remoteAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
144 const std::string& calledAet) ORTHANC_OVERRIDE
3613
c1e2b91c2ab4 all the abstractions for storage commitment are available
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3608
diff changeset
145 {
3736
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
146 if (successSopClassUids.size() != successSopInstanceUids.size() ||
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
147 failedSopClassUids.size() != failedSopInstanceUids.size() ||
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
148 failedSopClassUids.size() != failureReasons.size())
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
149 {
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
150 throw OrthancException(ErrorCode_InternalError);
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
151 }
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
152
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
153 std::unique_ptr<StorageCommitmentReports::Report> report(
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
154 new StorageCommitmentReports::Report(remoteAet));
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
155
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
156 for (size_t i = 0; i < successSopClassUids.size(); i++)
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
157 {
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
158 report->AddSuccess(successSopClassUids[i], successSopInstanceUids[i]);
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
159 }
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
160
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
161 for (size_t i = 0; i < failedSopClassUids.size(); i++)
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
162 {
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
163 report->AddFailure(failedSopClassUids[i], failedSopInstanceUids[i], failureReasons[i]);
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
164 }
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
165
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
166 report->MarkAsComplete();
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
167
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
168 context_.GetStorageCommitmentReports().Store(transactionUid, report.release());
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170 };
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172
1797
23722a191e4e worklists are working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1796
diff changeset
173
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
174 class ModalitiesFromConfiguration : public DicomServer::IRemoteModalities
2381
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
175 {
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
176 public:
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
177 virtual bool IsSameAETitle(const std::string& aet1,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
178 const std::string& aet2) ORTHANC_OVERRIDE
2381
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
179 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
180 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
181 return lock.GetConfiguration().IsSameAETitle(aet1, aet2);
2381
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
182 }
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
183
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
184 virtual bool LookupAETitle(RemoteModalityParameters& modality,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
185 const std::string& aet) ORTHANC_OVERRIDE
2381
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
186 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
187 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
188 return lock.GetConfiguration().LookupDicomModalityUsingAETitle(modality, aet);
2381
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
189 }
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
190 };
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
191
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
192
387
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
193 class MyDicomServerFactory :
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
194 public IStoreRequestHandlerFactory,
1800
30e97a1f4093 callback for handling worklists with plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1799
diff changeset
195 public IFindRequestHandlerFactory,
3818
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
196 public IMoveRequestHandlerFactory,
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
197 public IGetRequestHandlerFactory,
3604
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
198 public IStorageCommitmentRequestHandlerFactory
387
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
199 {
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
200 private:
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
201 ServerContext& context_;
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
202
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
203 public:
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
204 explicit MyDicomServerFactory(ServerContext& context) : context_(context)
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 {
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
206 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
207
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
208 virtual IStoreRequestHandler* ConstructStoreRequestHandler() ORTHANC_OVERRIDE
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209 {
613
60d90e48e809 query/retrieve
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 565
diff changeset
210 return new OrthancStoreRequestHandler(context_);
387
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
211 }
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
212
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
213 virtual IFindRequestHandler* ConstructFindRequestHandler() ORTHANC_OVERRIDE
387
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
214 {
3712
2a170a8f1faf replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3643
diff changeset
215 std::unique_ptr<OrthancFindRequestHandler> result(new OrthancFindRequestHandler(context_));
941
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
216
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
217 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
218 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
219 result->SetMaxResults(lock.GetConfiguration().GetUnsignedIntegerParameter("LimitFindResults", 0));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
220 result->SetMaxInstances(lock.GetConfiguration().GetUnsignedIntegerParameter("LimitFindInstances", 0));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
221 }
941
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
222
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
223 if (result->GetMaxResults() == 0)
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
224 {
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
225 LOG(INFO) << "No limit on the number of C-FIND results at the Patient, Study and Series levels";
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
226 }
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
227 else
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
228 {
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
229 LOG(INFO) << "Maximum " << result->GetMaxResults()
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
230 << " results for C-FIND queries at the Patient, Study and Series levels";
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
231 }
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
232
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
233 if (result->GetMaxInstances() == 0)
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
234 {
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
235 LOG(INFO) << "No limit on the number of C-FIND results at the Instance level";
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
236 }
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
237 else
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
238 {
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
239 LOG(INFO) << "Maximum " << result->GetMaxInstances()
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
240 << " instances will be returned for C-FIND queries at the Instance level";
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
241 }
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
242
83489fddd8c5 Options to limit the number of results for an incoming C-FIND query
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
243 return result.release();
387
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
244 }
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
245
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
246 virtual IMoveRequestHandler* ConstructMoveRequestHandler() ORTHANC_OVERRIDE
387
ff647eedfbe1 enabling of Find/Move commands
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 376
diff changeset
247 {
613
60d90e48e809 query/retrieve
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 565
diff changeset
248 return new OrthancMoveRequestHandler(context_);
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
249 }
3818
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
250
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
251 virtual IGetRequestHandler* ConstructGetRequestHandler() ORTHANC_OVERRIDE
3818
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
252 {
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
253 return new OrthancGetRequestHandler(context_);
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
254 }
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
255
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
256 virtual IStorageCommitmentRequestHandler* ConstructStorageCommitmentRequestHandler() ORTHANC_OVERRIDE
3604
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
257 {
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
258 return new OrthancStorageCommitmentRequestHandler(context_);
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
259 }
3818
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
260
3604
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
261
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
262 void Done()
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
263 {
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
264 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
265 };
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
266
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
267
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
268 class OrthancApplicationEntityFilter : public IApplicationEntityFilter
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
269 {
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
270 private:
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
271 ServerContext& context_;
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
272 bool alwaysAllowEcho_;
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
273 bool alwaysAllowFind_; // New in Orthanc 1.9.0
4888
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
274 bool alwaysAllowFindWorklist_; // New in Orthanc 1.10.0
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
275 bool alwaysAllowGet_; // New in Orthanc 1.9.0
4772
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
276 bool alwaysAllowMove_; // New in Orthanc 1.9.7
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
277 bool alwaysAllowStore_;
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
278
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
279 public:
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
280 explicit OrthancApplicationEntityFilter(ServerContext& context) :
2353
2421c137c304 reject connections earlier if DicomAlwaysAllowStore == false
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2352
diff changeset
281 context_(context)
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
282 {
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
283 {
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
284 OrthancConfiguration::ReaderLock lock;
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
285 alwaysAllowEcho_ = lock.GetConfiguration().GetBooleanParameter("DicomAlwaysAllowEcho", true);
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
286 alwaysAllowFind_ = lock.GetConfiguration().GetBooleanParameter("DicomAlwaysAllowFind", false);
4888
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
287 alwaysAllowFindWorklist_ = lock.GetConfiguration().GetBooleanParameter("DicomAlwaysAllowFindWorklist", false);
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
288 alwaysAllowGet_ = lock.GetConfiguration().GetBooleanParameter("DicomAlwaysAllowGet", false);
4772
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
289 alwaysAllowMove_ = lock.GetConfiguration().GetBooleanParameter("DicomAlwaysAllowMove", false);
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
290 alwaysAllowStore_ = lock.GetConfiguration().GetBooleanParameter("DicomAlwaysAllowStore", true);
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
291 }
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
292
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
293 if (alwaysAllowFind_)
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
294 {
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
295 LOG(WARNING) << "Security risk in DICOM SCP: C-FIND requests are always allowed, even from unknown modalities";
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
296 }
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
297
4888
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
298 if (alwaysAllowFindWorklist_)
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
299 {
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
300 LOG(WARNING) << "Security risk in DICOM SCP: C-FIND requests for worklists are always allowed, even from unknown modalities";
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
301 }
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
302
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
303 if (alwaysAllowGet_)
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
304 {
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
305 LOG(WARNING) << "Security risk in DICOM SCP: C-GET requests are always allowed, even from unknown modalities";
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
306 }
4772
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
307
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
308 if (alwaysAllowMove_)
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
309 {
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
310 LOG(WARNING) << "Security risk in DICOM SCP: C-MOOVE requests are always allowed, even from unknown modalities";
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
311 }
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
312 }
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
313
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
314 virtual bool IsAllowedConnection(const std::string& remoteIp,
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
315 const std::string& remoteAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
316 const std::string& calledAet) ORTHANC_OVERRIDE
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
317 {
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
318 LOG(INFO) << "Incoming connection from AET " << remoteAet
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
319 << " on IP " << remoteIp << ", calling AET " << calledAet;
2353
2421c137c304 reject connections earlier if DicomAlwaysAllowStore == false
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2352
diff changeset
320
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
321 if (alwaysAllowEcho_ ||
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
322 alwaysAllowFind_ ||
4888
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
323 alwaysAllowFindWorklist_ ||
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
324 alwaysAllowGet_ ||
4772
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
325 alwaysAllowMove_ ||
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
326 alwaysAllowStore_)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
327 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
328 return true;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
329 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
330 else
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
331 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
332 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
333 return lock.GetConfiguration().IsKnownAETitle(remoteAet, remoteIp);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
334 }
620
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
335 }
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
336
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
337 static void ReportDisallowedCommand(const std::string& remoteIp,
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
338 const std::string& remoteAet,
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
339 DicomRequestType type)
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
340 {
4888
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
341 LOG(WARNING) << "DICOM authorization rejected for AET " << remoteAet
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
342 << " on IP " << remoteIp << ": The DICOM command "
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
343 << EnumerationToString(type) << " is not allowed for this modality "
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
344 << "according to configuration option \"DicomModalities\"";
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
345 }
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
346
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
347
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
348 virtual bool IsAllowedRequest(const std::string& remoteIp,
1799
4f01c9d73f02 calledAet made available to all the handlers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1797
diff changeset
349 const std::string& remoteAet,
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
350 const std::string& calledAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
351 DicomRequestType type) ORTHANC_OVERRIDE
620
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
352 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
353 LOG(INFO) << "Incoming " << EnumerationToString(type) << " request from AET "
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
354 << remoteAet << " on IP " << remoteIp << ", calling AET " << calledAet;
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
355
2375
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
356 if (type == DicomRequestType_Echo &&
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
357 alwaysAllowEcho_)
620
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
358 {
2375
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
359 // Incoming C-Echo requests are always accepted, even from unknown AET
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
360 return true;
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
361 }
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
362 else if (type == DicomRequestType_Find &&
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
363 alwaysAllowFind_)
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
364 {
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
365 // Incoming C-Find requests are always accepted, even from unknown AET
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
366 return true;
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
367 }
4888
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
368 else if (type == DicomRequestType_FindWorklist &&
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
369 alwaysAllowFindWorklist_)
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
370 {
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
371 // Incoming C-Find requests for worklists are always accepted, even from unknown AET
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
372 return true;
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
373 }
2375
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
374 else if (type == DicomRequestType_Store &&
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
375 alwaysAllowStore_)
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
376 {
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
377 // Incoming C-Store requests are always accepted, even from unknown AET
620
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
378 return true;
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
379 }
4482
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
380 else if (type == DicomRequestType_Get &&
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
381 alwaysAllowGet_)
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
382 {
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
383 // Incoming C-Get requests are always accepted, even from unknown AET
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
384 return true;
8efeaba1b7f9 new configuration options: "DicomAlwaysAllowFind" and "DicomAlwaysAllowGet"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4473
diff changeset
385 }
4772
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
386 else if (type == DicomRequestType_Move &&
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
387 alwaysAllowMove_)
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
388 {
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
389 // Incoming C-Move requests are always accepted, even from unknown AET
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
390 return true;
ec8aef42a7db new configuration option "DicomAlwaysAllowMove" to disable verification of the remote modality in C-MOVE SCP
Alain Mazy <am@osimis.io>
parents: 4656
diff changeset
391 }
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
392 else
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
393 {
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
394 bool checkIp;
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
395 std::list<RemoteModalityParameters> modalities;
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
396
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
397 {
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
398 OrthancConfiguration::ReaderLock lock;
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
399 lock.GetConfiguration().LookupDicomModalitiesUsingAETitle(modalities, remoteAet);
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
400 checkIp = lock.GetConfiguration().GetBooleanParameter("DicomCheckModalityHost", false);
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
401 }
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
402
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
403 if (modalities.empty())
2872
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
404 {
4888
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
405 LOG(WARNING) << "DICOM authorization rejected for AET " << remoteAet
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
406 << " on IP " << remoteIp << ": This AET is not listed in "
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
407 << "configuration option \"DicomModalities\"";
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
408 return false;
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
409 }
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
410 else if (modalities.size() == 1)
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
411 {
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
412 // DicomCheckModalityHost is true: check if the IP match the configured IP
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
413 if (checkIp &&
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
414 remoteIp != modalities.front().GetHost())
4182
1c9c2c41c015 When checking DICOM allowed methods, if there are multiple modalities with the same AET, differentiate them from the calling IP
Alain Mazy <alain@mazy.be>
parents: 4143
diff changeset
415 {
4888
8523078f3f4b added new configuration to authorize C-Find for worklist independently from other C-Find
Alain Mazy <am@osimis.io>
parents: 4870
diff changeset
416 LOG(WARNING) << "DICOM authorization rejected for AET " << remoteAet
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
417 << " on IP " << remoteIp << ": Its IP address should be "
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
418 << modalities.front().GetHost()
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
419 << " according to configuration option \"DicomModalities\"";
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
420 return false;
4182
1c9c2c41c015 When checking DICOM allowed methods, if there are multiple modalities with the same AET, differentiate them from the calling IP
Alain Mazy <alain@mazy.be>
parents: 4143
diff changeset
421 }
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
422 else if (modalities.front().IsRequestAllowed(type))
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
423 {
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
424 return true;
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
425 }
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
426 else
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
427 {
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
428 ReportDisallowedCommand(remoteIp, remoteAet, type);
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
429 return false;
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
430 }
2872
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
431 }
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
432 else
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
433 {
4942
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
434 // If there are multiple modalities with the same AET, consider the one matching this IP
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
435 // or check if the operation is allowed for all modalities
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
436 bool allowedForAllModalities = true;
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
437
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
438 for (std::list<RemoteModalityParameters>::const_iterator
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
439 it = modalities.begin(); it != modalities.end(); ++it)
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
440 {
4942
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
441 if (it->IsRequestAllowed(type))
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
442 {
4942
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
443 if (checkIp &&
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
444 it->GetHost() == remoteIp)
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
445 {
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
446 return true;
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
447 }
4942
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
448 }
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
449 else
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
450 {
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
451 allowedForAllModalities = false;
4646
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
452 }
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
453 }
4beebbb3636e Fix regression in the handling of "DicomCheckModalityHost" configuration option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4640
diff changeset
454
4942
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
455 if (allowedForAllModalities)
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
456 {
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
457 return true;
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
458 }
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
459 else
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
460 {
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
461 ReportDisallowedCommand(remoteIp, remoteAet, type);
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
462
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
463 if (checkIp)
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
464 {
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
465 LOG(WARNING) << "DICOM authorization rejected for AET " << remoteAet
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
466 << " on IP " << remoteIp << ": " << modalities.size()
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
467 << " modalites found with this AET in configuration option "
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
468 << "\"DicomModalities\", but the operation is allowed for none "
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
469 << "of them matching the IP";
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
470 }
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
471 else
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
472 {
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
473 LOG(WARNING) << "DICOM authorization rejected for AET " << remoteAet
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
474 << " on IP " << remoteIp << ": " << modalities.size()
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
475 << " modalites found with this AET in configuration option "
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
476 << "\"DicomModalities\", but the operation is not allowed for"
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
477 << "all of them";
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
478 }
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
479 return false;
bd7ad1cb40b6 Improved DICOM authorization checks when multiple modalities are declared with the same AET
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
480 }
2872
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
481 }
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
482 }
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
483 }
1163
3db41779d8f9 abstraction to allow/prevent transfer syntaxes on AET basis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1135
diff changeset
484
4468
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
485
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
486 virtual void GetAcceptedTransferSyntaxes(std::set<DicomTransferSyntax>& target,
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
487 const std::string& remoteIp,
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
488 const std::string& remoteAet,
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
489 const std::string& calledAet) ORTHANC_OVERRIDE
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
490 {
4473
68f52897c119 new URIs: /tools/accepted-transfer-syntaxes and /tools/unknown-sop-class-accepted to replace Lua callbacks for transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4472
diff changeset
491 context_.GetAcceptedTransferSyntaxes(target);
4468
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
492 }
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
493
9c070a34de18 IApplicationEntityFilter::GetAcceptedTransferSyntaxes()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4458
diff changeset
494
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
495 virtual bool IsUnknownSopClassAccepted(const std::string& remoteIp,
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
496 const std::string& remoteAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
497 const std::string& calledAet) ORTHANC_OVERRIDE
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
498 {
4473
68f52897c119 new URIs: /tools/accepted-transfer-syntaxes and /tools/unknown-sop-class-accepted to replace Lua callbacks for transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4472
diff changeset
499 return context_.IsUnknownSopClassAccepted();
1163
3db41779d8f9 abstraction to allow/prevent transfer syntaxes on AET basis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1135
diff changeset
500 }
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
501 };
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
502
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
503
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
504 class MyIncomingHttpRequestFilter : public IIncomingHttpRequestFilter
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
505 {
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
506 private:
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
507 ServerContext& context_;
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
508 OrthancPlugins* plugins_;
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
509
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
510 public:
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
511 MyIncomingHttpRequestFilter(ServerContext& context,
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
512 OrthancPlugins* plugins) :
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
513 context_(context),
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
514 plugins_(plugins)
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
515 {
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
516 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
517
4343
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
518 virtual bool IsValidBearerToken(const std::string& token) ORTHANC_OVERRIDE
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
519 {
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
520 #if ORTHANC_ENABLE_PLUGINS == 1
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
521 return (plugins_ != NULL &&
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
522 plugins_->IsValidAuthorizationToken(token));
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
523 #else
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
524 return false;
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
525 #endif
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
526 }
e1e918e790e8 New function in the SDK: OrthancPluginGenerateRestApiAuthorizationToken()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4330
diff changeset
527
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
528 virtual bool IsAllowed(HttpMethod method,
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
529 const char* uri,
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
530 const char* ip,
1959
45c4387a379c Access to the HTTP headers in the "IncomingHttpRequestFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1949
diff changeset
531 const char* username,
4330
a01b1c9cbef4 moving generic type definitions from IHttpHandler to HttpToolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4291
diff changeset
532 const HttpToolbox::Arguments& httpHeaders,
a01b1c9cbef4 moving generic type definitions from IHttpHandler to HttpToolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4291
diff changeset
533 const HttpToolbox::GetArguments& getArguments) ORTHANC_OVERRIDE
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
534 {
3048
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
535 #if ORTHANC_ENABLE_PLUGINS == 1
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
536 if (plugins_ != NULL &&
2268
ce5c13b95dac New function: OrthancPluginRegisterIncomingHttpRequestFilter2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2246
diff changeset
537 !plugins_->IsAllowed(method, uri, ip, username, httpHeaders, getArguments))
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
538 {
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
539 return false;
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
540 }
3048
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
541 #endif
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
542
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
543 static const char* HTTP_FILTER = "IncomingHttpRequestFilter";
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
544
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
545 LuaScripting::Lock lock(context_.GetLuaScripting());
996
cf52f3bcb2b3 clarification of Lua classes wrt multithreading
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 941
diff changeset
546
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
547 // Test if the instance must be filtered out
2616
2f3007bf0708 event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2612
diff changeset
548 if (lock.GetLua().IsExistingFunction(HTTP_FILTER))
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
549 {
2616
2f3007bf0708 event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2612
diff changeset
550 LuaFunctionCall call(lock.GetLua(), HTTP_FILTER);
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
551
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
552 switch (method)
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
553 {
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
554 case HttpMethod_Get:
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
555 call.PushString("GET");
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
556 break;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
557
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
558 case HttpMethod_Put:
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
559 call.PushString("PUT");
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
560 break;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
561
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
562 case HttpMethod_Post:
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
563 call.PushString("POST");
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
564 break;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
565
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
566 case HttpMethod_Delete:
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
567 call.PushString("DELETE");
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
568 break;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
569
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
570 default:
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
571 return true;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
572 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
573
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
574 call.PushString(uri);
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
575 call.PushString(ip);
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
576 call.PushString(username);
1959
45c4387a379c Access to the HTTP headers in the "IncomingHttpRequestFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1949
diff changeset
577 call.PushStringMap(httpHeaders);
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
578
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
579 if (!call.ExecutePredicate())
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
580 {
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
581 LOG(INFO) << "An incoming HTTP request has been discarded by the filter";
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
582 return false;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
583 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
584 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
585
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
586 return true;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
587 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
588 };
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
589
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
590
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
591
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
592 class MyHttpExceptionFormatter : public IHttpExceptionFormatter
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
593 {
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
594 private:
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
595 bool describeErrors_;
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
596 OrthancPlugins* plugins_;
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
597
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
598 public:
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
599 MyHttpExceptionFormatter(bool describeErrors,
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
600 OrthancPlugins* plugins) :
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
601 describeErrors_(describeErrors),
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
602 plugins_(plugins)
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
603 {
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
604 }
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
605
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
606 virtual void Format(HttpOutput& output,
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
607 const OrthancException& exception,
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
608 HttpMethod method,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
609 const char* uri) ORTHANC_OVERRIDE
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
610 {
1650
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
611 {
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
612 bool isPlugin = false;
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
613
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
614 #if ORTHANC_ENABLE_PLUGINS == 1
1650
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
615 if (plugins_ != NULL)
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
616 {
1651
2e692c83e2f3 improved custom error login
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1650
diff changeset
617 plugins_->GetErrorDictionary().LogError(exception.GetErrorCode(), true);
1650
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
618 isPlugin = true;
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
619 }
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
620 #endif
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
621
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
622 if (!isPlugin)
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
623 {
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
624 LOG(ERROR) << "Exception in the HTTP handler: " << exception.What();
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
625 }
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
626 }
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
627
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
628 Json::Value message = Json::objectValue;
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
629 ErrorCode errorCode = exception.GetErrorCode();
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
630 HttpStatus httpStatus = exception.GetHttpStatus();
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
631
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
632 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
633 bool isPlugin = false;
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
634
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
635 #if ORTHANC_ENABLE_PLUGINS == 1
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
636 if (plugins_ != NULL &&
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
637 plugins_->GetErrorDictionary().Format(message, httpStatus, exception))
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
638 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
639 errorCode = ErrorCode_Plugin;
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
640 isPlugin = true;
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
641 }
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
642 #endif
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
643
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
644 if (!isPlugin)
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
645 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
646 message["Message"] = exception.What();
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
647 }
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
648 }
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
649
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
650 if (!describeErrors_)
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
651 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
652 output.SendStatus(httpStatus);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
653 }
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
654 else
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
655 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
656 message["Method"] = EnumerationToString(method);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
657 message["Uri"] = uri;
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
658 message["HttpError"] = EnumerationToString(httpStatus);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
659 message["HttpStatus"] = httpStatus;
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
660 message["OrthancError"] = EnumerationToString(errorCode);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
661 message["OrthancStatus"] = errorCode;
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
662
2952
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
663 if (exception.HasDetails())
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
664 {
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
665 message["Details"] = exception.GetDetails();
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
666 }
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
667
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
668 std::string info = message.toStyledString();
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
669 output.SendStatus(httpStatus, info);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
670 }
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
671 }
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
672 };
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
673
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
674
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
675 static void PrintHelp(const char* path)
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
676 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
677 std::cout
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
678 << "Usage: " << path << " [OPTION]... [CONFIGURATION]" << std::endl
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
679 << "Orthanc, lightweight, RESTful DICOM server for healthcare and medical research." << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
680 << std::endl
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
681 << "The \"CONFIGURATION\" argument can be a single file or a directory. In the " << std::endl
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
682 << "case of a directory, all the JSON files it contains will be merged. " << std::endl
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
683 << "If no configuration path is given on the command line, a set of default " << std::endl
4290
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
684 << "parameters is used. Please refer to the Orthanc Book for the full " << std::endl
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
685 << "instructions about how to use Orthanc <http://book.orthanc-server.com/>." << std::endl
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
686 << std::endl
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
687 << "Pay attention to the fact that the order of the options is important." << std::endl
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
688 << "Options are read left to right. In particular, options such as \"--verbose\" can " << std::endl
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
689 << "reset the value of other log-related options that were read before." << std::endl
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
690 << std::endl
4458
e4dae17035b9 fix ParsedDicomCache for emscripten
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4451
diff changeset
691 << "The recommended set of options to debug DICOM communications is " << std::endl
4290
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
692 << "\"--verbose --trace-dicom --logfile=dicom.log\"" << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
693 << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
694 << "Command-line options:" << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
695 << " --help\t\tdisplay this help and exit" << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
696 << " --logdir=[dir]\tdirectory where to store the log files" << std::endl
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
697 << "\t\t\t(by default, the log is dumped to stderr)" << std::endl
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
698 << " --logfile=[file]\tfile where to store the log of Orthanc" << std::endl
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
699 << "\t\t\t(by default, the log is dumped to stderr)" << std::endl
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
700 << " --config=[file]\tcreate a sample configuration file and exit" << std::endl
4290
fa5c5d3c8e75 improving manpage
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4280
diff changeset
701 << "\t\t\t(if \"file\" is \"-\", dumps to stdout)" << std::endl
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
702 << " --errors\t\tprint the supported error codes and exit" << std::endl
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
703 << " --verbose\t\tbe verbose in logs" << std::endl
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
704 << " --trace\t\thighest verbosity in logs (for debug)" << std::endl
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
705 << " --upgrade\t\tallow Orthanc to upgrade the version of the" << std::endl
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
706 << "\t\t\tdatabase (beware that the database will become" << std::endl
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
707 << "\t\t\tincompatible with former versions of Orthanc)" << std::endl
4399
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
708 << " --no-jobs\t\tdon't restart the jobs that were stored during" << std::endl
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
709 << "\t\t\tthe last execution of Orthanc" << std::endl
4399
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
710 << " --openapi=[file]\twrite the OpenAPI documentation and exit" << std::endl
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
711 << "\t\t\t(if \"file\" is \"-\", dumps to stdout)" << std::endl
4412
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
712 << " --cheatsheet=[file]\twrite the cheat sheet of REST API as CSV" << std::endl
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
713 << "\t\t\tand exit (if \"file\" is \"-\", dumps to stdout)" << std::endl
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
714 << " --version\t\toutput version information and exit" << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
715 << std::endl
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
716 << "Fine-tuning of log categories:" << std::endl;
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
717
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
718 for (size_t i = 0; i < Logging::GetCategoriesCount(); i++)
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
719 {
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
720 const std::string name = Logging::GetCategoryName(i);
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
721 std::cout << " --verbose-" << name
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
722 << "\tbe verbose in logs of category \"" << name << "\"" << std::endl;
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
723 std::cout << " --trace-" << name
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
724 << "\tuse highest verbosity for logs of category \"" << name << "\"" << std::endl;
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
725 }
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
726
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
727 std::cout
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
728 << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
729 << "Exit status:" << std::endl
4291
7e05ad57d7a1 fix formatting for help2man
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4290
diff changeset
730 << " 0\tif success," << std::endl
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
731 #if defined(_WIN32)
4291
7e05ad57d7a1 fix formatting for help2man
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4290
diff changeset
732 << " != 0\tif error (use the --errors option to get the list of possible errors)." << std::endl
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
733 #else
4291
7e05ad57d7a1 fix formatting for help2man
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4290
diff changeset
734 << " -1\tif error (have a look at the logs)." << std::endl
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
735 #endif
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
736 << std::endl;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
737 }
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
738
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
739
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
740 static void PrintVersion(const char* path)
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
741 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
742 std::cout
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
743 << path << " " << ORTHANC_VERSION << std::endl
1900
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1872
diff changeset
744 << "Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics Department, University Hospital of Liege (Belgium)" << std::endl
4870
43e613a7756b upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4833
diff changeset
745 << "Copyright (C) 2017-2022 Osimis S.A. (Belgium)" << std::endl
43e613a7756b upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4833
diff changeset
746 << "Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain (Belgium)" << std::endl
4865
9adb28193a8a removed openssl exception from main()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4860
diff changeset
747 << "Licensing GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>." << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
748 << "This is free software: you are free to change and redistribute it." << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
749 << "There is NO WARRANTY, to the extent permitted by law." << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
750 << std::endl
3063
fa5ad4368fe3 new mail address
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3060
diff changeset
751 << "Written by Sebastien Jodogne <s.jodogne@orthanc-labs.com>" << std::endl;
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
752 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
753
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
754
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
755 static void PrintErrorCode(ErrorCode code, const char* description)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
756 {
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
757 std::cout
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
758 << std::right << std::setw(16)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
759 << static_cast<int>(code)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
760 << " " << description << std::endl;
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
761 }
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
762
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
763
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
764 static void PrintErrors(const char* path)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
765 {
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
766 std::cout
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
767 << path << " " << ORTHANC_VERSION << std::endl
1734
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
768 << "Orthanc, lightweight, RESTful DICOM server for healthcare and medical research."
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
769 << std::endl << std::endl
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
770 << "List of error codes that could be returned by Orthanc:"
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
771 << std::endl << std::endl;
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
772
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
773 // The content of the following brackets is automatically generated
4932
b7ce2bb6b881 refactored the list of MainDicomTags to be able to change it dynamicaly. Unit tests and Integration tests ok
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
774 // by the "Resources/CodeGeneration/GenerateErrorCodes.py" script
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
775 {
1734
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
776 PrintErrorCode(ErrorCode_InternalError, "Internal error");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
777 PrintErrorCode(ErrorCode_Success, "Success");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
778 PrintErrorCode(ErrorCode_Plugin, "Error encountered within the plugin engine");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
779 PrintErrorCode(ErrorCode_NotImplemented, "Not implemented yet");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
780 PrintErrorCode(ErrorCode_ParameterOutOfRange, "Parameter out of range");
2133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2132
diff changeset
781 PrintErrorCode(ErrorCode_NotEnoughMemory, "The server hosting Orthanc is running out of memory");
1734
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
782 PrintErrorCode(ErrorCode_BadParameterType, "Bad type for a parameter");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
783 PrintErrorCode(ErrorCode_BadSequenceOfCalls, "Bad sequence of calls");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
784 PrintErrorCode(ErrorCode_InexistentItem, "Accessing an inexistent item");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
785 PrintErrorCode(ErrorCode_BadRequest, "Bad request");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
786 PrintErrorCode(ErrorCode_NetworkProtocol, "Error in the network protocol");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
787 PrintErrorCode(ErrorCode_SystemCommand, "Error while calling a system command");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
788 PrintErrorCode(ErrorCode_Database, "Error with the database engine");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
789 PrintErrorCode(ErrorCode_UriSyntax, "Badly formatted URI");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
790 PrintErrorCode(ErrorCode_InexistentFile, "Inexistent file");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
791 PrintErrorCode(ErrorCode_CannotWriteFile, "Cannot write to file");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
792 PrintErrorCode(ErrorCode_BadFileFormat, "Bad file format");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
793 PrintErrorCode(ErrorCode_Timeout, "Timeout");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
794 PrintErrorCode(ErrorCode_UnknownResource, "Unknown resource");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
795 PrintErrorCode(ErrorCode_IncompatibleDatabaseVersion, "Incompatible version of the database");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
796 PrintErrorCode(ErrorCode_FullStorage, "The file storage is full");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
797 PrintErrorCode(ErrorCode_CorruptedFile, "Corrupted file (e.g. inconsistent MD5 hash)");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
798 PrintErrorCode(ErrorCode_InexistentTag, "Inexistent tag");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
799 PrintErrorCode(ErrorCode_ReadOnly, "Cannot modify a read-only data structure");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
800 PrintErrorCode(ErrorCode_IncompatibleImageFormat, "Incompatible format of the images");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
801 PrintErrorCode(ErrorCode_IncompatibleImageSize, "Incompatible size of the images");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
802 PrintErrorCode(ErrorCode_SharedLibrary, "Error while using a shared library (plugin)");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
803 PrintErrorCode(ErrorCode_UnknownPluginService, "Plugin invoking an unknown service");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
804 PrintErrorCode(ErrorCode_UnknownDicomTag, "Unknown DICOM tag");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
805 PrintErrorCode(ErrorCode_BadJson, "Cannot parse a JSON document");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
806 PrintErrorCode(ErrorCode_Unauthorized, "Bad credentials were provided to an HTTP request");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
807 PrintErrorCode(ErrorCode_BadFont, "Badly formatted font file");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
808 PrintErrorCode(ErrorCode_DatabasePlugin, "The plugin implementing a custom database back-end does not fulfill the proper interface");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
809 PrintErrorCode(ErrorCode_StorageAreaPlugin, "Error in the plugin implementing a custom storage area");
1746
d143db00a794 SetOfResources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1741
diff changeset
810 PrintErrorCode(ErrorCode_EmptyRequest, "The request is empty");
1781
5ad4e4d92ecb AcceptMediaDispatcher bootstrap
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1746
diff changeset
811 PrintErrorCode(ErrorCode_NotAcceptable, "Cannot send a response which is acceptable according to the Accept HTTP header");
2132
a43708636890 ErrorCode_NotEnoughMemory and ErrorCode_NullPointer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2079
diff changeset
812 PrintErrorCode(ErrorCode_NullPointer, "Cannot handle a NULL pointer");
2486
ad8f30fc28d1 new error code: DatabaseUnavailable
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
813 PrintErrorCode(ErrorCode_DatabaseUnavailable, "The database is currently not available (probably a transient situation)");
2581
8da2cffc2378 JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2572
diff changeset
814 PrintErrorCode(ErrorCode_CanceledJob, "This job was canceled");
3376
56ea9c476dba new error code for Stone: BadGeometry
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3180
diff changeset
815 PrintErrorCode(ErrorCode_BadGeometry, "Geometry error encountered in Stone");
3801
9fe1d64a748c upgrade to civetweb 1.12, error reporting if OpenSSL failure
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3767
diff changeset
816 PrintErrorCode(ErrorCode_SslInitialization, "Cannot initialize SSL encryption, check out your certificates");
4347
3dffe8f7af48 new error code: ErrorCode_DiscontinuedAbi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4343
diff changeset
817 PrintErrorCode(ErrorCode_DiscontinuedAbi, "Calling a function that has been removed from the Orthanc Framework");
4442
f77ee6e6cf47 new error code: ErrorCode_BadRange
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4439
diff changeset
818 PrintErrorCode(ErrorCode_BadRange, "Incorrect range request");
4551
350a22c094f2 testing replay of transactions
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4508
diff changeset
819 PrintErrorCode(ErrorCode_DatabaseCannotSerialize, "Database could not serialize access due to concurrent update, the transaction should be retried");
4623
95ffe3b6ef7c handling of revisions for metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4613
diff changeset
820 PrintErrorCode(ErrorCode_Revision, "A bad revision number was provided, which might indicate conflict between multiple writers");
4932
b7ce2bb6b881 refactored the list of MainDicomTags to be able to change it dynamicaly. Unit tests and Integration tests ok
Alain Mazy <am@osimis.io>
parents: 4892
diff changeset
821 PrintErrorCode(ErrorCode_MainDicomTagsMultiplyDefined, "A main DICOM Tag has been defined multiple times for the same resource level");
1734
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
822 PrintErrorCode(ErrorCode_SQLiteNotOpened, "SQLite: The database is not opened");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
823 PrintErrorCode(ErrorCode_SQLiteAlreadyOpened, "SQLite: Connection is already open");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
824 PrintErrorCode(ErrorCode_SQLiteCannotOpen, "SQLite: Unable to open the database");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
825 PrintErrorCode(ErrorCode_SQLiteStatementAlreadyUsed, "SQLite: This cached statement is already being referred to");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
826 PrintErrorCode(ErrorCode_SQLiteExecute, "SQLite: Cannot execute a command");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
827 PrintErrorCode(ErrorCode_SQLiteRollbackWithoutTransaction, "SQLite: Rolling back a nonexistent transaction (have you called Begin()?)");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
828 PrintErrorCode(ErrorCode_SQLiteCommitWithoutTransaction, "SQLite: Committing a nonexistent transaction");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
829 PrintErrorCode(ErrorCode_SQLiteRegisterFunction, "SQLite: Unable to register a function");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
830 PrintErrorCode(ErrorCode_SQLiteFlush, "SQLite: Unable to flush the database");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
831 PrintErrorCode(ErrorCode_SQLiteCannotRun, "SQLite: Cannot run a cached statement");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
832 PrintErrorCode(ErrorCode_SQLiteCannotStep, "SQLite: Cannot step over a cached statement");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
833 PrintErrorCode(ErrorCode_SQLiteBindOutOfRange, "SQLite: Bing a value while out of range (serious error)");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
834 PrintErrorCode(ErrorCode_SQLitePrepareStatement, "SQLite: Cannot prepare a cached statement");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
835 PrintErrorCode(ErrorCode_SQLiteTransactionAlreadyStarted, "SQLite: Beginning the same transaction twice");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
836 PrintErrorCode(ErrorCode_SQLiteTransactionCommit, "SQLite: Failure when committing the transaction");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
837 PrintErrorCode(ErrorCode_SQLiteTransactionBegin, "SQLite: Cannot start a transaction");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
838 PrintErrorCode(ErrorCode_DirectoryOverFile, "The directory to be created is already occupied by a regular file");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
839 PrintErrorCode(ErrorCode_FileStorageCannotWrite, "Unable to create a subdirectory or a file in the file storage");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
840 PrintErrorCode(ErrorCode_DirectoryExpected, "The specified path does not point to a directory");
1949
d90f737f2dde warn about the use of privileged ports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1900
diff changeset
841 PrintErrorCode(ErrorCode_HttpPortInUse, "The TCP port of the HTTP server is privileged or already in use");
d90f737f2dde warn about the use of privileged ports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1900
diff changeset
842 PrintErrorCode(ErrorCode_DicomPortInUse, "The TCP port of the DICOM server is privileged or already in use");
1734
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
843 PrintErrorCode(ErrorCode_BadHttpStatusInRest, "This HTTP status is not allowed in a REST API");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
844 PrintErrorCode(ErrorCode_RegularFileExpected, "The specified path does not point to a regular file");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
845 PrintErrorCode(ErrorCode_PathToExecutable, "Unable to get the path to the executable");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
846 PrintErrorCode(ErrorCode_MakeDirectory, "Cannot create a directory");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
847 PrintErrorCode(ErrorCode_BadApplicationEntityTitle, "An application entity title (AET) cannot be empty or be longer than 16 characters");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
848 PrintErrorCode(ErrorCode_NoCFindHandler, "No request handler factory for DICOM C-FIND SCP");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
849 PrintErrorCode(ErrorCode_NoCMoveHandler, "No request handler factory for DICOM C-MOVE SCP");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
850 PrintErrorCode(ErrorCode_NoCStoreHandler, "No request handler factory for DICOM C-STORE SCP");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
851 PrintErrorCode(ErrorCode_NoApplicationEntityFilter, "No application entity filter");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
852 PrintErrorCode(ErrorCode_NoSopClassOrInstance, "DicomUserConnection: Unable to find the SOP class and instance");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
853 PrintErrorCode(ErrorCode_NoPresentationContext, "DicomUserConnection: No acceptable presentation context for modality");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
854 PrintErrorCode(ErrorCode_DicomFindUnavailable, "DicomUserConnection: The C-FIND command is not supported by the remote SCP");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
855 PrintErrorCode(ErrorCode_DicomMoveUnavailable, "DicomUserConnection: The C-MOVE command is not supported by the remote SCP");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
856 PrintErrorCode(ErrorCode_CannotStoreInstance, "Cannot store an instance");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
857 PrintErrorCode(ErrorCode_CreateDicomNotString, "Only string values are supported when creating DICOM instances");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
858 PrintErrorCode(ErrorCode_CreateDicomOverrideTag, "Trying to override a value inherited from a parent module");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
859 PrintErrorCode(ErrorCode_CreateDicomUseContent, "Use \"Content\" to inject an image into a new DICOM instance");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
860 PrintErrorCode(ErrorCode_CreateDicomNoPayload, "No payload is present for one instance in the series");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
861 PrintErrorCode(ErrorCode_CreateDicomUseDataUriScheme, "The payload of the DICOM instance must be specified according to Data URI scheme");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
862 PrintErrorCode(ErrorCode_CreateDicomBadParent, "Trying to attach a new DICOM instance to an inexistent resource");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
863 PrintErrorCode(ErrorCode_CreateDicomParentIsInstance, "Trying to attach a new DICOM instance to an instance (must be a series, study or patient)");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
864 PrintErrorCode(ErrorCode_CreateDicomParentEncoding, "Unable to get the encoding of the parent resource");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
865 PrintErrorCode(ErrorCode_UnknownModality, "Unknown modality");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
866 PrintErrorCode(ErrorCode_BadJobOrdering, "Bad ordering of filters in a job");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
867 PrintErrorCode(ErrorCode_JsonToLuaTable, "Cannot convert the given JSON object to a Lua table");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
868 PrintErrorCode(ErrorCode_CannotCreateLua, "Cannot create the Lua context");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
869 PrintErrorCode(ErrorCode_CannotExecuteLua, "Cannot execute a Lua command");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
870 PrintErrorCode(ErrorCode_LuaAlreadyExecuted, "Arguments cannot be pushed after the Lua function is executed");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
871 PrintErrorCode(ErrorCode_LuaBadOutput, "The Lua function does not give the expected number of outputs");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
872 PrintErrorCode(ErrorCode_NotLuaPredicate, "The Lua function is not a predicate (only true/false outputs allowed)");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
873 PrintErrorCode(ErrorCode_LuaReturnsNoString, "The Lua function does not return a string");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
874 PrintErrorCode(ErrorCode_StorageAreaAlreadyRegistered, "Another plugin has already registered a custom storage area");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
875 PrintErrorCode(ErrorCode_DatabaseBackendAlreadyRegistered, "Another plugin has already registered a custom database back-end");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
876 PrintErrorCode(ErrorCode_DatabaseNotInitialized, "Plugin trying to call the database during its initialization");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
877 PrintErrorCode(ErrorCode_SslDisabled, "Orthanc has been built without SSL support");
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
878 PrintErrorCode(ErrorCode_CannotOrderSlices, "Unable to order the slices of the series");
1786
164d78911382 primitives to handle dicom worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1781
diff changeset
879 PrintErrorCode(ErrorCode_NoWorklistHandler, "No request handler factory for DICOM C-Find Modality SCP");
1980
ebce5f456b8e new error code: ErrorCode_AlreadyExistingTag
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1965
diff changeset
880 PrintErrorCode(ErrorCode_AlreadyExistingTag, "Cannot override the value of a tag that already exists");
4047
0327421506ad fix paths in GenerateErrorCodes.py
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4045
diff changeset
881 PrintErrorCode(ErrorCode_NoStorageCommitmentHandler, "No request handler factory for DICOM N-ACTION SCP (storage commitment)");
3818
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
882 PrintErrorCode(ErrorCode_NoCGetHandler, "No request handler factory for DICOM C-GET SCP");
3404
e280ced38a4c ErrorCode_UnsupportedMediaType
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3376
diff changeset
883 PrintErrorCode(ErrorCode_UnsupportedMediaType, "Unsupported media type");
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
884 }
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
885
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
886 std::cout << std::endl;
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
887 }
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
888
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
889
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
890
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
891 #if ORTHANC_ENABLE_PLUGINS == 1
1434
f9cd40166269 refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1433
diff changeset
892 static void LoadPlugins(OrthancPlugins& plugins)
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
893 {
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
894 std::list<std::string> pathList;
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
895
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
896 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
897 OrthancConfiguration::ReaderLock lock;
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
898 lock.GetConfiguration().GetListOfStringsParameter(pathList, "Plugins");
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
899 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
900
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
901 for (std::list<std::string>::const_iterator
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
902 it = pathList.begin(); it != pathList.end(); ++it)
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
903 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
904 std::string path;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
905
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
906 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
907 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
908 path = lock.GetConfiguration().InterpretStringParameterAsPath(*it);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
909 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
910
1321
0f9e0e808e0f more explicit message
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1310
diff changeset
911 LOG(WARNING) << "Loading plugin(s) from: " << path;
1434
f9cd40166269 refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1433
diff changeset
912 plugins.GetManager().RegisterPlugin(path);
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
913 }
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
914 }
1632
eb8fbcf008b5 fix build with plugins disabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1630
diff changeset
915 #endif
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
916
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
917
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
918
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
919 // Returns "true" if restart is required
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
920 static bool WaitForExit(ServerContext& context,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
921 const OrthancRestApi& restApi)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
922 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
923 LOG(WARNING) << "Orthanc has started";
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
924
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
925 #if ORTHANC_ENABLE_PLUGINS == 1
1741
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
926 if (context.HasPlugins())
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
927 {
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
928 context.GetPlugins().SignalOrthancStarted();
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
929 }
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
930 #endif
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
931
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
932 context.GetLuaScripting().Start();
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
933 context.GetLuaScripting().Execute("Initialize");
1455
a68545767975 Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1452
diff changeset
934
2010
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
935 bool restart;
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
936
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
937 for (;;)
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
938 {
2140
aa4b8895cd23 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2136
diff changeset
939 ServerBarrierEvent event = SystemToolbox::ServerBarrier(restApi.LeaveBarrierFlag());
2010
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
940 restart = restApi.IsResetRequestReceived();
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
941
2010
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
942 if (!restart &&
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
943 event == ServerBarrierEvent_Reload)
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
944 {
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
945 // Handling of SIGHUP
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
946
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
947 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
948 if (lock.GetConfiguration().HasConfigurationChanged())
2010
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
949 {
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
950 LOG(WARNING) << "A SIGHUP signal has been received, resetting Orthanc";
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
951 Logging::Flush();
2010
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
952 restart = true;
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
953 break;
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
954 }
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
955 else
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
956 {
2946
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
957 LOG(WARNING) << "A SIGHUP signal has been received, but is ignored "
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
958 << "as the configuration has not changed on the disk";
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
959 Logging::Flush();
2010
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
960 continue;
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
961 }
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
962 }
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
963 else
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
964 {
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
965 break;
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
966 }
2009
e2dd40abce72 catching SIGHUP signal
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
967 }
e2dd40abce72 catching SIGHUP signal
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
968
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
969 context.GetLuaScripting().Execute("Finalize");
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
970 context.GetLuaScripting().Stop();
1455
a68545767975 Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1452
diff changeset
971
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
972 #if ORTHANC_ENABLE_PLUGINS == 1
1741
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
973 if (context.HasPlugins())
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
974 {
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
975 context.GetPlugins().SignalOrthancStopped();
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
976 }
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
977 #endif
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
978
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
979 if (restart)
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
980 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
981 LOG(WARNING) << "Reset request received, restarting Orthanc";
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
982 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
983
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
984 // We're done
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
985 LOG(WARNING) << "Orthanc is stopping";
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
986
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
987 return restart;
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
988 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
989
1368
b22ba8c5edbe query retrieve
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1366
diff changeset
990
b22ba8c5edbe query retrieve
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1366
diff changeset
991
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
992 static bool StartHttpServer(ServerContext& context,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
993 const OrthancRestApi& restApi,
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
994 OrthancPlugins* plugins)
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
995 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
996 bool httpServerEnabled;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
997
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
998 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
999 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1000 httpServerEnabled = lock.GetConfiguration().GetBooleanParameter("HttpServerEnabled", true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1001 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1002
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1003 if (!httpServerEnabled)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1004 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1005 LOG(WARNING) << "The HTTP server is disabled";
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1006 return WaitForExit(context, restApi);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1007 }
1310
61ce8147f30d custom database back-end
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1289
diff changeset
1008 else
61ce8147f30d custom database back-end
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1289
diff changeset
1009 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1010 MyIncomingHttpRequestFilter httpFilter(context, plugins);
3138
ab46e537f92e renamed class MongooseServer as HttpServer, CivetWeb made default HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3137
diff changeset
1011 HttpServer httpServer;
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1012 bool httpDescribeErrors;
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1013
3137
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1014 #if ORTHANC_ENABLE_MONGOOSE == 1
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1015 const bool defaultKeepAlive = false;
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1016 #elif ORTHANC_ENABLE_CIVETWEB == 1
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1017 const bool defaultKeepAlive = true;
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1018 #else
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1019 # error "Either Mongoose or Civetweb must be enabled to compile this file"
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1020 #endif
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1021
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1022 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1023 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1024
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1025 httpDescribeErrors = lock.GetConfiguration().GetBooleanParameter("HttpDescribeErrors", true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1026
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1027 // HTTP server
3852
ee0a1211419f reverting default HttpThreadsCount to 50, as this slows performance of integration tests from 40s to 170s
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3842
diff changeset
1028 httpServer.SetThreadsCount(lock.GetConfiguration().GetUnsignedIntegerParameter("HttpThreadsCount", 50));
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1029 httpServer.SetPortNumber(lock.GetConfiguration().GetUnsignedIntegerParameter("HttpPort", 8042));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1030 httpServer.SetRemoteAccessAllowed(lock.GetConfiguration().GetBooleanParameter("RemoteAccessAllowed", false));
3137
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1031 httpServer.SetKeepAliveEnabled(lock.GetConfiguration().GetBooleanParameter("KeepAlive", defaultKeepAlive));
5119
bdec57f3cbf2 New configuration KeepAliveTimeout with a default value of 1 second
Alain Mazy <am@osimis.io>
parents: 5061
diff changeset
1032 httpServer.SetKeepAliveTimeout(lock.GetConfiguration().GetUnsignedIntegerParameter("KeepAliveTimeout", 1));
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1033 httpServer.SetHttpCompressionEnabled(lock.GetConfiguration().GetBooleanParameter("HttpCompressionEnabled", true));
3137
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1034 httpServer.SetTcpNoDelay(lock.GetConfiguration().GetBooleanParameter("TcpNoDelay", true));
3537
9cc09f4c0fa9 New configuration option: "HttpRequestTimeout"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3535
diff changeset
1035 httpServer.SetRequestTimeout(lock.GetConfiguration().GetUnsignedIntegerParameter("HttpRequestTimeout", 30));
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1036
3534
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1037 // Let's assume that the HTTP server is secure
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1038 context.SetHttpServerSecure(true);
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1039
3506
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1040 bool authenticationEnabled;
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1041 if (lock.GetConfiguration().LookupBooleanParameter(authenticationEnabled, "AuthenticationEnabled"))
3500
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1042 {
3506
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1043 httpServer.SetAuthenticationEnabled(authenticationEnabled);
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1044
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1045 if (httpServer.IsRemoteAccessAllowed() &&
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1046 !authenticationEnabled)
3501
27b53c61aa99 warning when authentication is automatically enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3500
diff changeset
1047 {
3533
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1048 LOG(WARNING) << "====> Remote access is enabled while user authentication is explicitly disabled, "
3534
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1049 << "your setup is POSSIBLY INSECURE <====";
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1050 context.SetHttpServerSecure(false);
3501
27b53c61aa99 warning when authentication is automatically enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3500
diff changeset
1051 }
3506
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1052 }
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1053 else if (httpServer.IsRemoteAccessAllowed())
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1054 {
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1055 // Starting with Orthanc 1.5.8, it is impossible to enable
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1056 // remote access without having explicitly disabled user
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1057 // authentication.
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1058 LOG(WARNING) << "Remote access is allowed but \"AuthenticationEnabled\" is not in the configuration, "
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1059 << "automatically enabling HTTP authentication for security";
3500
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1060 httpServer.SetAuthenticationEnabled(true);
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1061 }
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1062 else
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1063 {
3506
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1064 // If Orthanc only listens on the localhost, it is OK to have
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1065 // "AuthenticationEnabled" disabled
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1066 httpServer.SetAuthenticationEnabled(false);
3500
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1067 }
1310
61ce8147f30d custom database back-end
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1289
diff changeset
1068
3500
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1069 bool hasUsers = lock.GetConfiguration().SetupRegisteredUsers(httpServer);
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1070
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1071 if (httpServer.IsAuthenticationEnabled() &&
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1072 !hasUsers)
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1073 {
3533
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1074 if (httpServer.IsRemoteAccessAllowed())
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1075 {
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1076 /**
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1077 * Starting with Orthanc 1.5.8, if no user is explicitly
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1078 * defined while remote access is allowed, we create a
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1079 * default user, and Orthanc Explorer shows a warning
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1080 * message about an "Insecure setup". This convention is
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1081 * used in Docker images "jodogne/orthanc",
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1082 * "jodogne/orthanc-plugins" and "osimis/orthanc".
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1083 **/
3534
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1084 LOG(WARNING) << "====> HTTP authentication is enabled, but no user is declared. "
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1085 << "Creating a default user: Review your configuration option \"RegisteredUsers\". "
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1086 << "Your setup is INSECURE <====";
3533
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1087
3534
cac8ffcb9cef forcing AuthenticationEnabled to false is considered as insecure if remote access is allowed
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3533
diff changeset
1088 context.SetHttpServerSecure(false);
3533
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1089
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1090 // This is the username/password of the default user in Orthanc.
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1091 httpServer.RegisterUser("orthanc", "orthanc");
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1092 }
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1093 else
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1094 {
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1095 LOG(WARNING) << "HTTP authentication is enabled, but no user is declared, "
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1096 << "check the value of configuration option \"RegisteredUsers\"";
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1097 }
2090ec6a83a5 create a default user if none is provided, while issuing a warning in Orthanc Explorer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3526
diff changeset
1098 }
3500
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1099
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1100 if (lock.GetConfiguration().GetBooleanParameter("SslEnabled", false))
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1101 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1102 std::string certificate = lock.GetConfiguration().InterpretStringParameterAsPath(
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1103 lock.GetConfiguration().GetStringParameter("SslCertificate", "certificate.pem"));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1104 httpServer.SetSslEnabled(true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1105 httpServer.SetSslCertificate(certificate.c_str());
4381
df313e410f0c Add support to configure minimimum accepted TLS version and cipher suite
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4378
diff changeset
1106
df313e410f0c Add support to configure minimimum accepted TLS version and cipher suite
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4378
diff changeset
1107 // Default to TLS 1.2 as SSL minimum
df313e410f0c Add support to configure minimimum accepted TLS version and cipher suite
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4378
diff changeset
1108 // See https://github.com/civetweb/civetweb/blob/master/docs/UserManual.md "ssl_protocol_version" for mapping
4382
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1109 static const unsigned int TLS_1_2 = 4;
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1110 unsigned int minimumVersion = lock.GetConfiguration().GetUnsignedIntegerParameter("SslMinimumProtocolVersion", TLS_1_2);
4381
df313e410f0c Add support to configure minimimum accepted TLS version and cipher suite
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4378
diff changeset
1111 httpServer.SetSslMinimumVersion(minimumVersion);
df313e410f0c Add support to configure minimimum accepted TLS version and cipher suite
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4378
diff changeset
1112
4382
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1113 static const char* SSL_CIPHERS_ACCEPTED = "SslCiphersAccepted";
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1114
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1115 std::list<std::string> ciphers;
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1116
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1117 if (lock.GetJson().type() == Json::objectValue &&
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1118 lock.GetJson().isMember(SSL_CIPHERS_ACCEPTED))
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1119 {
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1120 lock.GetConfiguration().GetListOfStringsParameter(ciphers, SSL_CIPHERS_ACCEPTED);
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1121 }
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1122 else
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1123 {
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1124 // Defaults to FIPS 140-2 ciphers
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1125 CLOG(INFO, HTTP) << "No configuration option \"" << SSL_CIPHERS_ACCEPTED
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1126 << "\", will accept the FIPS 140-2 ciphers";
4381
df313e410f0c Add support to configure minimimum accepted TLS version and cipher suite
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4378
diff changeset
1127
4382
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1128 ciphers.push_back("ECDHE-ECDSA-AES256-GCM-SHA384");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1129 ciphers.push_back("ECDHE-ECDSA-AES256-SHA384");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1130 ciphers.push_back("ECDHE-RSA-AES256-GCM-SHA384");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1131 ciphers.push_back("ECDHE-RSA-AES128-GCM-SHA256");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1132 ciphers.push_back("ECDHE-RSA-AES256-SHA384");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1133 ciphers.push_back("ECDHE-RSA-AES128-SHA256");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1134 ciphers.push_back("ECDHE-RSA-AES128-SHA");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1135 ciphers.push_back("ECDHE-RSA-AES256-SHA");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1136 ciphers.push_back("DHE-RSA-AES256-SHA");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1137 ciphers.push_back("DHE-RSA-AES128-SHA");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1138 ciphers.push_back("AES256-SHA");
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1139 ciphers.push_back("AES128-SHA");
4381
df313e410f0c Add support to configure minimimum accepted TLS version and cipher suite
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4378
diff changeset
1140 }
4382
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1141
3aacd2bd8bbc review changeset 4381:df313e410f0c
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4381
diff changeset
1142 httpServer.SetSslCiphers(ciphers);
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1143 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1144 else
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1145 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1146 httpServer.SetSslEnabled(false);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1147 }
3535
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1148
4190
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1149 if (lock.GetConfiguration().GetBooleanParameter("SslVerifyPeers", false))
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1150 {
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1151 std::string trustedClientCertificates = lock.GetConfiguration().InterpretStringParameterAsPath(
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1152 lock.GetConfiguration().GetStringParameter("SslTrustedClientCertificates", "trustedCertificates.pem"));
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1153 httpServer.SetSslVerifyPeers(true);
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1154 httpServer.SetSslTrustedClientCertificates(trustedClientCertificates.c_str());
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1155 }
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1156 else
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1157 {
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1158 httpServer.SetSslVerifyPeers(false);
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1159 }
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1160
4649
e915102093de New CMake option: "ORTHANC_LUA_VERSION" to use a specific version of system-wide Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4646
diff changeset
1161 LOG(INFO) << "Version of Lua: " << LUA_VERSION;
e915102093de New CMake option: "ORTHANC_LUA_VERSION" to use a specific version of system-wide Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4646
diff changeset
1162
3535
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1163 if (lock.GetConfiguration().GetBooleanParameter("ExecuteLuaEnabled", false))
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1164 {
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1165 context.SetExecuteLuaEnabled(true);
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1166 LOG(WARNING) << "====> Remote LUA script execution is enabled. Review your configuration option \"ExecuteLuaEnabled\". "
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1167 << "Your setup is POSSIBLY INSECURE <====";
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1168 }
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1169 else
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1170 {
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1171 context.SetExecuteLuaEnabled(false);
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1172 LOG(WARNING) << "Remote LUA script execution is disabled";
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1173 }
4243
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1174
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1175 if (lock.GetConfiguration().GetBooleanParameter("WebDavEnabled", true))
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1176 {
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1177 const bool allowDelete = lock.GetConfiguration().GetBooleanParameter("WebDavDeleteAllowed", false);
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1178 const bool allowUpload = lock.GetConfiguration().GetBooleanParameter("WebDavUploadAllowed", true);
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1179
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1180 UriComponents root;
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1181 root.push_back("webdav");
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1182 httpServer.Register(root, new OrthancWebDav(context, allowDelete, allowUpload));
64f57c9d5f79 configuration options for webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4242
diff changeset
1183 }
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1184 }
1949
d90f737f2dde warn about the use of privileged ports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1900
diff changeset
1185
4943
47d734fa30f6 adding function OrthancPluginRegisterWebDavCollection() to the plugin SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4942
diff changeset
1186 #if ORTHANC_ENABLE_PLUGINS == 1
47d734fa30f6 adding function OrthancPluginRegisterWebDavCollection() to the plugin SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4942
diff changeset
1187 if (plugins != NULL)
47d734fa30f6 adding function OrthancPluginRegisterWebDavCollection() to the plugin SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4942
diff changeset
1188 {
47d734fa30f6 adding function OrthancPluginRegisterWebDavCollection() to the plugin SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4942
diff changeset
1189 plugins->RegisterWebDavCollections(httpServer);
47d734fa30f6 adding function OrthancPluginRegisterWebDavCollection() to the plugin SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4942
diff changeset
1190 }
47d734fa30f6 adding function OrthancPluginRegisterWebDavCollection() to the plugin SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4942
diff changeset
1191 #endif
47d734fa30f6 adding function OrthancPluginRegisterWebDavCollection() to the plugin SDK
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4942
diff changeset
1192
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1193 MyHttpExceptionFormatter exceptionFormatter(httpDescribeErrors, plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1194
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1195 httpServer.SetIncomingHttpRequestFilter(httpFilter);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1196 httpServer.SetHttpExceptionFormatter(exceptionFormatter);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1197 httpServer.Register(context.GetHttpHandler());
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1198
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1199 if (httpServer.GetPortNumber() < 1024)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1200 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1201 LOG(WARNING) << "The HTTP port is privileged ("
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1202 << httpServer.GetPortNumber() << " is below 1024), "
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1203 << "make sure you run Orthanc as root/administrator";
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1204 }
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1205
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1206 httpServer.Start();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1207
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1208 bool restart = WaitForExit(context, restApi);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1209
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1210 httpServer.Stop();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1211 LOG(WARNING) << " HTTP server has stopped";
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1212
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1213 return restart;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1214 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1215 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1216
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1217
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1218 static bool StartDicomServer(ServerContext& context,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
1219 const OrthancRestApi& restApi,
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
1220 OrthancPlugins* plugins)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1221 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1222 bool dicomServerEnabled;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1223
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1224 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1225 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1226 dicomServerEnabled = lock.GetConfiguration().GetBooleanParameter("DicomServerEnabled", true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1227 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1228
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1229 if (!dicomServerEnabled)
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1230 {
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1231 LOG(WARNING) << "The DICOM server is disabled";
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
1232 return StartHttpServer(context, restApi, plugins);
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1233 }
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1234 else
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1235 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1236 MyDicomServerFactory serverFactory(context);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1237 OrthancApplicationEntityFilter dicomFilter(context);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1238 ModalitiesFromConfiguration modalities;
2381
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
1239
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1240 // Setup the DICOM server
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1241 DicomServer dicomServer;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1242 dicomServer.SetRemoteModalities(modalities);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1243 dicomServer.SetStoreRequestHandlerFactory(serverFactory);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1244 dicomServer.SetMoveRequestHandlerFactory(serverFactory);
3918
dba48c162b7b C-Get SCP always enabled; no more server config
Alain Mazy <alain@mazy.be>
parents: 3867
diff changeset
1245 dicomServer.SetGetRequestHandlerFactory(serverFactory);
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1246 dicomServer.SetFindRequestHandlerFactory(serverFactory);
3604
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
1247 dicomServer.SetStorageCommitmentRequestHandlerFactory(serverFactory);
2069
fabf7820d1f1 New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2018
diff changeset
1248
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1249 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1250 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1251 dicomServer.SetCalledApplicationEntityTitleCheck(lock.GetConfiguration().GetBooleanParameter("DicomCheckCalledAet", false));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1252 dicomServer.SetAssociationTimeout(lock.GetConfiguration().GetUnsignedIntegerParameter("DicomScpTimeout", 30));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1253 dicomServer.SetPortNumber(lock.GetConfiguration().GetUnsignedIntegerParameter("DicomPort", 4242));
4793
fc2ba1ce6538 new configuration 'DicomThreadsCount'
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1254 dicomServer.SetThreadsCount(lock.GetConfiguration().GetUnsignedIntegerParameter("DicomThreadsCount", 4));
4143
1ec3e1e18f50 Add missing tag "Retrieve AE Title (0008,0054)" in C-FIND SCP responses
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4047
diff changeset
1255 dicomServer.SetApplicationEntityTitle(lock.GetConfiguration().GetOrthancAET());
4439
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1256
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1257 // Configuration of DICOM TLS for Orthanc SCP (since Orthanc 1.9.0)
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1258 dicomServer.SetDicomTlsEnabled(lock.GetConfiguration().GetBooleanParameter(KEY_DICOM_TLS_ENABLED, false));
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1259 if (dicomServer.IsDicomTlsEnabled())
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1260 {
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1261 dicomServer.SetOwnCertificatePath(
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1262 lock.GetConfiguration().GetStringParameter(KEY_DICOM_TLS_PRIVATE_KEY, ""),
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1263 lock.GetConfiguration().GetStringParameter(KEY_DICOM_TLS_CERTIFICATE, ""));
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1264 dicomServer.SetTrustedCertificatesPath(
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1265 lock.GetConfiguration().GetStringParameter(KEY_DICOM_TLS_TRUSTED_CERTIFICATES, ""));
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1266 }
4451
f4dbdb2dcba6 new configuration option "MaximumPduLength" to tune the maximum PDU length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4442
diff changeset
1267
f4dbdb2dcba6 new configuration option "MaximumPduLength" to tune the maximum PDU length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4442
diff changeset
1268 dicomServer.SetMaximumPduLength(lock.GetConfiguration().GetUnsignedIntegerParameter(KEY_MAXIMUM_PDU_LENGTH, 16384));
4656
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
1269
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
1270 // New option in Orthanc 1.9.3
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
1271 dicomServer.SetRemoteCertificateRequired(
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
1272 lock.GetConfiguration().GetBooleanParameter(KEY_DICOM_TLS_REMOTE_CERTIFICATE_REQUIRED, true));
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1273 }
1786
164d78911382 primitives to handle dicom worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1781
diff changeset
1274
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1275 #if ORTHANC_ENABLE_PLUGINS == 1
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1276 if (plugins != NULL)
1995
f0acfa753973 New callback to handle non-worklists C-Find requests: OrthancPluginRegisterCFindCallback()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1987
diff changeset
1277 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1278 if (plugins->HasWorklistHandler())
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1279 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1280 dicomServer.SetWorklistRequestHandlerFactory(*plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1281 }
1999
364cc624eb65 New URI "/modalities/.../move" to issue C-Move SCU requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1995
diff changeset
1282
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1283 if (plugins->HasFindHandler())
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1284 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1285 dicomServer.SetFindRequestHandlerFactory(*plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1286 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1287
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1288 if (plugins->HasMoveHandler())
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1289 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1290 dicomServer.SetMoveRequestHandlerFactory(*plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1291 }
1999
364cc624eb65 New URI "/modalities/.../move" to issue C-Move SCU requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1995
diff changeset
1292 }
1800
30e97a1f4093 callback for handling worklists with plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1799
diff changeset
1293 #endif
1786
164d78911382 primitives to handle dicom worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1781
diff changeset
1294
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1295 dicomServer.SetApplicationEntityFilter(dicomFilter);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1296
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1297 if (dicomServer.GetPortNumber() < 1024)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1298 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1299 LOG(WARNING) << "The DICOM port is privileged ("
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1300 << dicomServer.GetPortNumber() << " is below 1024), "
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1301 << "make sure you run Orthanc as root/administrator";
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1302 }
1949
d90f737f2dde warn about the use of privileged ports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1900
diff changeset
1303
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1304 dicomServer.Start();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1305 LOG(WARNING) << "DICOM server listening with AET " << dicomServer.GetApplicationEntityTitle()
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1306 << " on port: " << dicomServer.GetPortNumber();
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1307
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1308 bool restart = false;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1309 ErrorCode error = ErrorCode_Success;
1675
131136aeeaa7 improved exception handling in the main program
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
1310
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1311 try
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1312 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1313 restart = StartHttpServer(context, restApi, plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1314 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1315 catch (OrthancException& e)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1316 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1317 error = e.GetErrorCode();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1318 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1319
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1320 dicomServer.Stop();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1321 LOG(WARNING) << " DICOM server has stopped";
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1322
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1323 serverFactory.Done();
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1324
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1325 if (error != ErrorCode_Success)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1326 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1327 throw OrthancException(error);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1328 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1329
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1330 return restart;
1675
131136aeeaa7 improved exception handling in the main program
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
1331 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1332 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1333
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1334
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1335 static bool ConfigureHttpHandler(ServerContext& context,
2815
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1336 OrthancPlugins *plugins,
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1337 bool loadJobsFromDatabase)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1338 {
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1339 #if ORTHANC_ENABLE_PLUGINS == 1
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1340 // By order of priority, first apply the "plugins" layer, so that
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1341 // plugins can overwrite the built-in REST API of Orthanc
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1342 if (plugins)
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1343 {
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1344 assert(context.HasPlugins());
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1345 context.GetHttpHandler().Register(*plugins, false);
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1346 }
1632
eb8fbcf008b5 fix build with plugins disabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1630
diff changeset
1347 #endif
3818
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
1348
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1349 // Secondly, apply the "static resources" layer
1443
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1350 #if ORTHANC_STANDALONE == 1
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4026
diff changeset
1351 EmbeddedResourceHttpHandler staticResources("/app", ServerResources::ORTHANC_EXPLORER);
1443
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1352 #else
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1353 FilesystemHttpHandler staticResources("/app", ORTHANC_PATH "/OrthancExplorer");
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1354 #endif
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1355
4378
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1356 // Do not register static resources if orthanc explorer is disabled
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1357 bool orthancExplorerEnabled = false;
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1358 {
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1359 OrthancConfiguration::ReaderLock lock;
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1360 orthancExplorerEnabled = lock.GetConfiguration().GetBooleanParameter(
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1361 "OrthancExplorerEnabled", true);
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1362 }
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1363
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1364 if (orthancExplorerEnabled)
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1365 {
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1366 context.GetHttpHandler().Register(staticResources, false);
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1367 }
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1368 else
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1369 {
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1370 LOG(WARNING) << "Orthanc Explorer UI is disabled";
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1371 }
1135
67c3c1e4a6e0 index-only mode, and custom storage area with plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1134
diff changeset
1372
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1373 // Thirdly, consider the built-in REST API of Orthanc
4378
9e2fc6911ac8 adding option to disable orthance explorer when http server is enabled
Andrew Wallis <andrew.wallis@varian.com>>
parents: 4347
diff changeset
1374 OrthancRestApi restApi(context, orthancExplorerEnabled);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1375 context.GetHttpHandler().Register(restApi, true);
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1376
2815
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1377 context.SetupJobsEngine(false /* not running unit tests */, loadJobsFromDatabase);
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1378
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1379 bool restart = StartDicomServer(context, restApi, plugins);
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1380
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1381 context.Stop();
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1382
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1383 return restart;
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1384 }
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1385
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1386
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1387 static void UpgradeDatabase(IDatabaseWrapper& database,
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1388 IStorageArea& storageArea)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1389 {
1668
de1413733c97 reconstructing main dicom tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1666
diff changeset
1390 // Upgrade the schema of the database, if needed
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1391 unsigned int currentVersion = database.GetDatabaseVersion();
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1392
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1393 LOG(WARNING) << "Starting the upgrade of the database schema";
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1394 LOG(WARNING) << "Current database version: " << currentVersion;
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1395 LOG(WARNING) << "Database version expected by Orthanc: " << ORTHANC_DATABASE_VERSION;
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1396
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1397 if (currentVersion == ORTHANC_DATABASE_VERSION)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1398 {
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1399 LOG(WARNING) << "No upgrade is needed, start Orthanc without the \"--upgrade\" argument";
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1400 return;
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1401 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1402
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1403 if (currentVersion > ORTHANC_DATABASE_VERSION)
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1404 {
2955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1405 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1406 "The version of the database schema (" +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1407 boost::lexical_cast<std::string>(currentVersion) +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1408 ") is too recent for this version of Orthanc. Please upgrade Orthanc.");
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1409 }
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1410
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1411 LOG(WARNING) << "Upgrading the database from schema version "
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1412 << currentVersion << " to " << ORTHANC_DATABASE_VERSION;
1869
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1413
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1414 try
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1415 {
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1416 database.Upgrade(ORTHANC_DATABASE_VERSION, storageArea);
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1417 }
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1418 catch (OrthancException&)
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1419 {
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1420 LOG(ERROR) << "Unable to run the automated upgrade, please use the replication instructions: "
3135
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3126
diff changeset
1421 << "http://book.orthanc-server.com/users/replication.html";
1869
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1422 throw;
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1423 }
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1424
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1425 // Sanity check
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1426 currentVersion = database.GetDatabaseVersion();
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1427 if (ORTHANC_DATABASE_VERSION != currentVersion)
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1428 {
2955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1429 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1430 "The database schema was not properly upgraded, it is still at version " +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1431 boost::lexical_cast<std::string>(currentVersion));
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1432 }
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1433 else
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1434 {
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1435 LOG(WARNING) << "The database schema was successfully upgraded, "
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1436 << "you can now start Orthanc without the \"--upgrade\" argument";
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1437 }
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1438 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1439
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1440
2941
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1441
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1442 namespace
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1443 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1444 class ServerContextConfigurator : public boost::noncopyable
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1445 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1446 private:
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1447 ServerContext& context_;
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1448 OrthancPlugins* plugins_;
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1449
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1450 public:
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1451 ServerContextConfigurator(ServerContext& context,
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1452 OrthancPlugins* plugins) :
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1453 context_(context),
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1454 plugins_(plugins)
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1455 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1456 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1457 OrthancConfiguration::WriterLock lock;
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1458 lock.GetConfiguration().SetServerIndex(context.GetIndex());
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1459 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1460
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1461 #if ORTHANC_ENABLE_PLUGINS == 1
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1462 if (plugins_ != NULL)
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1463 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1464 plugins_->SetServerContext(context_);
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1465 context_.SetPlugins(*plugins_);
4613
2684544ff03c maximum number of database retries for writer collisions is now set by the plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4608
diff changeset
1466 context_.GetIndex().SetMaxDatabaseRetries(plugins_->GetMaxDatabaseRetries());
2941
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1467 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1468 #endif
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1469 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1470
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1471 ~ServerContextConfigurator()
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1472 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1473 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1474 OrthancConfiguration::WriterLock lock;
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1475 lock.GetConfiguration().ResetServerIndex();
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1476 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1477
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1478 #if ORTHANC_ENABLE_PLUGINS == 1
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1479 if (plugins_ != NULL)
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1480 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1481 plugins_->ResetServerContext();
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1482 context_.ResetPlugins();
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1483 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1484 #endif
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1485 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1486 };
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1487 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1488
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1489
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1490 static bool ConfigureServerContext(IDatabaseWrapper& database,
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1491 IStorageArea& storageArea,
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1492 OrthancPlugins *plugins,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1493 bool loadJobsFromDatabase)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1494 {
2950
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1495 size_t maxCompletedJobs;
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1496
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1497 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1498 OrthancConfiguration::ReaderLock lock;
2069
fabf7820d1f1 New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2018
diff changeset
1499
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1500 // These configuration options must be set before creating the
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1501 // ServerContext, otherwise the possible Lua scripts will not be
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1502 // able to properly issue HTTP/HTTPS queries
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1503 HttpClient::ConfigureSsl(lock.GetConfiguration().GetBooleanParameter("HttpsVerifyPeers", true),
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1504 lock.GetConfiguration().InterpretStringParameterAsPath
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1505 (lock.GetConfiguration().GetStringParameter("HttpsCACertificates", "")));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1506 HttpClient::SetDefaultVerbose(lock.GetConfiguration().GetBooleanParameter("HttpVerbose", false));
3428
6add197274b1 default value of HttpTimeout is now 60 seconds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3404
diff changeset
1507
6add197274b1 default value of HttpTimeout is now 60 seconds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3404
diff changeset
1508 // The value "0" below makes the class HttpClient use its default
6add197274b1 default value of HttpTimeout is now 60 seconds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3404
diff changeset
1509 // value (DEFAULT_HTTP_TIMEOUT = 60 seconds in Orthanc 1.5.7)
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1510 HttpClient::SetDefaultTimeout(lock.GetConfiguration().GetUnsignedIntegerParameter("HttpTimeout", 0));
3428
6add197274b1 default value of HttpTimeout is now 60 seconds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3404
diff changeset
1511
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1512 HttpClient::SetDefaultProxy(lock.GetConfiguration().GetStringParameter("HttpProxy", ""));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1513
3865
ff0718a4633a fix missing DicomAssociationParameters::SetDefaultTimeout()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3852
diff changeset
1514 DicomAssociationParameters::SetDefaultTimeout(lock.GetConfiguration().GetUnsignedIntegerParameter("DicomScuTimeout", 10));
2950
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1515
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1516 maxCompletedJobs = lock.GetConfiguration().GetUnsignedIntegerParameter("JobsHistorySize", 10);
3164
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1517
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1518 if (maxCompletedJobs == 0)
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1519 {
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1520 LOG(WARNING) << "Setting option \"JobsHistorySize\" to zero is not recommended";
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1521 }
4438
4a4e33c9082d configuration options for DICOM TLS in Orthanc SCU
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4437
diff changeset
1522
4439
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1523 // Configuration of DICOM TLS for Orthanc SCU (since Orthanc 1.9.0)
4438
4a4e33c9082d configuration options for DICOM TLS in Orthanc SCU
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4437
diff changeset
1524 DicomAssociationParameters::SetDefaultOwnCertificatePath(
4439
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1525 lock.GetConfiguration().GetStringParameter(KEY_DICOM_TLS_PRIVATE_KEY, ""),
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1526 lock.GetConfiguration().GetStringParameter(KEY_DICOM_TLS_CERTIFICATE, ""));
4438
4a4e33c9082d configuration options for DICOM TLS in Orthanc SCU
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4437
diff changeset
1527 DicomAssociationParameters::SetDefaultTrustedCertificatesPath(
4439
5209a9ff6e38 configuration options for DICOM TLS in Orthanc SCP
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4438
diff changeset
1528 lock.GetConfiguration().GetStringParameter(KEY_DICOM_TLS_TRUSTED_CERTIFICATES, ""));
4451
f4dbdb2dcba6 new configuration option "MaximumPduLength" to tune the maximum PDU length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4442
diff changeset
1529 DicomAssociationParameters::SetDefaultMaximumPduLength(
f4dbdb2dcba6 new configuration option "MaximumPduLength" to tune the maximum PDU length
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4442
diff changeset
1530 lock.GetConfiguration().GetUnsignedIntegerParameter(KEY_MAXIMUM_PDU_LENGTH, 16384));
4656
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
1531
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
1532 // New option in Orthanc 1.9.3
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
1533 DicomAssociationParameters::SetDefaultRemoteCertificateRequired(
82a314325351 New configuration option: "DicomTlsRemoteCertificateRequired"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4649
diff changeset
1534 lock.GetConfiguration().GetBooleanParameter(KEY_DICOM_TLS_REMOTE_CERTIFICATE_REQUIRED, true));
2950
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1535 }
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1536
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1537 ServerContext context(database, storageArea, false /* not running unit tests */, maxCompletedJobs);
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1538
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1539 {
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1540 OrthancConfiguration::ReaderLock lock;
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1541
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1542 context.SetCompressionEnabled(lock.GetConfiguration().GetBooleanParameter("StorageCompression", false));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1543 context.SetStoreMD5ForAttachments(lock.GetConfiguration().GetBooleanParameter("StoreMD5ForAttachments", true));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1544
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1545 // New option in Orthanc 1.4.2
3813
aaaa442bfe39 moving SetOverwriteInstances from ServerIndex to ServerContext
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3801
diff changeset
1546 context.SetOverwriteInstances(lock.GetConfiguration().GetBooleanParameter("OverwriteInstances", false));
2069
fabf7820d1f1 New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2018
diff changeset
1547
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1548 try
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1549 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1550 context.GetIndex().SetMaximumPatientCount(lock.GetConfiguration().GetUnsignedIntegerParameter("MaximumPatientCount", 0));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1551 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1552 catch (...)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1553 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1554 context.GetIndex().SetMaximumPatientCount(0);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1555 }
2825
8aa6aef11b70 New configuration option "OverwriteInstances" to choose how duplicate SOPInstanceUID are handled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2815
diff changeset
1556
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1557 try
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1558 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1559 uint64_t size = lock.GetConfiguration().GetUnsignedIntegerParameter("MaximumStorageSize", 0);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1560 context.GetIndex().SetMaximumStorageSize(size * 1024 * 1024);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1561 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1562 catch (...)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1563 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1564 context.GetIndex().SetMaximumStorageSize(0);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1565 }
4792
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1566
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1567 try
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1568 {
5061
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1569 std::string mode = lock.GetConfiguration().GetStringParameter("MaximumStorageMode", "Recycle");
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1570 context.GetIndex().SetMaximumStorageMode(StringToMaxStorageMode(mode));
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1571 }
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1572 catch (...)
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1573 {
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1574 context.GetIndex().SetMaximumStorageMode(MaxStorageMode_Recycle);
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1575 }
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1576
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1577 try
e95fadefeb72 new MaximumStorageMode configuration
Alain Mazy <am@osimis.io>
parents: 4954
diff changeset
1578 {
4792
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1579 uint64_t size = lock.GetConfiguration().GetUnsignedIntegerParameter("MaximumStorageCacheSize", 128);
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1580 context.SetMaximumStorageCacheSize(size * 1024 * 1024);
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1581 }
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1582 catch (...)
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1583 {
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1584 context.SetMaximumStorageCacheSize(128);
434843934307 Added a StorageCache in the StorageAccessor
Alain Mazy <am@osimis.io>
parents: 4772
diff changeset
1585 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1586 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1587
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1588 {
4473
68f52897c119 new URIs: /tools/accepted-transfer-syntaxes and /tools/unknown-sop-class-accepted to replace Lua callbacks for transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4472
diff changeset
1589 ServerContextConfigurator configurator(context, plugins); // This calls "OrthancConfiguration::SetServerIndex()"
2946
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1590
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1591 {
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1592 OrthancConfiguration::WriterLock lock;
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1593 lock.GetConfiguration().LoadModalitiesAndPeers();
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1594 }
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1595
2941
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1596 return ConfigureHttpHandler(context, plugins, loadJobsFromDatabase);
1675
131136aeeaa7 improved exception handling in the main program
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
1597 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1598 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1599
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1600
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1601 static bool ConfigureDatabase(IDatabaseWrapper& database,
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1602 IStorageArea& storageArea,
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1603 OrthancPlugins *plugins,
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1604 bool upgradeDatabase,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1605 bool loadJobsFromDatabase)
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1606 {
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1607 database.Open();
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1608
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1609 unsigned int currentVersion = database.GetDatabaseVersion();
2699
52217dc47a4e new image/pam MIME TYPE supported in /instances/../frames/../image-uint8... routes
am@osimis.io
parents: 2633
diff changeset
1610
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1611 if (upgradeDatabase)
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1612 {
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1613 UpgradeDatabase(database, storageArea);
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1614 return false; // Stop and don't restart Orthanc (cf. issue 29)
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1615 }
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1616 else if (currentVersion != ORTHANC_DATABASE_VERSION)
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1617 {
2955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1618 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion,
3018
e3b5c07146a3 speeding up the computation of the size of the attachments in SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1619 "The database schema must be upgraded from version " +
2955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1620 boost::lexical_cast<std::string>(currentVersion) + " to " +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1621 boost::lexical_cast<std::string>(ORTHANC_DATABASE_VERSION) +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1622 ": Please run Orthanc with the \"--upgrade\" argument");
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1623 }
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1624
4628
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1625 {
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1626 static const char* const CHECK_REVISIONS = "CheckRevisions";
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1627
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1628 OrthancConfiguration::ReaderLock lock;
4640
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1629
4628
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1630 if (lock.GetConfiguration().GetBooleanParameter(CHECK_REVISIONS, false))
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1631 {
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1632 if (database.HasRevisionsSupport())
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1633 {
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1634 LOG(INFO) << "Handling of revisions is enabled, and the custom database back-end *has* "
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1635 << "support for revisions of metadata and attachments";
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1636 }
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1637 else
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1638 {
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1639 LOG(WARNING) << "The custom database back-end has *no* support for revisions of metadata and attachments, "
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1640 << "but configuration option \"" << CHECK_REVISIONS << "\" is set to \"true\"";
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1641 }
4640
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1642
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1643 static const char* const STORE_MD5 = "StoreMD5ForAttachments";
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1644
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1645 if (!lock.GetConfiguration().GetBooleanParameter(STORE_MD5, true))
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1646 {
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1647 throw OrthancException(
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1648 ErrorCode_ParameterOutOfRange,
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1649 "The revision system is enabled by configuration option \"" + std::string(CHECK_REVISIONS) +
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1650 "\", but won't work properly for attachments if \"" + std::string(STORE_MD5) + "\" is set to \"false\"");
66109d24d26e "ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4628
diff changeset
1651 }
4628
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1652 }
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1653 }
5fabef29c4ff added new primitive "hasRevisionsSupport" in database SDK, added "CheckRevisions" to URI "/system"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4623
diff changeset
1654
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1655 bool success = ConfigureServerContext
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1656 (database, storageArea, plugins, loadJobsFromDatabase);
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1657
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1658 database.Close();
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1659
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1660 return success;
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1661 }
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1662
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1663
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1664 static bool ConfigurePlugins(int argc,
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1665 char* argv[],
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1666 bool upgradeDatabase,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1667 bool loadJobsFromDatabase)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1668 {
3712
2a170a8f1faf replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3643
diff changeset
1669 std::unique_ptr<IDatabaseWrapper> databasePtr;
2a170a8f1faf replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3643
diff changeset
1670 std::unique_ptr<IStorageArea> storage;
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1671
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1672 #if ORTHANC_ENABLE_PLUGINS == 1
4604
2c702cfae274 New option "DatabaseServerIdentifier" to identify the server among a pool of Orthanc servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4551
diff changeset
1673 std::string databaseServerIdentifier;
2c702cfae274 New option "DatabaseServerIdentifier" to identify the server among a pool of Orthanc servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4551
diff changeset
1674 {
2c702cfae274 New option "DatabaseServerIdentifier" to identify the server among a pool of Orthanc servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4551
diff changeset
1675 OrthancConfiguration::ReaderLock lock;
2c702cfae274 New option "DatabaseServerIdentifier" to identify the server among a pool of Orthanc servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4551
diff changeset
1676 databaseServerIdentifier = lock.GetConfiguration().GetDatabaseServerIdentifier();
2c702cfae274 New option "DatabaseServerIdentifier" to identify the server among a pool of Orthanc servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4551
diff changeset
1677 }
2c702cfae274 New option "DatabaseServerIdentifier" to identify the server among a pool of Orthanc servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4551
diff changeset
1678
2c702cfae274 New option "DatabaseServerIdentifier" to identify the server among a pool of Orthanc servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4551
diff changeset
1679 OrthancPlugins plugins(databaseServerIdentifier);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1680 plugins.SetCommandLineArguments(argc, argv);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1681 LoadPlugins(plugins);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1682
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1683 IDatabaseWrapper* database = NULL;
1630
ffd23c0104af "/system" URI gives information about the plugins used for storage area and DB back-end
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
1684 if (plugins.HasDatabaseBackend())
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1685 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1686 LOG(WARNING) << "Using a custom database from plugins";
1630
ffd23c0104af "/system" URI gives information about the plugins used for storage area and DB back-end
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1615
diff changeset
1687 database = &plugins.GetDatabaseBackend();
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1688 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1689 else
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1690 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1691 databasePtr.reset(CreateDatabaseWrapper());
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1692 database = databasePtr.get();
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1693 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1694
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1695 if (plugins.HasStorageArea())
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1696 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1697 LOG(WARNING) << "Using a custom storage area from plugins";
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1698 storage.reset(plugins.CreateStorageArea());
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1699 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1700 else
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1701 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1702 storage.reset(CreateStorageArea());
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1703 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1704
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1705 assert(database != NULL);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1706 assert(storage.get() != NULL);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1707
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1708 return ConfigureDatabase(*database, *storage, &plugins,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1709 upgradeDatabase, loadJobsFromDatabase);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1710
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1711 #elif ORTHANC_ENABLE_PLUGINS == 0
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1712 // The plugins are disabled
3048
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1713
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1714 databasePtr.reset(CreateDatabaseWrapper());
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1715 storage.reset(CreateStorageArea());
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1716
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1717 assert(databasePtr.get() != NULL);
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1718 assert(storage.get() != NULL);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1719
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1720 return ConfigureDatabase(*databasePtr, *storage, NULL,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1721 upgradeDatabase, loadJobsFromDatabase);
1455
a68545767975 Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1452
diff changeset
1722
a68545767975 Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1452
diff changeset
1723 #else
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1724 # error The macro ORTHANC_ENABLE_PLUGINS must be set to 0 or 1
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1725 #endif
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1726 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1727
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1728
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1729 static bool StartOrthanc(int argc,
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1730 char* argv[],
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1731 bool upgradeDatabase,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1732 bool loadJobsFromDatabase)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1733 {
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1734 return ConfigurePlugins(argc, argv, upgradeDatabase, loadJobsFromDatabase);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1735 }
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1736
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1737
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1738 static bool SetCategoryVerbosity(const Verbosity verbosity,
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1739 const std::string& category)
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1740 {
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1741 Logging::LogCategory c;
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1742 if (LookupCategory(c, category))
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1743 {
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1744 SetCategoryVerbosity(c, verbosity);
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1745 return true;
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1746 }
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1747 else
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1748 {
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1749 return false;
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1750 }
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1751 }
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1752
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1753
2079
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1754 static bool DisplayPerformanceWarning()
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1755 {
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1756 (void) DisplayPerformanceWarning; // Disable warning about unused function
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1757 LOG(WARNING) << "Performance warning: Non-release build, runtime debug assertions are turned on";
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1758 return true;
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1759 }
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1760
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1761
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1762 int main(int argc, char* argv[])
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1763 {
1485
27661b33f624 Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1455
diff changeset
1764 Logging::Initialize();
4280
58e757ded69e SetDcmtkVerbosity()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4273
diff changeset
1765 SetGlobalVerbosity(Verbosity_Default);
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1766
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1767 bool upgradeDatabase = false;
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1768 bool loadJobsFromDatabase = true;
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1769 const char* configurationFile = NULL;
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1770
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1771
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1772 /**
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1773 * Parse the command-line options.
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1774 **/
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1775
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
1776 for (int i = 1; i < argc; i++)
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
1777 {
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1778 std::string argument(argv[i]);
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1779
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1780 if (argument.empty())
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1781 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1782 // Ignore empty arguments
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1783 }
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1784 else if (argument[0] != '-')
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1785 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1786 if (configurationFile != NULL)
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1787 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1788 LOG(ERROR) << "More than one configuration path were provided on the command line, aborting";
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1789 return -1;
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1790 }
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1791 else
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1792 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1793 // Use the first argument that does not start with a "-" as
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1794 // the configuration file
2018
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
1795
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
1796 // TODO WHAT IS THE ENCODING?
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1797 configurationFile = argv[i];
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1798 }
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1799 }
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1800 else if (argument == "--errors")
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1801 {
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1802 PrintErrors(argv[0]);
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1803 return 0;
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1804 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1805 else if (argument == "--help")
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1806 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1807 PrintHelp(argv[0]);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1808 return 0;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1809 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1810 else if (argument == "--version")
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1811 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1812 PrintVersion(argv[0]);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1813 return 0;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1814 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1815 else if (argument == "--verbose")
137
0e97abc7b950 fix of a bug in older versions of sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1816 {
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1817 SetGlobalVerbosity(Verbosity_Verbose);
137
0e97abc7b950 fix of a bug in older versions of sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1818 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1819 else if (argument == "--trace")
137
0e97abc7b950 fix of a bug in older versions of sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1820 {
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1821 SetGlobalVerbosity(Verbosity_Trace);
137
0e97abc7b950 fix of a bug in older versions of sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1822 }
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1823 else if (boost::starts_with(argument, "--verbose-") &&
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1824 SetCategoryVerbosity(Verbosity_Verbose, argument.substr(10)))
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1825 {
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1826 // New in Orthanc 1.8.1
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1827 }
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1828 else if (boost::starts_with(argument, "--trace-") &&
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1829 SetCategoryVerbosity(Verbosity_Trace, argument.substr(8)))
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1830 {
4273
0034f855c023 tuning log categories from command-line, and binary compat with orthanc framework 1.7.2
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4270
diff changeset
1831 // New in Orthanc 1.8.1
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1832 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1833 else if (boost::starts_with(argument, "--logdir="))
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
1834 {
2018
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
1835 // TODO WHAT IS THE ENCODING?
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1836 const std::string directory = argument.substr(9);
1490
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1837
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1838 try
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1839 {
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1840 Logging::SetTargetFolder(directory);
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1841 }
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1842 catch (OrthancException&)
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1843 {
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1844 LOG(ERROR) << "The directory where to store the log files ("
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1845 << directory << ") is inexistent, aborting.";
1490
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1846 return -1;
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
1847 }
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
1848 }
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1849 else if (boost::starts_with(argument, "--logfile="))
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1850 {
2018
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
1851 // TODO WHAT IS THE ENCODING?
4270
251a8b07fa37 logging categories
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4243
diff changeset
1852 const std::string file = argument.substr(10);
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1853
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1854 try
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1855 {
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1856 Logging::SetTargetFile(file);
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1857 }
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1858 catch (OrthancException&)
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1859 {
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1860 LOG(ERROR) << "Cannot write to the specified log file ("
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1861 << file << "), aborting.";
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1862 return -1;
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1863 }
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1864 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1865 else if (argument == "--upgrade")
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1866 {
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1867 upgradeDatabase = true;
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1868 }
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1869 else if (argument == "--no-jobs")
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1870 {
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1871 loadJobsFromDatabase = false;
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1872 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1873 else if (boost::starts_with(argument, "--config="))
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
1874 {
2018
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
1875 // TODO WHAT IS THE ENCODING?
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
1876 std::string configurationSample;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4026
diff changeset
1877 GetFileResource(configurationSample, ServerResources::CONFIGURATION_SAMPLE);
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
1878
684
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
1879 #if defined(_WIN32)
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
1880 // Replace UNIX newlines with DOS newlines
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
1881 boost::replace_all(configurationSample, "\n", "\r\n");
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
1882 #endif
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
1883
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1884 std::string target = argument.substr(9);
2295
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1885
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1886 try
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1887 {
3526
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1888 if (target == "-")
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1889 {
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1890 // New in 1.5.8: Print to stdout
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1891 std::cout << configurationSample;
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1892 }
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1893 else
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1894 {
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1895 SystemToolbox::WriteFile(configurationSample, target);
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1896 }
2295
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1897 return 0;
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1898 }
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1899 catch (OrthancException&)
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1900 {
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1901 LOG(ERROR) << "Cannot write sample configuration as file \"" << target << "\"";
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1902 return -1;
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
1903 }
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
1904 }
4399
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1905 else if (boost::starts_with(argument, "--openapi="))
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1906 {
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1907 std::string target = argument.substr(10);
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1908
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1909 try
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1910 {
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1911 Json::Value openapi;
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1912
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1913 {
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1914 SQLiteDatabaseWrapper inMemoryDatabase;
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1915 inMemoryDatabase.Open();
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1916 MemoryStorageArea inMemoryStorage;
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1917 ServerContext context(inMemoryDatabase, inMemoryStorage, true /* unit testing */, 0 /* max completed jobs */);
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1918 OrthancRestApi restApi(context, false /* no Orthanc Explorer */);
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1919 restApi.GenerateOpenApiDocumentation(openapi);
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1920 context.Stop();
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1921 }
4403
ad646ff506d0 cont openapi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4399
diff changeset
1922
ad646ff506d0 cont openapi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4399
diff changeset
1923 openapi["info"]["version"] = ORTHANC_VERSION;
ad646ff506d0 cont openapi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4399
diff changeset
1924 openapi["info"]["title"] = "Orthanc API";
4425
d6cb9e91a3d6 added openapi description
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4413
diff changeset
1925 openapi["info"]["description"] =
d6cb9e91a3d6 added openapi description
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4413
diff changeset
1926 "This is the full documentation of the [REST API](https://book.orthanc-server.com/users/rest.html) "
d6cb9e91a3d6 added openapi description
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4413
diff changeset
1927 "of Orthanc.<p>This reference is automatically generated from the source code of Orthanc. A "
d6cb9e91a3d6 added openapi description
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4413
diff changeset
1928 "[shorter cheat sheet](https://book.orthanc-server.com/users/rest-cheatsheet.html) is part of "
d6cb9e91a3d6 added openapi description
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4413
diff changeset
1929 "the Orthanc Book.<p>An earlier, manually crafted version from August 2019, is [still available]"
d6cb9e91a3d6 added openapi description
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4413
diff changeset
1930 "(2019-08-orthanc-openapi.html), but is not up-to-date anymore ([source]"
d6cb9e91a3d6 added openapi description
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4413
diff changeset
1931 "(https://groups.google.com/g/orthanc-users/c/NUiJTEICSl8/m/xKeqMrbqAAAJ)).";
4403
ad646ff506d0 cont openapi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4399
diff changeset
1932
ad646ff506d0 cont openapi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4399
diff changeset
1933 Json::Value server = Json::objectValue;
ad646ff506d0 cont openapi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4399
diff changeset
1934 server["url"] = "https://demo.orthanc-server.com/";
ad646ff506d0 cont openapi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4399
diff changeset
1935 openapi["servers"].append(server);
4399
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1936
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1937 std::string s;
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1938 Toolbox::WriteStyledJson(s, openapi);
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1939
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1940 if (target == "-")
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1941 {
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1942 std::cout << s; // Print to stdout
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1943 }
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1944 else
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1945 {
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1946 SystemToolbox::WriteFile(s, target);
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1947 }
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1948 return 0;
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1949 }
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1950 catch (OrthancException&)
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1951 {
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1952 LOG(ERROR) << "Cannot export OpenAPI documentation as file \"" << target << "\"";
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1953 return -1;
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1954 }
80fd140b12ba New command-line option: "--openapi" to write the OpenAPI documentation of the REST API to a file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4382
diff changeset
1955 }
4412
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1956 else if (boost::starts_with(argument, "--cheatsheet="))
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1957 {
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1958 std::string target = argument.substr(13);
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1959
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1960 try
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1961 {
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1962 std::string cheatsheet;
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1963
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1964 {
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1965 SQLiteDatabaseWrapper inMemoryDatabase;
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1966 inMemoryDatabase.Open();
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1967 MemoryStorageArea inMemoryStorage;
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1968 ServerContext context(inMemoryDatabase, inMemoryStorage, true /* unit testing */, 0 /* max completed jobs */);
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1969 OrthancRestApi restApi(context, false /* no Orthanc Explorer */);
4413
22a1352a0823 cont openapi
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4412
diff changeset
1970 restApi.GenerateReStructuredTextCheatSheet(cheatsheet, "https://api.orthanc-server.com/index.html");
4412
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1971 context.Stop();
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1972 }
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1973
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1974 if (target == "-")
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1975 {
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1976 std::cout << cheatsheet; // Print to stdout
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1977 }
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1978 else
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1979 {
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1980 SystemToolbox::WriteFile(cheatsheet, target);
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1981 }
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1982 return 0;
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1983 }
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1984 catch (OrthancException&)
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1985 {
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1986 LOG(ERROR) << "Cannot export REST cheat sheet as file \"" << target << "\"";
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1987 return -1;
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1988 }
68b96234fbd6 automated generation of the cheat sheet of the REST API, to be included in the Orthanc Book
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4403
diff changeset
1989 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1990 else
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1991 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1992 LOG(WARNING) << "Option unsupported by the core of Orthanc: " << argument;
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1993 }
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
1994 }
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
1995
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1996
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1997 /**
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1998 * Launch Orthanc.
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1999 **/
1102
ce6386b37afd avoid unnecessary exceptions on Orthanc startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
2000
1866
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2001 {
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2002 std::string version(ORTHANC_VERSION);
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2003
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2004 if (std::string(ORTHANC_VERSION) == "mainline")
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2005 {
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2006 try
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2007 {
2140
aa4b8895cd23 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2136
diff changeset
2008 boost::filesystem::path exe(SystemToolbox::GetPathToExecutable());
1866
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2009 std::time_t creation = boost::filesystem::last_write_time(exe);
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2010 boost::posix_time::ptime converted(boost::posix_time::from_time_t(creation));
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2011 version += " (" + boost::posix_time::to_iso_string(converted) + ")";
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2012 }
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2013 catch (...)
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2014 {
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2015 }
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2016 }
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2017
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2018 LOG(WARNING) << "Orthanc version: " << version;
2079
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
2019 assert(DisplayPerformanceWarning());
4009
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2020
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2021 std::string s = "Architecture: ";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2022 if (sizeof(void*) == 4)
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2023 {
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2024 s += "32-bit, ";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2025 }
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2026 else if (sizeof(void*) == 8)
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2027 {
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2028 s += "64-bit, ";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2029 }
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2030 else
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2031 {
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2032 s += "unsupported pointer size, ";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2033 }
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2034
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2035 switch (Toolbox::DetectEndianness())
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2036 {
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2037 case Endianness_Little:
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2038 s += "little endian";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2039 break;
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2040
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2041 case Endianness_Big:
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2042 s += "big endian";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2043 break;
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2044
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2045 default:
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2046 s += "unsupported endianness";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2047 break;
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2048 }
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2049
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2050 LOG(INFO) << s;
1866
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2051 }
1102
ce6386b37afd avoid unnecessary exceptions on Orthanc startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
2052
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2053 int status = 0;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2054 try
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2055 {
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
2056 for (;;)
270
e6a4c4329481 parameters for storage capacity
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
2057 {
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
2058 OrthancInitialize(configurationFile);
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2059
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
2060 bool restart = StartOrthanc(argc, argv, upgradeDatabase, loadJobsFromDatabase);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
2061 if (restart)
23
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2062 {
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
2063 OrthancFinalize();
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2064 LOG(WARNING) << "Logging system is resetting";
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2065 Logging::Reset();
23
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2066 }
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2067 else
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2068 {
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
2069 break;
23
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2070 }
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2071 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2072 }
1245
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2073 catch (const OrthancException& e)
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2074 {
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
2075 LOG(ERROR) << "Uncaught exception, stopping now: [" << e.What() << "] (code " << e.GetErrorCode() << ")";
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
2076 #if defined(_WIN32)
1734
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2077 if (e.GetErrorCode() >= ErrorCode_START_PLUGINS)
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2078 {
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2079 status = static_cast<int>(ErrorCode_Plugin);
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2080 }
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2081 else
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2082 {
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2083 status = static_cast<int>(e.GetErrorCode());
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2084 }
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2085
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
2086 #else
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2087 status = -1;
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
2088 #endif
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2089 }
1245
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2090 catch (const std::exception& e)
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2091 {
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2092 LOG(ERROR) << "Uncaught exception, stopping now: [" << e.what() << "]";
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2093 status = -1;
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2094 }
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2095 catch (const std::string& s)
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2096 {
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2097 LOG(ERROR) << "Uncaught exception, stopping now: [" << s << "]";
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2098 status = -1;
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2099 }
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2100 catch (...)
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2101 {
1223
5bd4c9f85b4c fix race condition while unregistering plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
2102 LOG(ERROR) << "Native exception, stopping now. Check your plugins, if any.";
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2103 status = -1;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2104 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2105
690
2e67366aab83 case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 689
diff changeset
2106 LOG(WARNING) << "Orthanc has stopped";
2e67366aab83 case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 689
diff changeset
2107
4026
05a363186da6 ORTHANC_BUILDING_FRAMEWORK_LIBRARY, Orthanc::InitializeFramework()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4009
diff changeset
2108 OrthancFinalize();
1485
27661b33f624 Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1455
diff changeset
2109
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2110 return status;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2111 }