annotate OrthancServer/Sources/main.cpp @ 4228:c8c0bbaaace3

write access to webdav
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 Oct 2020 12:45:11 +0200
parents 7fff7e683d65
children b313a0001893
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
3640
94f4a18a79cc upgrade to year 2020
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 *
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * modify it under the terms of the GNU General Public License as
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * published by the Free Software Foundation, either version 3 of the
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * License, or (at your option) any later version.
136
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
11 *
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
12 * In addition, as a special exception, the copyright holders of this
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
13 * program give permission to link the code of its release with the
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
14 * OpenSSL project's "OpenSSL" library (or with modified versions of it
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
15 * that use the same license as the "OpenSSL" library), and distribute
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
16 * the linked executables. You must obey the GNU General Public License
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
17 * in all respects for all of the code used other than "OpenSSL". If you
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
18 * modify file(s) with this exception, you may extend this exception to
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
19 * your version of the file(s), but you are not obligated to do so. If
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
20 * you do not wish to do so, delete this exception statement from your
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
21 * version. If you delete this exception statement from all source files
fe180eae201d openssl exception
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 133
diff changeset
22 * in the program, then also delete it here.
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 *
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 * 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
25 * WITHOUT ANY WARRANTY; without even the implied warranty of
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 * General Public License for more details.
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 *
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 * You should have received a copy of the GNU General Public License
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 * along with this program. If not, see <http://www.gnu.org/licenses/>.
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 **/
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33
831
84513f2ee1f3 pch for unit tests and server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 824
diff changeset
34 #include "PrecompiledHeadersServer.h"
750
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 730
diff changeset
35 #include "OrthancRestApi/OrthancRestApi.h"
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
37 #include <boost/algorithm/string/predicate.hpp>
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38
4045
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
39 #include "../../OrthancFramework/Sources/Compatibility.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
40 #include "../../OrthancFramework/Sources/DicomFormat/DicomArray.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
41 #include "../../OrthancFramework/Sources/DicomNetworking/DicomAssociationParameters.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
42 #include "../../OrthancFramework/Sources/DicomNetworking/DicomServer.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
43 #include "../../OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
44 #include "../../OrthancFramework/Sources/HttpServer/FilesystemHttpHandler.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
45 #include "../../OrthancFramework/Sources/HttpServer/HttpServer.h"
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
46 #include "../../OrthancFramework/Sources/HttpServer/IWebDavBucket.h" // TODO
4045
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
47 #include "../../OrthancFramework/Sources/Logging.h"
05b8fd21089c fix path
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4044
diff changeset
48 #include "../../OrthancFramework/Sources/Lua/LuaFunctionCall.h"
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
49 #include "../Plugins/Engine/OrthancPlugins.h"
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4026
diff changeset
50 #include "EmbeddedResourceHttpHandler.h"
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
51 #include "OrthancConfiguration.h"
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
52 #include "OrthancFindRequestHandler.h"
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4026
diff changeset
53 #include "OrthancGetRequestHandler.h"
62
a70bb32802ae renaming Server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
54 #include "OrthancInitialization.h"
619
70d0f27e5bd3 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 618
diff changeset
55 #include "OrthancMoveRequestHandler.h"
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
56 #include "ServerContext.h"
3636
bce6ee64f2a4 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3635
diff changeset
57 #include "ServerJobs/StorageCommitmentScpJob.h"
730
309e686b41e7 better logging about nonexistent tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 725
diff changeset
58 #include "ServerToolbox.h"
3736
0540b54324f1 StorageCommitmentReports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3734
diff changeset
59 #include "StorageCommitmentReports.h"
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60
62
a70bb32802ae renaming Server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 57
diff changeset
61 using namespace Orthanc;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63
613
60d90e48e809 query/retrieve
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 565
diff changeset
64 class OrthancStoreRequestHandler : public IStoreRequestHandler
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65 {
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 private:
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
67 ServerContext& context_;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69 public:
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
70 explicit OrthancStoreRequestHandler(ServerContext& context) :
3635
8c0ef729d5a8 StorageCommitmentScpJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3615
diff changeset
71 context_(context)
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 {
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
1573
3309878b3e16 more information about the origin of requests submitted to the DICOM handlers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1572
diff changeset
75
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
76 virtual void Handle(const std::string& dicomFile,
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77 const DicomMap& dicomSummary,
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 const Json::Value& dicomJson,
1573
3309878b3e16 more information about the origin of requests submitted to the DICOM handlers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1572
diff changeset
79 const std::string& remoteIp,
1285
5730f374e4e6 Access to called AET and remote AET from Lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1280
diff changeset
80 const std::string& remoteAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
81 const std::string& calledAet) ORTHANC_OVERRIDE
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82 {
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83 if (dicomFile.size() > 0)
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84 {
1005
84b6d7bca6db refactoring of ServerContext::Store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 996
diff changeset
85 DicomInstanceToStore toStore;
2664
a21b244efb37 serialization of DicomModalityStoreJob, OrthancPeerStoreJob and ResourceModificationJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2640
diff changeset
86 toStore.SetOrigin(DicomInstanceOrigin::FromDicomProtocol
a21b244efb37 serialization of DicomModalityStoreJob, OrthancPeerStoreJob and ResourceModificationJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2640
diff changeset
87 (remoteIp.c_str(), remoteAet.c_str(), calledAet.c_str()));
3841
be7df7fe3d80 avoid one memcpy of the DICOM buffer on "POST /instances"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3801
diff changeset
88 toStore.SetBuffer(dicomFile.c_str(), dicomFile.size());
1005
84b6d7bca6db refactoring of ServerContext::Store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 996
diff changeset
89 toStore.SetSummary(dicomSummary);
84b6d7bca6db refactoring of ServerContext::Store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 996
diff changeset
90 toStore.SetJson(dicomJson);
84b6d7bca6db refactoring of ServerContext::Store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 996
diff changeset
91
84b6d7bca6db refactoring of ServerContext::Store
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 996
diff changeset
92 std::string id;
3814
023b2a9f3aa1 new enum: StoreInstanceMode
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3813
diff changeset
93 context_.Store(id, toStore, StoreInstanceMode_Default);
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 }
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_;
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
273 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
274
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
275 public:
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
276 explicit OrthancApplicationEntityFilter(ServerContext& context) :
2353
2421c137c304 reject connections earlier if DicomAlwaysAllowStore == false
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2352
diff changeset
277 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
278 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
279 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
280 alwaysAllowEcho_ = lock.GetConfiguration().GetBooleanParameter("DicomAlwaysAllowEcho", true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
281 alwaysAllowStore_ = lock.GetConfiguration().GetBooleanParameter("DicomAlwaysAllowStore", true);
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
282 }
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
283
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
284 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
285 const std::string& remoteAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
286 const std::string& calledAet) ORTHANC_OVERRIDE
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
287 {
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
288 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
289 << " on IP " << remoteIp << ", calling AET " << calledAet;
2353
2421c137c304 reject connections earlier if DicomAlwaysAllowStore == false
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2352
diff changeset
290
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
291 if (alwaysAllowEcho_ ||
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
292 alwaysAllowStore_)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
293 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
294 return true;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
295 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
296 else
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
297 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
298 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
299 return lock.GetConfiguration().IsKnownAETitle(remoteAet, remoteIp);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
300 }
620
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
301 }
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
302
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
303 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
304 const std::string& remoteAet,
2352
3ab96768d144 Fix issue 52 (DICOM level security association problems)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2299
diff changeset
305 const std::string& calledAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
306 DicomRequestType type) ORTHANC_OVERRIDE
620
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
307 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
308 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
309 << 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
310
2375
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
311 if (type == DicomRequestType_Echo &&
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
312 alwaysAllowEcho_)
620
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
313 {
2375
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
314 // 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
315 return true;
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
316 }
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
317 else if (type == DicomRequestType_Store &&
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
318 alwaysAllowStore_)
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
319 {
3ec85ff48374 New security-related options: "DicomAlwaysAllowEcho"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2353
diff changeset
320 // 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
321 return true;
4aa6f0d79947 security filter for dicom requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 619
diff changeset
322 }
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
323 else
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
324 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
325 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
326
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
327 std::list<RemoteModalityParameters> modalities;
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
328 if (lock.GetConfiguration().LookupDicomModalitiesUsingAETitle(modalities, remoteAet))
2872
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
329 {
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
330 if (modalities.size() == 1) // don't check the IP if there's only one modality with this AET
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
331 {
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
332 return modalities.front().IsRequestAllowed(type);
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
333 }
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
334 else // if there are multiple modalities with the same AET, check the one matching this IP
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
335 {
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
336 for (std::list<RemoteModalityParameters>::const_iterator it = modalities.begin(); it != modalities.end(); ++it)
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
337 {
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
338 if (it->GetHost() == remoteIp)
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
339 {
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
340 return it->IsRequestAllowed(type);
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
341 }
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
342 }
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
343
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
344 LOG(WARNING) << "Unable to check DICOM authorization for AET " << remoteAet
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
345 << " on IP " << remoteIp << ", " << modalities.size()
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
346 << " modalites found with this AET but none of them matching the IP";
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
347 }
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
348 return false;
2872
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
349 }
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
350 else
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
351 {
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
352 return false;
9d08edde614b Possibility to restrict the allowed DICOM commands for each modality
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2825
diff changeset
353 }
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
354 }
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
355 }
1163
3db41779d8f9 abstraction to allow/prevent transfer syntaxes on AET basis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1135
diff changeset
356
1799
4f01c9d73f02 calledAet made available to all the handlers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1797
diff changeset
357 virtual bool IsAllowedTransferSyntax(const std::string& remoteIp,
4f01c9d73f02 calledAet made available to all the handlers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1797
diff changeset
358 const std::string& remoteAet,
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
359 const std::string& calledAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
360 TransferSyntax syntax) ORTHANC_OVERRIDE
1163
3db41779d8f9 abstraction to allow/prevent transfer syntaxes on AET basis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1135
diff changeset
361 {
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
362 std::string configuration;
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
363
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
364 switch (syntax)
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
365 {
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
366 case TransferSyntax_Deflated:
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
367 configuration = "DeflatedTransferSyntaxAccepted";
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
368 break;
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
369
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
370 case TransferSyntax_Jpeg:
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
371 configuration = "JpegTransferSyntaxAccepted";
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
372 break;
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
373
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
374 case TransferSyntax_Jpeg2000:
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
375 configuration = "Jpeg2000TransferSyntaxAccepted";
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
376 break;
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
377
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
378 case TransferSyntax_JpegLossless:
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
379 configuration = "JpegLosslessTransferSyntaxAccepted";
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
380 break;
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
381
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
382 case TransferSyntax_Jpip:
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
383 configuration = "JpipTransferSyntaxAccepted";
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
384 break;
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
385
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
386 case TransferSyntax_Mpeg2:
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
387 configuration = "Mpeg2TransferSyntaxAccepted";
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
388 break;
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
389
3643
fa3ff492fb3b added TransferSyntax_Mpeg4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3640
diff changeset
390 case TransferSyntax_Mpeg4:
fa3ff492fb3b added TransferSyntax_Mpeg4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3640
diff changeset
391 configuration = "Mpeg4TransferSyntaxAccepted";
fa3ff492fb3b added TransferSyntax_Mpeg4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3640
diff changeset
392 break;
fa3ff492fb3b added TransferSyntax_Mpeg4
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3640
diff changeset
393
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
394 case TransferSyntax_Rle:
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
395 configuration = "RleTransferSyntaxAccepted";
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
396 break;
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
397
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
398 default:
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
399 throw OrthancException(ErrorCode_ParameterOutOfRange);
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
400 }
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
401
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
402 {
2616
2f3007bf0708 event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2612
diff changeset
403 std::string name = "Is" + configuration;
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
404
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
405 LuaScripting::Lock lock(context_.GetLuaScripting());
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
406
2616
2f3007bf0708 event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2612
diff changeset
407 if (lock.GetLua().IsExistingFunction(name.c_str()))
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
408 {
2616
2f3007bf0708 event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2612
diff changeset
409 LuaFunctionCall call(lock.GetLua(), name.c_str());
1799
4f01c9d73f02 calledAet made available to all the handlers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1797
diff changeset
410 call.PushString(remoteAet);
4f01c9d73f02 calledAet made available to all the handlers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1797
diff changeset
411 call.PushString(remoteIp);
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
412 call.PushString(calledAet);
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
413 return call.ExecutePredicate();
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
414 }
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
415 }
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
416
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
417 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
418 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
419 return lock.GetConfiguration().GetBooleanParameter(configuration, true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
420 }
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
421 }
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
422
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
423
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
424 virtual bool IsUnknownSopClassAccepted(const std::string& remoteIp,
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
425 const std::string& remoteAet,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
426 const std::string& calledAet) ORTHANC_OVERRIDE
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
427 {
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
428 static const char* configuration = "UnknownSopClassAccepted";
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
429
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
430 {
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
431 std::string lua = "Is" + std::string(configuration);
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
432
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
433 LuaScripting::Lock lock(context_.GetLuaScripting());
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
434
2616
2f3007bf0708 event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2612
diff changeset
435 if (lock.GetLua().IsExistingFunction(lua.c_str()))
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
436 {
2616
2f3007bf0708 event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2612
diff changeset
437 LuaFunctionCall call(lock.GetLua(), lua.c_str());
1806
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
438 call.PushString(remoteAet);
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
439 call.PushString(remoteIp);
cd213ebcaefd UnknownSopClassAccepted option
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1802
diff changeset
440 call.PushString(calledAet);
1164
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
441 return call.ExecutePredicate();
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
442 }
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
443 }
0a55d8eb194e Configuration/Lua to select the accepted C-Store SCP transfer syntaxes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1163
diff changeset
444
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
445 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
446 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
447 return lock.GetConfiguration().GetBooleanParameter(configuration, false);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
448 }
1163
3db41779d8f9 abstraction to allow/prevent transfer syntaxes on AET basis
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1135
diff changeset
449 }
618
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
450 };
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
451
5ab377df6d8b filtering on aet
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 614
diff changeset
452
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
453 class MyIncomingHttpRequestFilter : public IIncomingHttpRequestFilter
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
454 {
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
455 private:
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
456 ServerContext& context_;
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
457 OrthancPlugins* plugins_;
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
458
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
459 public:
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
460 MyIncomingHttpRequestFilter(ServerContext& context,
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
461 OrthancPlugins* plugins) :
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
462 context_(context),
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
463 plugins_(plugins)
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
464 {
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
465 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
466
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
467 virtual bool IsAllowed(HttpMethod method,
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
468 const char* uri,
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
469 const char* ip,
1959
45c4387a379c Access to the HTTP headers in the "IncomingHttpRequestFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1949
diff changeset
470 const char* username,
2268
ce5c13b95dac New function: OrthancPluginRegisterIncomingHttpRequestFilter2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2246
diff changeset
471 const IHttpHandler::Arguments& httpHeaders,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
472 const IHttpHandler::GetArguments& getArguments) ORTHANC_OVERRIDE
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
473 {
3048
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
474 #if ORTHANC_ENABLE_PLUGINS == 1
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
475 if (plugins_ != NULL &&
2268
ce5c13b95dac New function: OrthancPluginRegisterIncomingHttpRequestFilter2()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2246
diff changeset
476 !plugins_->IsAllowed(method, uri, ip, username, httpHeaders, getArguments))
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
477 {
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
478 return false;
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
479 }
3048
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
480 #endif
1962
22ddb22fce83 sample plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1959
diff changeset
481
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
482 static const char* HTTP_FILTER = "IncomingHttpRequestFilter";
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
483
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
484 LuaScripting::Lock lock(context_.GetLuaScripting());
996
cf52f3bcb2b3 clarification of Lua classes wrt multithreading
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 941
diff changeset
485
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
486 // 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
487 if (lock.GetLua().IsExistingFunction(HTTP_FILTER))
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
488 {
2616
2f3007bf0708 event queues in Lua, serialization of sequence of operations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2612
diff changeset
489 LuaFunctionCall call(lock.GetLua(), HTTP_FILTER);
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
490
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
491 switch (method)
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
492 {
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
493 case HttpMethod_Get:
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
494 call.PushString("GET");
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
495 break;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
496
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
497 case HttpMethod_Put:
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
498 call.PushString("PUT");
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
499 break;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
500
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
501 case HttpMethod_Post:
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
502 call.PushString("POST");
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
503 break;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
504
473
c9a5d72f8481 changing the namespace of HTTP enumerations
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 426
diff changeset
505 case HttpMethod_Delete:
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
506 call.PushString("DELETE");
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
507 break;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
508
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
509 default:
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
510 return true;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
511 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
512
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
513 call.PushString(uri);
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
514 call.PushString(ip);
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
515 call.PushString(username);
1959
45c4387a379c Access to the HTTP headers in the "IncomingHttpRequestFilter()" callback
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1949
diff changeset
516 call.PushStringMap(httpHeaders);
409
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
517
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
518 if (!call.ExecutePredicate())
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
519 {
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
520 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
521 return false;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
522 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
523 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
524
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
525 return true;
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
526 }
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
527 };
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
528
63f707278fc8 lua filtering of incoming http requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 407
diff changeset
529
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
530
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
531 class MyHttpExceptionFormatter : public IHttpExceptionFormatter
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
532 {
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
533 private:
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
534 bool describeErrors_;
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
535 OrthancPlugins* plugins_;
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
536
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
537 public:
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
538 MyHttpExceptionFormatter(bool describeErrors,
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
539 OrthancPlugins* plugins) :
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
540 describeErrors_(describeErrors),
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
541 plugins_(plugins)
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
542 {
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
543 }
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
544
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
545 virtual void Format(HttpOutput& output,
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
546 const OrthancException& exception,
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
547 HttpMethod method,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
548 const char* uri) ORTHANC_OVERRIDE
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
549 {
1650
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
550 {
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
551 bool isPlugin = false;
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
552
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
553 #if ORTHANC_ENABLE_PLUGINS == 1
1650
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
554 if (plugins_ != NULL)
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
555 {
1651
2e692c83e2f3 improved custom error login
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1650
diff changeset
556 plugins_->GetErrorDictionary().LogError(exception.GetErrorCode(), true);
1650
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
557 isPlugin = true;
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
558 }
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
559 #endif
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
560
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
561 if (!isPlugin)
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
562 {
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
563 LOG(ERROR) << "Exception in the HTTP handler: " << exception.What();
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
564 }
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
565 }
9f34ebfaf2c9 refactoring
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1649
diff changeset
566
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
567 Json::Value message = Json::objectValue;
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
568 ErrorCode errorCode = exception.GetErrorCode();
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
569 HttpStatus httpStatus = exception.GetHttpStatus();
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
570
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
571 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
572 bool isPlugin = false;
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
573
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
574 #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
575 if (plugins_ != NULL &&
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
576 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
577 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
578 errorCode = ErrorCode_Plugin;
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
579 isPlugin = true;
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
580 }
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
581 #endif
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
582
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
583 if (!isPlugin)
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
584 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
585 message["Message"] = exception.What();
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
586 }
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
587 }
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
588
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
589 if (!describeErrors_)
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
590 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
591 output.SendStatus(httpStatus);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
592 }
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
593 else
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
594 {
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
595 message["Method"] = EnumerationToString(method);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
596 message["Uri"] = uri;
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
597 message["HttpError"] = EnumerationToString(httpStatus);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
598 message["HttpStatus"] = httpStatus;
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
599 message["OrthancError"] = EnumerationToString(errorCode);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
600 message["OrthancStatus"] = errorCode;
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
601
2952
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
602 if (exception.HasDetails())
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
603 {
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
604 message["Details"] = exception.GetDetails();
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
605 }
4ceb9bf7b00c added details string in OrthancException
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2950
diff changeset
606
1649
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
607 std::string info = message.toStyledString();
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
608 output.SendStatus(httpStatus, info);
8040d56cb0b3 New function "OrthancPluginRegisterErrorCode()" to declare custom error codes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1645
diff changeset
609 }
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
610 }
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
611 };
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
612
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
613
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
614
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
615
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
616 static const char* const UPLOAD_FOLDER = "upload";
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
617
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
618 class DummyBucket : public IWebDavBucket // TODO
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
619 {
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
620 private:
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
621 ServerContext& context_;
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
622
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
623 static void RemoveFirstElement(std::vector<std::string>& target,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
624 const std::vector<std::string>& source)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
625 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
626 if (source.empty())
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
627 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
628 throw OrthancException(ErrorCode_ParameterOutOfRange);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
629 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
630 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
631 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
632 target.resize(source.size() - 1);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
633 for (size_t i = 1; i < source.size(); i++)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
634 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
635 target[i - 1] = source[i];
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
636 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
637 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
638 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
639
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
640 class UploadedFile : public boost::noncopyable
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
641 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
642 private:
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
643 std::string content_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
644 MimeType mime_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
645 boost::posix_time::ptime time_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
646
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
647 void Touch()
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
648 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
649 time_ = boost::posix_time::second_clock::universal_time();
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
650 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
651
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
652 public:
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
653 UploadedFile() :
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
654 mime_(MimeType_Binary)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
655 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
656 Touch();
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
657 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
658
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
659 void SetContent(const std::string& content,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
660 MimeType mime)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
661 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
662 content_ = content;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
663 mime_ = mime;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
664 Touch();
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
665 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
666
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
667 MimeType GetMimeType() const
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
668 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
669 return mime_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
670 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
671
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
672 const std::string& GetContent() const
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
673 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
674 return content_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
675 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
676
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
677 const boost::posix_time::ptime& GetTime() const
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
678 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
679 return time_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
680 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
681 };
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
682
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
683
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
684 class UploadedFolder : public boost::noncopyable
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
685 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
686 private:
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
687 typedef std::map<std::string, UploadedFile*> Files;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
688 typedef std::map<std::string, UploadedFolder*> Subfolders;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
689
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
690 Files files_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
691 Subfolders subfolders_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
692
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
693 void CheckName(const std::string& name)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
694 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
695 if (name.empty() ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
696 name.find('/') != std::string::npos ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
697 name.find('\\') != std::string::npos ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
698 name.find('\0') != std::string::npos)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
699 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
700 throw OrthancException(ErrorCode_ParameterOutOfRange,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
701 "Bad resource name for WebDAV: " + name);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
702 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
703 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
704
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
705 bool IsExisting(const std::string& name) const
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
706 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
707 return (files_.find(name) != files_.end() ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
708 subfolders_.find(name) != subfolders_.end());
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
709 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
710
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
711 public:
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
712 ~UploadedFolder()
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
713 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
714 for (Files::iterator it = files_.begin(); it != files_.end(); ++it)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
715 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
716 assert(it->second != NULL);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
717 delete it->second;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
718 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
719
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
720 for (Subfolders::iterator it = subfolders_.begin(); it != subfolders_.end(); ++it)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
721 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
722 assert(it->second != NULL);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
723 delete it->second;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
724 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
725 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
726
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
727 const UploadedFile* LookupFile(const std::string& name) const
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
728 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
729 Files::const_iterator found = files_.find(name);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
730 if (found == files_.end())
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
731 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
732 return NULL;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
733 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
734 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
735 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
736 assert(found->second != NULL);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
737 return found->second;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
738 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
739 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
740
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
741 bool CreateSubfolder(const std::string& name)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
742 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
743 CheckName(name);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
744
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
745 if (IsExisting(name))
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
746 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
747 LOG(ERROR) << "WebDAV folder already existing: " << name;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
748 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
749 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
750 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
751 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
752 subfolders_[name] = new UploadedFolder;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
753 return true;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
754 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
755 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
756
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
757 bool StoreFile(const std::string& name,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
758 const std::string& content,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
759 MimeType mime)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
760 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
761 CheckName(name);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
762
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
763 if (subfolders_.find(name) != subfolders_.end())
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
764 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
765 LOG(ERROR) << "WebDAV folder already existing: " << name;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
766 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
767 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
768
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
769 Files::iterator found = files_.find(name);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
770 if (found == files_.end())
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
771 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
772 std::unique_ptr<UploadedFile> f(new UploadedFile);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
773 f->SetContent(content, mime);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
774 files_[name] = f.release();
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
775 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
776 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
777 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
778 assert(found->second != NULL);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
779 found->second->SetContent(content, mime);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
780 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
781
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
782 return true;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
783 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
784
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
785 UploadedFolder* LookupSubfolder(const UriComponents& path)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
786 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
787 if (path.empty())
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
788 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
789 return this;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
790 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
791 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
792 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
793 Subfolders::const_iterator found = subfolders_.find(path[0]);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
794 if (found == subfolders_.end())
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
795 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
796 return NULL;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
797 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
798 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
799 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
800 assert(found->second != NULL);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
801
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
802 UriComponents p;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
803 RemoveFirstElement(p, path);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
804
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
805 return found->second->LookupSubfolder(p);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
806 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
807 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
808 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
809
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
810 void ListCollection(Collection& collection) const
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
811 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
812 for (Files::const_iterator it = files_.begin(); it != files_.end(); ++it)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
813 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
814 assert(it->second != NULL);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
815
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
816 std::unique_ptr<File> f(new File(it->first));
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
817 f->SetContentLength(it->second->GetContent().size());
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
818 f->SetCreationTime(it->second->GetTime());
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
819 collection.AddResource(f.release());
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
820 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
821
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
822 for (Subfolders::const_iterator it = subfolders_.begin(); it != subfolders_.end(); ++it)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
823 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
824 collection.AddResource(new Folder(it->first));
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
825 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
826 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
827 };
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
828
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
829 bool IsUploadedFolder(const UriComponents& path) const
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
830 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
831 return (path.size() >= 1 &&
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
832 path[0] == UPLOAD_FOLDER);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
833 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
834
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
835 UploadedFolder uploads_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
836 boost::recursive_mutex mutex_;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
837
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
838 UploadedFolder* LookupUploadedFolder(const UriComponents& path)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
839 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
840 if (IsUploadedFolder(path))
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
841 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
842 UriComponents p;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
843 RemoveFirstElement(p, path);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
844
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
845 return uploads_.LookupSubfolder(p);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
846 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
847 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
848 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
849 return NULL;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
850 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
851 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
852
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
853 public:
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
854 DummyBucket(ServerContext& context) :
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
855 context_(context)
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
856 {
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
857 }
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
858
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
859 virtual bool IsExistingFolder(const UriComponents& path) ORTHANC_OVERRIDE
4227
7fff7e683d65 basic implementation of WebDAV handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4226
diff changeset
860 {
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
861 boost::recursive_mutex::scoped_lock lock(mutex_);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
862
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
863 if (IsUploadedFolder(path))
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
864 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
865 return LookupUploadedFolder(path) != NULL;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
866 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
867 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
868 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
869 return (path.size() == 0 ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
870 (path.size() == 1 && path[0] == "Folder1") ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
871 (path.size() == 2 && path[0] == "Folder1" && path[1] == "Folder2"));
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
872 }
4227
7fff7e683d65 basic implementation of WebDAV handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4226
diff changeset
873 }
7fff7e683d65 basic implementation of WebDAV handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4226
diff changeset
874
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
875 virtual bool ListCollection(Collection& collection,
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
876 const UriComponents& path) ORTHANC_OVERRIDE
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
877 {
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
878 boost::recursive_mutex::scoped_lock lock(mutex_);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
879
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
880 if (IsUploadedFolder(path))
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
881 {
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
882 const UploadedFolder* folder = LookupUploadedFolder(path);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
883 if (folder == NULL)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
884 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
885 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
886 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
887 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
888 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
889 folder->ListCollection(collection);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
890 return true;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
891 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
892 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
893 else if (IsExistingFolder(path))
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
894 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
895 if (path.empty())
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
896 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
897 collection.AddResource(new Folder(UPLOAD_FOLDER));
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
898 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
899
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
900 for (unsigned int i = 0; i < 5; i++)
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
901 {
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
902 std::unique_ptr<File> f(new File("IM" + boost::lexical_cast<std::string>(i) + ".dcm"));
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
903 f->SetContentLength(1024 * i);
4227
7fff7e683d65 basic implementation of WebDAV handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4226
diff changeset
904 f->SetMimeType(MimeType_PlainText);
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
905 collection.AddResource(f.release());
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
906 }
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
907
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
908 for (unsigned int i = 0; i < 5; i++)
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
909 {
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
910 collection.AddResource(new Folder("Folder" + boost::lexical_cast<std::string>(i)));
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
911 }
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
912
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
913 return true;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
914 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
915 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
916 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
917 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
918 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
919 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
920
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
921 virtual bool GetFileContent(MimeType& mime,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
922 std::string& content,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
923 boost::posix_time::ptime& modificationTime,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
924 const UriComponents& path) ORTHANC_OVERRIDE
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
925 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
926 boost::recursive_mutex::scoped_lock lock(mutex_);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
927
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
928 if (path.empty())
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
929 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
930 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
931 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
932 else if (IsUploadedFolder(path))
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
933 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
934 std::vector<std::string> p(path.begin(), path.end() - 1);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
935
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
936 const UploadedFolder* folder = LookupUploadedFolder(p);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
937 if (folder == NULL)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
938 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
939 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
940 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
941
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
942 const UploadedFile* file = folder->LookupFile(path.back());
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
943 if (file == NULL)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
944 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
945 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
946 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
947 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
948 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
949 mime = file->GetMimeType();
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
950 content = file->GetContent();
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
951 modificationTime = file->GetTime();
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
952 return true;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
953 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
954 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
955 else if (path.back() == "IM0.dcm" ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
956 path.back() == "IM1.dcm" ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
957 path.back() == "IM2.dcm" ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
958 path.back() == "IM3.dcm" ||
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
959 path.back() == "IM4.dcm")
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
960 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
961 modificationTime = boost::posix_time::second_clock::universal_time();
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
962
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
963 std::string s;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
964 for (size_t i = 0; i < path.size(); i++)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
965 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
966 s += "/" + path[i];
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
967 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
968
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
969 content = "Hello world!\r\n" + s + "\r\n";
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
970 mime = MimeType_PlainText;
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
971 return true;
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
972 }
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
973 else
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
974 {
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
975 return false;
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
976 }
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
977 }
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
978
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
979
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
980 virtual bool StoreFile(const std::string& content,
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
981 const UriComponents& path) ORTHANC_OVERRIDE
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
982 {
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
983 boost::recursive_mutex::scoped_lock lock(mutex_);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
984
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
985 if (IsUploadedFolder(path))
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
986 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
987 std::vector<std::string> p(path.begin(), path.end() - 1);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
988
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
989 UploadedFolder* folder = LookupUploadedFolder(p);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
990 if (folder == NULL)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
991 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
992 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
993 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
994 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
995 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
996 printf("STORING %d bytes at %s\n", content.size(), path.back().c_str());
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
997 return folder->StoreFile(path.back(), content, SystemToolbox::AutodetectMimeType(path.back()));
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
998 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
999 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1000 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1001 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1002 LOG(WARNING) << "Writing to a read-only location in WebDAV: " << Toolbox::FlattenUri(path);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1003 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1004 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1005 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1006
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1007
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1008 virtual bool CreateFolder(const UriComponents& path)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1009 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1010 boost::recursive_mutex::scoped_lock lock(mutex_);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1011
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1012 if (IsUploadedFolder(path))
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1013 {
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1014 std::vector<std::string> p(path.begin(), path.end() - 1);
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1015
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1016 UploadedFolder* folder = LookupUploadedFolder(p);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1017 if (folder == NULL)
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1018 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1019 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1020 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1021 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1022 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1023 printf("CREATING FOLDER %s\n", path.back().c_str());
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1024 return folder->CreateSubfolder(path.back());
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1025 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1026 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1027 else
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1028 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1029 LOG(WARNING) << "Writing to a read-only location in WebDAV: " << Toolbox::FlattenUri(path);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1030 return false;
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1031 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1032 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1033
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1034
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1035 virtual void Start() ORTHANC_OVERRIDE
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1036 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1037 boost::recursive_mutex::scoped_lock lock(mutex_);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1038
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1039 LOG(WARNING) << "Starting WebDAV";
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1040 }
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1041
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1042
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1043 virtual void Stop() ORTHANC_OVERRIDE
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1044 {
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1045 boost::recursive_mutex::scoped_lock lock(mutex_);
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1046
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1047 LOG(WARNING) << "Stopping WebDAV";
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1048 }
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1049 };
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1050
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1051
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1052
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1053 static void PrintHelp(const char* path)
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1054 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1055 std::cout
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1056 << "Usage: " << path << " [OPTION]... [CONFIGURATION]" << std::endl
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
1057 << "Orthanc, lightweight, RESTful DICOM server for healthcare and medical research." << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1058 << std::endl
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1059 << "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
1060 << "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
1061 << "If no configuration path is given on the command line, a set of default " << std::endl
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
1062 << "parameters is used. Please refer to the Orthanc homepage for the full " << std::endl
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1063 << "instructions about how to use Orthanc <http://www.orthanc-server.com/>." << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1064 << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1065 << "Command-line options:" << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1066 << " --help\t\tdisplay this help and exit" << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1067 << " --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
1068 << "\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
1069 << " --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
1070 << "\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
1071 << " --config=[file]\tcreate a sample configuration file and exit" << std::endl
3526
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
1072 << "\t\t\t(if file is \"-\", dumps to stdout)" << std::endl
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1073 << " --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
1074 << " --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
1075 << " --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
1076 << " --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
1077 << "\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
1078 << "\t\t\tincompatible with former versions of Orthanc)" << std::endl
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1079 << " --no-jobs\t\tDon't restart the jobs that were stored during" << std::endl
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1080 << "\t\t\tthe last execution of Orthanc" << std::endl
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
1081 << " --version\t\toutput version information and exit" << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1082 << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1083 << "Exit status:" << std::endl
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1084 << " 0 if success," << std::endl
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1085 #if defined(_WIN32)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1086 << "!= 0 if error (use the --errors option to get the list of possible errors)." << std::endl
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1087 #else
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1088 << " -1 if error (have a look at the logs)." << std::endl
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1089 #endif
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1090 << std::endl;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1091 }
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1092
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1093
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1094 static void PrintVersion(const char* path)
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1095 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1096 std::cout
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1097 << path << " " << ORTHANC_VERSION << std::endl
1900
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1872
diff changeset
1098 << "Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics Department, University Hospital of Liege (Belgium)" << std::endl
3640
94f4a18a79cc upgrade to year 2020
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
1099 << "Copyright (C) 2017-2020 Osimis S.A. (Belgium)" << std::endl
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1100 << "Licensing GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>, with OpenSSL exception." << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1101 << "This is free software: you are free to change and redistribute it." << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1102 << "There is NO WARRANTY, to the extent permitted by law." << std::endl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1103 << std::endl
3063
fa5ad4368fe3 new mail address
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3060
diff changeset
1104 << "Written by Sebastien Jodogne <s.jodogne@orthanc-labs.com>" << std::endl;
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1105 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1106
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1107
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1108 static void PrintErrorCode(ErrorCode code, const char* description)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1109 {
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1110 std::cout
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1111 << std::right << std::setw(16)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1112 << static_cast<int>(code)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1113 << " " << description << std::endl;
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1114 }
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1115
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1116
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1117 static void PrintErrors(const char* path)
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1118 {
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1119 std::cout
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1120 << 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
1121 << "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
1122 << 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
1123 << "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
1124 << std::endl << std::endl;
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1125
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1126 // The content of the following brackets is automatically generated
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1127 // by the "GenerateErrorCodes.py" script
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1128 {
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
1129 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
1130 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
1131 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
1132 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
1133 PrintErrorCode(ErrorCode_ParameterOutOfRange, "Parameter out of range");
2133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2132
diff changeset
1134 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
1135 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
1136 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
1137 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
1138 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
1139 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
1140 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
1141 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
1142 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
1143 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
1144 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
1145 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
1146 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
1147 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
1148 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
1149 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
1150 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
1151 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
1152 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
1153 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
1154 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
1155 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
1156 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
1157 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
1158 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
1159 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
1160 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
1161 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
1162 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
1163 PrintErrorCode(ErrorCode_EmptyRequest, "The request is empty");
1781
5ad4e4d92ecb AcceptMediaDispatcher bootstrap
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1746
diff changeset
1164 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
1165 PrintErrorCode(ErrorCode_NullPointer, "Cannot handle a NULL pointer");
2486
ad8f30fc28d1 new error code: DatabaseUnavailable
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2447
diff changeset
1166 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
1167 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
1168 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
1169 PrintErrorCode(ErrorCode_SslInitialization, "Cannot initialize SSL encryption, check out your certificates");
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
1170 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
1171 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
1172 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
1173 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
1174 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
1175 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
1176 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
1177 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
1178 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
1179 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
1180 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
1181 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
1182 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
1183 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
1184 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
1185 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
1186 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
1187 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
1188 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
1189 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
1190 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
1191 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
1192 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
1193 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
1194 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
1195 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
1196 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
1197 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
1198 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
1199 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
1200 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
1201 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
1202 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
1203 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
1204 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
1205 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
1206 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
1207 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
1208 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
1209 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
1210 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
1211 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
1212 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
1213 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
1214 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
1215 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
1216 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
1217 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
1218 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
1219 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
1220 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
1221 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
1222 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
1223 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
1224 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
1225 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
1226 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
1227 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
1228 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
1229 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
1230 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
1231 PrintErrorCode(ErrorCode_UnsupportedMediaType, "Unsupported media type");
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1232 }
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1233
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1234 std::cout << std::endl;
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1235 }
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1236
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1237
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1238
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1239 #if ORTHANC_ENABLE_PLUGINS == 1
1434
f9cd40166269 refactoring of OrthancPlugins, improvement in ServeFolders
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1433
diff changeset
1240 static void LoadPlugins(OrthancPlugins& plugins)
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1241 {
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
1242 std::list<std::string> pathList;
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1243
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1244 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1245 OrthancConfiguration::ReaderLock lock;
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
1246 lock.GetConfiguration().GetListOfStringsParameter(pathList, "Plugins");
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1247 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1248
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1249 for (std::list<std::string>::const_iterator
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
1250 it = pathList.begin(); it != pathList.end(); ++it)
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1251 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1252 std::string path;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1253
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1254 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1255 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1256 path = lock.GetConfiguration().InterpretStringParameterAsPath(*it);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1257 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1258
1321
0f9e0e808e0f more explicit message
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1310
diff changeset
1259 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
1260 plugins.GetManager().RegisterPlugin(path);
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1261 }
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1262 }
1632
eb8fbcf008b5 fix build with plugins disabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1630
diff changeset
1263 #endif
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1264
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1265
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1266
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1267 // Returns "true" if restart is required
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1268 static bool WaitForExit(ServerContext& context,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
1269 const OrthancRestApi& restApi)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1270 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1271 LOG(WARNING) << "Orthanc has started";
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1272
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1273 #if ORTHANC_ENABLE_PLUGINS == 1
1741
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1274 if (context.HasPlugins())
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1275 {
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1276 context.GetPlugins().SignalOrthancStarted();
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1277 }
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1278 #endif
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1279
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
1280 context.GetLuaScripting().Start();
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
1281 context.GetLuaScripting().Execute("Initialize");
1455
a68545767975 Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1452
diff changeset
1282
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
1283 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
1284
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
1285 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
1286 {
2140
aa4b8895cd23 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2136
diff changeset
1287 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
1288 restart = restApi.IsResetRequestReceived();
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1289
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
1290 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
1291 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
1292 {
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
1293 // 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
1294
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1295 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1296 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
1297 {
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
1298 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
1299 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
1300 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
1301 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
1302 }
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
1303 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
1304 {
2946
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1305 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
1306 << "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
1307 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
1308 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
1309 }
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
1310 }
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
1311 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
1312 {
4dafe2a0d3ab Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2009
diff changeset
1313 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
1314 }
2009
e2dd40abce72 catching SIGHUP signal
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1315 }
e2dd40abce72 catching SIGHUP signal
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2000
diff changeset
1316
2617
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
1317 context.GetLuaScripting().Execute("Finalize");
912a767911b0 back to a single Lua context
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2616
diff changeset
1318 context.GetLuaScripting().Stop();
1455
a68545767975 Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1452
diff changeset
1319
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1320 #if ORTHANC_ENABLE_PLUGINS == 1
1741
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1321 if (context.HasPlugins())
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1322 {
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1323 context.GetPlugins().SignalOrthancStopped();
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1324 }
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1325 #endif
06addfcd1d4c OrthancStarted and OrthancStopped events in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1734
diff changeset
1326
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1327 if (restart)
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1328 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1329 LOG(WARNING) << "Reset request received, restarting Orthanc";
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1330 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1331
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1332 // We're done
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1333 LOG(WARNING) << "Orthanc is stopping";
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 return restart;
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1336 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1337
1368
b22ba8c5edbe query retrieve
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1366
diff changeset
1338
b22ba8c5edbe query retrieve
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1366
diff changeset
1339
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1340 static bool StartHttpServer(ServerContext& context,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
1341 const OrthancRestApi& restApi,
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
1342 OrthancPlugins* plugins)
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1343 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1344 bool httpServerEnabled;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1345
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1346 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1347 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1348 httpServerEnabled = lock.GetConfiguration().GetBooleanParameter("HttpServerEnabled", true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1349 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1350
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1351 if (!httpServerEnabled)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1352 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1353 LOG(WARNING) << "The HTTP server is disabled";
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1354 return WaitForExit(context, restApi);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1355 }
1310
61ce8147f30d custom database back-end
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1289
diff changeset
1356 else
61ce8147f30d custom database back-end
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1289
diff changeset
1357 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1358 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
1359 HttpServer httpServer;
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1360 bool httpDescribeErrors;
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1361
3137
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1362 #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
1363 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
1364 #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
1365 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
1366 #else
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1367 # 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
1368 #endif
5a3b961e9524 New configuration option: 'TcpNoDelay' to disable Nagle's algorithm in HTTP server
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3135
diff changeset
1369
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1370 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1371 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1372
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1373 httpDescribeErrors = lock.GetConfiguration().GetBooleanParameter("HttpDescribeErrors", true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1374
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1375 // 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
1376 httpServer.SetThreadsCount(lock.GetConfiguration().GetUnsignedIntegerParameter("HttpThreadsCount", 50));
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1377 httpServer.SetPortNumber(lock.GetConfiguration().GetUnsignedIntegerParameter("HttpPort", 8042));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1378 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
1379 httpServer.SetKeepAliveEnabled(lock.GetConfiguration().GetBooleanParameter("KeepAlive", defaultKeepAlive));
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1380 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
1381 httpServer.SetTcpNoDelay(lock.GetConfiguration().GetBooleanParameter("TcpNoDelay", true));
3537
9cc09f4c0fa9 New configuration option: "HttpRequestTimeout"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3535
diff changeset
1382 httpServer.SetRequestTimeout(lock.GetConfiguration().GetUnsignedIntegerParameter("HttpRequestTimeout", 30));
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1383
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
1384 // 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
1385 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
1386
3506
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1387 bool authenticationEnabled;
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1388 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
1389 {
3506
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1390 httpServer.SetAuthenticationEnabled(authenticationEnabled);
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1391
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1392 if (httpServer.IsRemoteAccessAllowed() &&
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1393 !authenticationEnabled)
3501
27b53c61aa99 warning when authentication is automatically enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3500
diff changeset
1394 {
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
1395 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
1396 << "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
1397 context.SetHttpServerSecure(false);
3501
27b53c61aa99 warning when authentication is automatically enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3500
diff changeset
1398 }
3506
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1399 }
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1400 else if (httpServer.IsRemoteAccessAllowed())
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1401 {
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1402 // 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
1403 // remote access without having explicitly disabled user
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1404 // authentication.
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1405 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
1406 << "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
1407 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
1408 }
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1409 else
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1410 {
3506
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1411 // 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
1412 // "AuthenticationEnabled" disabled
d2b9981017c4 better handling of HTTP security
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3501
diff changeset
1413 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
1414 }
1310
61ce8147f30d custom database back-end
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1289
diff changeset
1415
3500
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1416 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
1417
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1418 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
1419 !hasUsers)
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1420 {
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
1421 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
1422 {
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
1423 /**
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
1424 * 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
1425 * 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
1426 * 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
1427 * 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
1428 * 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
1429 * "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
1430 **/
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
1431 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
1432 << "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
1433 << "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
1434
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
1435 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
1436
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
1437 // 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
1438 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
1439 }
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
1440 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
1441 {
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
1442 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
1443 << "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
1444 }
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
1445 }
3500
0d248cc63ded Security: If remote HTTP access is enabled, HTTP authentication automatically gets enabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3495
diff changeset
1446
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1447 if (lock.GetConfiguration().GetBooleanParameter("SslEnabled", false))
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1448 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1449 std::string certificate = lock.GetConfiguration().InterpretStringParameterAsPath(
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1450 lock.GetConfiguration().GetStringParameter("SslCertificate", "certificate.pem"));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1451 httpServer.SetSslEnabled(true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1452 httpServer.SetSslCertificate(certificate.c_str());
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1453 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1454 else
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1455 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1456 httpServer.SetSslEnabled(false);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1457 }
3535
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1458
4190
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1459 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
1460 {
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1461 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
1462 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
1463 httpServer.SetSslVerifyPeers(true);
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1464 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
1465 }
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1466 else
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1467 {
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1468 httpServer.SetSslVerifyPeers(false);
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1469 }
9ce5c89328f5 New configuration options to enable HTTP peers identification through certificates
Alain Mazy <alain@mazy.be>
parents: 4182
diff changeset
1470
3535
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1471 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
1472 {
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1473 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
1474 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
1475 << "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
1476 }
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1477 else
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1478 {
41365091a41e display a security warning in the logs at startup when ExecuteLuaEnabled is true
Alain Mazy <alain@mazy.be>
parents: 3534
diff changeset
1479 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
1480 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
1481 }
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1482 }
1949
d90f737f2dde warn about the use of privileged ports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1900
diff changeset
1483
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1484 MyHttpExceptionFormatter exceptionFormatter(httpDescribeErrors, plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1485
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1486 httpServer.SetIncomingHttpRequestFilter(httpFilter);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1487 httpServer.SetHttpExceptionFormatter(exceptionFormatter);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1488 httpServer.Register(context.GetHttpHandler());
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1489
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1490 {
4228
c8c0bbaaace3 write access to webdav
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4227
diff changeset
1491 UriComponents root; // TODO
4227
7fff7e683d65 basic implementation of WebDAV handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4226
diff changeset
1492 root.push_back("a");
7fff7e683d65 basic implementation of WebDAV handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4226
diff changeset
1493 root.push_back("b");
4226
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1494 httpServer.Register(root, new DummyBucket(context));
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1495 }
7bd5eab3ba25 prototyping IWebDavBucket
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4205
diff changeset
1496
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1497 if (httpServer.GetPortNumber() < 1024)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1498 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1499 LOG(WARNING) << "The HTTP port is privileged ("
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1500 << httpServer.GetPortNumber() << " is below 1024), "
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1501 << "make sure you run Orthanc as root/administrator";
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1502 }
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1503
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1504 httpServer.Start();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1505
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1506 bool restart = WaitForExit(context, restApi);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1507
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1508 httpServer.Stop();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1509 LOG(WARNING) << " HTTP server has stopped";
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1510
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1511 return restart;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1512 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1513 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1514
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1515
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1516 static bool StartDicomServer(ServerContext& context,
4205
d962a2996637 cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4190
diff changeset
1517 const OrthancRestApi& restApi,
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
1518 OrthancPlugins* plugins)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1519 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1520 bool dicomServerEnabled;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1521
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1522 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1523 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1524 dicomServerEnabled = lock.GetConfiguration().GetBooleanParameter("DicomServerEnabled", true);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1525 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1526
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1527 if (!dicomServerEnabled)
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1528 {
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1529 LOG(WARNING) << "The DICOM server is disabled";
1645
1558b3226b18 IHttpExceptionFormatter
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1632
diff changeset
1530 return StartHttpServer(context, restApi, plugins);
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1531 }
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1532 else
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1533 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1534 MyDicomServerFactory serverFactory(context);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1535 OrthancApplicationEntityFilter dicomFilter(context);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1536 ModalitiesFromConfiguration modalities;
2381
b8969010b534 uncoupling DCMTK primitives from Orthanc::Configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2375
diff changeset
1537
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1538 // Setup the DICOM server
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1539 DicomServer dicomServer;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1540 dicomServer.SetRemoteModalities(modalities);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1541 dicomServer.SetStoreRequestHandlerFactory(serverFactory);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1542 dicomServer.SetMoveRequestHandlerFactory(serverFactory);
3918
dba48c162b7b C-Get SCP always enabled; no more server config
Alain Mazy <alain@mazy.be>
parents: 3867
diff changeset
1543 dicomServer.SetGetRequestHandlerFactory(serverFactory);
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1544 dicomServer.SetFindRequestHandlerFactory(serverFactory);
3604
e327b44780bb abstraction: storage commitment handler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3537
diff changeset
1545 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
1546
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1547 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1548 OrthancConfiguration::ReaderLock lock;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1549 dicomServer.SetCalledApplicationEntityTitleCheck(lock.GetConfiguration().GetBooleanParameter("DicomCheckCalledAet", false));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1550 dicomServer.SetAssociationTimeout(lock.GetConfiguration().GetUnsignedIntegerParameter("DicomScpTimeout", 30));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1551 dicomServer.SetPortNumber(lock.GetConfiguration().GetUnsignedIntegerParameter("DicomPort", 4242));
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
1552 dicomServer.SetApplicationEntityTitle(lock.GetConfiguration().GetOrthancAET());
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1553 }
1786
164d78911382 primitives to handle dicom worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1781
diff changeset
1554
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1555 #if ORTHANC_ENABLE_PLUGINS == 1
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1556 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
1557 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1558 if (plugins->HasWorklistHandler())
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1559 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1560 dicomServer.SetWorklistRequestHandlerFactory(*plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1561 }
1999
364cc624eb65 New URI "/modalities/.../move" to issue C-Move SCU requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1995
diff changeset
1562
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1563 if (plugins->HasFindHandler())
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1564 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1565 dicomServer.SetFindRequestHandlerFactory(*plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1566 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1567
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1568 if (plugins->HasMoveHandler())
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1569 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1570 dicomServer.SetMoveRequestHandlerFactory(*plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1571 }
1999
364cc624eb65 New URI "/modalities/.../move" to issue C-Move SCU requests
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1995
diff changeset
1572 }
1800
30e97a1f4093 callback for handling worklists with plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1799
diff changeset
1573 #endif
1786
164d78911382 primitives to handle dicom worklists
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1781
diff changeset
1574
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1575 dicomServer.SetApplicationEntityFilter(dicomFilter);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1576
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1577 if (dicomServer.GetPortNumber() < 1024)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1578 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1579 LOG(WARNING) << "The DICOM port is privileged ("
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1580 << dicomServer.GetPortNumber() << " is below 1024), "
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1581 << "make sure you run Orthanc as root/administrator";
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1582 }
1949
d90f737f2dde warn about the use of privileged ports
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1900
diff changeset
1583
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1584 dicomServer.Start();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1585 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
1586 << " on port: " << dicomServer.GetPortNumber();
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1587
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1588 bool restart = false;
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1589 ErrorCode error = ErrorCode_Success;
1675
131136aeeaa7 improved exception handling in the main program
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
1590
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1591 try
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1592 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1593 restart = StartHttpServer(context, restApi, plugins);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1594 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1595 catch (OrthancException& e)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1596 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1597 error = e.GetErrorCode();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1598 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1599
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1600 dicomServer.Stop();
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1601 LOG(WARNING) << " DICOM server has stopped";
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1602
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1603 serverFactory.Done();
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1604
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1605 if (error != ErrorCode_Success)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1606 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1607 throw OrthancException(error);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1608 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1609
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1610 return restart;
1675
131136aeeaa7 improved exception handling in the main program
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
1611 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1612 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1613
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1614
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1615 static bool ConfigureHttpHandler(ServerContext& context,
2815
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1616 OrthancPlugins *plugins,
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1617 bool loadJobsFromDatabase)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1618 {
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1619 #if ORTHANC_ENABLE_PLUGINS == 1
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1620 // 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
1621 // 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
1622 if (plugins)
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1623 {
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1624 assert(context.HasPlugins());
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1625 context.GetHttpHandler().Register(*plugins, false);
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1626 }
1632
eb8fbcf008b5 fix build with plugins disabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1630
diff changeset
1627 #endif
3818
4f78da5613a1 Add C-GET SCP support
Stacy Loesch <stacy.loesch@varian.com>
parents: 3801
diff changeset
1628
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1629 // Secondly, apply the "static resources" layer
1443
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1630 #if ORTHANC_STANDALONE == 1
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4026
diff changeset
1631 EmbeddedResourceHttpHandler staticResources("/app", ServerResources::ORTHANC_EXPLORER);
1443
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1632 #else
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1633 FilesystemHttpHandler staticResources("/app", ORTHANC_PATH "/OrthancExplorer");
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1634 #endif
895ab369d63c refactoring: OrthancHttpHandler
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1437
diff changeset
1635
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1636 context.GetHttpHandler().Register(staticResources, false);
1135
67c3c1e4a6e0 index-only mode, and custom storage area with plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1134
diff changeset
1637
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1638 // Thirdly, consider the built-in REST API of Orthanc
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1639 OrthancRestApi restApi(context);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1640 context.GetHttpHandler().Register(restApi, true);
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1641
2815
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1642 context.SetupJobsEngine(false /* not running unit tests */, loadJobsFromDatabase);
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1643
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1644 bool restart = StartDicomServer(context, restApi, plugins);
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1645
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1646 context.Stop();
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1647
925d8dc03a23 unserialization of jobs from plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2788
diff changeset
1648 return restart;
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1649 }
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1650
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1651
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1652 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
1653 IStorageArea& storageArea)
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1654 {
1668
de1413733c97 reconstructing main dicom tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1666
diff changeset
1655 // 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
1656 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
1657
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1658 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
1659 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
1660 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
1661
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1662 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
1663 {
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1664 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
1665 return;
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1666 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1667
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1668 if (currentVersion > ORTHANC_DATABASE_VERSION)
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1669 {
2955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1670 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1671 "The version of the database schema (" +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1672 boost::lexical_cast<std::string>(currentVersion) +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1673 ") 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
1674 }
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1675
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1676 LOG(WARNING) << "Upgrading the database from schema version "
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1677 << currentVersion << " to " << ORTHANC_DATABASE_VERSION;
1869
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1678
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1679 try
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1680 {
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1681 database.Upgrade(ORTHANC_DATABASE_VERSION, storageArea);
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1682 }
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1683 catch (OrthancException&)
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1684 {
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1685 LOG(ERROR) << "Unable to run the automated upgrade, please use the replication instructions: "
3135
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3126
diff changeset
1686 << "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
1687 throw;
9af3b492b010 invitation to replicate if upgrade fails
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1866
diff changeset
1688 }
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1689
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1690 // Sanity check
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1691 currentVersion = database.GetDatabaseVersion();
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1692 if (ORTHANC_DATABASE_VERSION != currentVersion)
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1693 {
2955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1694 throw OrthancException(ErrorCode_IncompatibleDatabaseVersion,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1695 "The database schema was not properly upgraded, it is still at version " +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1696 boost::lexical_cast<std::string>(currentVersion));
1669
a412ad57f0f9 refactoring of sample plugins, OrthancPluginReconstructMainDicomTags
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1668
diff changeset
1697 }
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1698 else
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1699 {
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1700 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
1701 << "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
1702 }
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1703 }
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1704
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1705
2941
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1706
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1707 namespace
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1708 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1709 class ServerContextConfigurator : public boost::noncopyable
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1710 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1711 private:
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1712 ServerContext& context_;
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1713 OrthancPlugins* plugins_;
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1714
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1715 public:
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1716 ServerContextConfigurator(ServerContext& context,
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1717 OrthancPlugins* plugins) :
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1718 context_(context),
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1719 plugins_(plugins)
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1720 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1721 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1722 OrthancConfiguration::WriterLock lock;
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1723 lock.GetConfiguration().SetServerIndex(context.GetIndex());
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1724 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1725
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1726 #if ORTHANC_ENABLE_PLUGINS == 1
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1727 if (plugins_ != NULL)
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1728 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1729 plugins_->SetServerContext(context_);
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1730 context_.SetPlugins(*plugins_);
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1731 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1732 #endif
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1733 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1734
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1735 ~ServerContextConfigurator()
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1736 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1737 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1738 OrthancConfiguration::WriterLock lock;
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1739 lock.GetConfiguration().ResetServerIndex();
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1740 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1741
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1742 #if ORTHANC_ENABLE_PLUGINS == 1
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1743 if (plugins_ != NULL)
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1744 {
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1745 plugins_->ResetServerContext();
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1746 context_.ResetPlugins();
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1747 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1748 #endif
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1749 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1750 };
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1751 }
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1752
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1753
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1754 static bool ConfigureServerContext(IDatabaseWrapper& database,
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1755 IStorageArea& storageArea,
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1756 OrthancPlugins *plugins,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1757 bool loadJobsFromDatabase)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1758 {
2950
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1759 size_t maxCompletedJobs;
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1760
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1761 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1762 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
1763
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1764 // 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
1765 // 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
1766 // able to properly issue HTTP/HTTPS queries
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1767 HttpClient::ConfigureSsl(lock.GetConfiguration().GetBooleanParameter("HttpsVerifyPeers", true),
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1768 lock.GetConfiguration().InterpretStringParameterAsPath
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1769 (lock.GetConfiguration().GetStringParameter("HttpsCACertificates", "")));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1770 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
1771
6add197274b1 default value of HttpTimeout is now 60 seconds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3404
diff changeset
1772 // 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
1773 // 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
1774 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
1775
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1776 HttpClient::SetDefaultProxy(lock.GetConfiguration().GetStringParameter("HttpProxy", ""));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1777
3865
ff0718a4633a fix missing DicomAssociationParameters::SetDefaultTimeout()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3852
diff changeset
1778 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
1779
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1780 maxCompletedJobs = lock.GetConfiguration().GetUnsignedIntegerParameter("JobsHistorySize", 10);
3164
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1781
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1782 if (maxCompletedJobs == 0)
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1783 {
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1784 LOG(WARNING) << "Setting option \"JobsHistorySize\" to zero is not recommended";
b79ec21747a1 warning
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3139
diff changeset
1785 }
2950
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1786 }
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1787
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1788 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
1789
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1790 {
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1791 OrthancConfiguration::ReaderLock lock;
dc18d5804746 support of JobsHistorySize set to zero
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2946
diff changeset
1792
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1793 context.SetCompressionEnabled(lock.GetConfiguration().GetBooleanParameter("StorageCompression", false));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1794 context.SetStoreMD5ForAttachments(lock.GetConfiguration().GetBooleanParameter("StoreMD5ForAttachments", true));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1795
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1796 // 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
1797 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
1798
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1799 try
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1800 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1801 context.GetIndex().SetMaximumPatientCount(lock.GetConfiguration().GetUnsignedIntegerParameter("MaximumPatientCount", 0));
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1802 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1803 catch (...)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1804 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1805 context.GetIndex().SetMaximumPatientCount(0);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1806 }
2825
8aa6aef11b70 New configuration option "OverwriteInstances" to choose how duplicate SOPInstanceUID are handled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2815
diff changeset
1807
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1808 try
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1809 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1810 uint64_t size = lock.GetConfiguration().GetUnsignedIntegerParameter("MaximumStorageSize", 0);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1811 context.GetIndex().SetMaximumStorageSize(size * 1024 * 1024);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1812 }
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1813 catch (...)
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1814 {
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1815 context.GetIndex().SetMaximumStorageSize(0);
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1816 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1817 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1818
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1819 {
2941
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1820 ServerContextConfigurator configurator(context, plugins);
2946
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1821
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1822 {
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1823 OrthancConfiguration::WriterLock lock;
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1824 lock.GetConfiguration().LoadModalitiesAndPeers();
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1825 }
2e751f615e03 new configuration options: DicomModalitiesInDatabase and OrthancPeersInDatabase
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2941
diff changeset
1826
2941
e292798f9980 OrthancConfiguration::SetServerIndex()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2940
diff changeset
1827 return ConfigureHttpHandler(context, plugins, loadJobsFromDatabase);
1675
131136aeeaa7 improved exception handling in the main program
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1672
diff changeset
1828 }
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1829 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1830
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1831
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1832 static bool ConfigureDatabase(IDatabaseWrapper& database,
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1833 IStorageArea& storageArea,
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1834 OrthancPlugins *plugins,
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1835 bool upgradeDatabase,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1836 bool loadJobsFromDatabase)
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1837 {
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1838 database.Open();
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1839
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1840 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
1841
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1842 if (upgradeDatabase)
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1843 {
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1844 UpgradeDatabase(database, storageArea);
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1845 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
1846 }
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1847 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
1848 {
2955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1849 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
1850 "The database schema must be upgraded from version " +
2955
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1851 boost::lexical_cast<std::string>(currentVersion) + " to " +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1852 boost::lexical_cast<std::string>(ORTHANC_DATABASE_VERSION) +
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2952
diff changeset
1853 ": Please run Orthanc with the \"--upgrade\" argument");
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1854 }
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1855
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1856 bool success = ConfigureServerContext
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1857 (database, storageArea, plugins, loadJobsFromDatabase);
1672
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1858
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1859 database.Close();
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1860
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1861 return success;
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1862 }
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1863
4c5a85c3ff43 sample database plugin now working
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1669
diff changeset
1864
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1865 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
1866 char* argv[],
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1867 bool upgradeDatabase,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1868 bool loadJobsFromDatabase)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1869 {
3712
2a170a8f1faf replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3643
diff changeset
1870 std::unique_ptr<IDatabaseWrapper> databasePtr;
2a170a8f1faf replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3643
diff changeset
1871 std::unique_ptr<IStorageArea> storage;
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1872
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1873 #if ORTHANC_ENABLE_PLUGINS == 1
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1874 OrthancPlugins plugins;
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1875 plugins.SetCommandLineArguments(argc, argv);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1876 LoadPlugins(plugins);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1877
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1878 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
1879 if (plugins.HasDatabaseBackend())
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1880 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1881 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
1882 database = &plugins.GetDatabaseBackend();
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1883 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1884 else
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1885 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1886 databasePtr.reset(CreateDatabaseWrapper());
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1887 database = databasePtr.get();
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1888 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1889
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1890 if (plugins.HasStorageArea())
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1891 {
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1892 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
1893 storage.reset(plugins.CreateStorageArea());
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1894 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1895 else
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1896 {
2940
4767d36679ed refactoring access to Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2903
diff changeset
1897 storage.reset(CreateStorageArea());
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1898 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1899
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1900 assert(database != NULL);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1901 assert(storage.get() != NULL);
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1902
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1903 return ConfigureDatabase(*database, *storage, &plugins,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1904 upgradeDatabase, loadJobsFromDatabase);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1905
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1906 #elif ORTHANC_ENABLE_PLUGINS == 0
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1907 // The plugins are disabled
3048
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1908
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1909 databasePtr.reset(CreateDatabaseWrapper());
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1910 storage.reset(CreateStorageArea());
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1911
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1912 assert(databasePtr.get() != NULL);
8b331be57606 fix build without plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2955
diff changeset
1913 assert(storage.get() != NULL);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1914
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1915 return ConfigureDatabase(*databasePtr, *storage, NULL,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1916 upgradeDatabase, loadJobsFromDatabase);
1455
a68545767975 Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1452
diff changeset
1917
a68545767975 Initialize() and Finalize() events in Lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1452
diff changeset
1918 #else
2136
dd609a99d39a uniformization of the macro naming
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2133
diff changeset
1919 # 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
1920 #endif
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1921 }
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1922
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1923
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1924 static bool StartOrthanc(int argc,
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1925 char* argv[],
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1926 bool upgradeDatabase,
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1927 bool loadJobsFromDatabase)
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1928 {
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1929 return ConfigurePlugins(argc, argv, upgradeDatabase, loadJobsFromDatabase);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
1930 }
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
1931
893
f57802f8b4dc plugins for windows
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 831
diff changeset
1932
2079
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1933 static bool DisplayPerformanceWarning()
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1934 {
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1935 (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
1936 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
1937 return true;
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1938 }
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1939
acb4cd4af771 Performance warning if runtime debug assertions are turned on
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2069
diff changeset
1940
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1941 int main(int argc, char* argv[])
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1942 {
1485
27661b33f624 Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1455
diff changeset
1943 Logging::Initialize();
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1944
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
1945 bool upgradeDatabase = false;
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
1946 bool loadJobsFromDatabase = true;
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1947 const char* configurationFile = NULL;
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1948
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1949
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1950 /**
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1951 * Parse the command-line options.
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1952 **/
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
1953
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
1954 for (int i = 1; i < argc; i++)
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
1955 {
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1956 std::string argument(argv[i]);
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1957
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1958 if (argument.empty())
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1959 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1960 // Ignore empty arguments
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1961 }
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1962 else if (argument[0] != '-')
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1963 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1964 if (configurationFile != NULL)
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1965 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1966 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
1967 return -1;
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1968 }
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1969 else
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1970 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1971 // 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
1972 // the configuration file
2018
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
1973
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
1974 // TODO WHAT IS THE ENCODING?
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1975 configurationFile = argv[i];
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1976 }
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1977 }
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1978 else if (argument == "--errors")
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1979 {
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1980 PrintErrors(argv[0]);
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1981 return 0;
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
1982 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1983 else if (argument == "--help")
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1984 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1985 PrintHelp(argv[0]);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1986 return 0;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1987 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1988 else if (argument == "--version")
133
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1989 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1990 PrintVersion(argv[0]);
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1991 return 0;
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 128
diff changeset
1992 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1993 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
1994 {
1485
27661b33f624 Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1455
diff changeset
1995 Logging::EnableInfoLevel(true);
137
0e97abc7b950 fix of a bug in older versions of sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
1996 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
1997 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
1998 {
1485
27661b33f624 Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1455
diff changeset
1999 Logging::EnableTraceLevel(true);
137
0e97abc7b950 fix of a bug in older versions of sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 136
diff changeset
2000 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2001 else if (boost::starts_with(argument, "--logdir="))
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
2002 {
2018
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
2003 // TODO WHAT IS THE ENCODING?
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2004 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
2005
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
2006 try
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
2007 {
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
2008 Logging::SetTargetFolder(directory);
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
2009 }
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
2010 catch (OrthancException&)
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
2011 {
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2012 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
2013 << directory << ") is inexistent, aborting.";
1490
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
2014 return -1;
596927722403 support of --logdir by the internal logger
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1489
diff changeset
2015 }
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
2016 }
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2017 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
2018 {
2018
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
2019 // TODO WHAT IS THE ENCODING?
2015
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2020 std::string file = argument.substr(10);
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2021
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2022 try
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2023 {
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2024 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
2025 }
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2026 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
2027 {
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2028 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
2029 << 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
2030 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
2031 }
bcc575732aef New option "--logfile" to output the Orthanc log to the given file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2010
diff changeset
2032 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2033 else if (argument == "--upgrade")
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
2034 {
2299
03982a0db696 Fix issue #29 (more consistent handling of the "--upgrade" argument)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2295
diff changeset
2035 upgradeDatabase = true;
1615
c40fe92a68e7 Primitives to upgrade the database version in plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1592
diff changeset
2036 }
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
2037 else if (argument == "--no-jobs")
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
2038 {
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
2039 loadJobsFromDatabase = false;
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
2040 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2041 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
2042 {
2018
300599489cab USE_BOOST_LOCALE_BACKENDS
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2015
diff changeset
2043 // TODO WHAT IS THE ENCODING?
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
2044 std::string configurationSample;
4031
e3b3af80732d ServerResources, and moving EmbeddedResourceHttpHandler from Core to OrthancServer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4026
diff changeset
2045 GetFileResource(configurationSample, ServerResources::CONFIGURATION_SAMPLE);
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
2046
684
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
2047 #if defined(_WIN32)
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
2048 // Replace UNIX newlines with DOS newlines
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
2049 boost::replace_all(configurationSample, "\n", "\r\n");
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
2050 #endif
96d8410c56cd newlines
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 657
diff changeset
2051
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2052 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
2053
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
2054 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
2055 {
3526
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2056 if (target == "-")
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2057 {
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2058 // New in 1.5.8: Print to stdout
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2059 std::cout << configurationSample;
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2060 }
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2061 else
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2062 {
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2063 SystemToolbox::WriteFile(configurationSample, target);
f07352e0375c new configuration option ExecuteLuaEnabled
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3506
diff changeset
2064 }
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
2065 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
2066 }
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
2067 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
2068 {
5465cab476cf Fix issue #45 (crash when providing a folder to "--config" command-line option)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2268
diff changeset
2069 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
2070 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
2071 }
175
662af781a227 sample config file from command line
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 158
diff changeset
2072 }
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2073 else
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2074 {
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2075 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
2076 }
112
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
2077 }
80ca409f232f logging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 108
diff changeset
2078
1666
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2079
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2080 /**
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2081 * Launch Orthanc.
d7039be97eeb better command-line options handling
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1651
diff changeset
2082 **/
1102
ce6386b37afd avoid unnecessary exceptions on Orthanc startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
2083
1866
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2084 {
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2085 std::string version(ORTHANC_VERSION);
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2086
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2087 if (std::string(ORTHANC_VERSION) == "mainline")
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2088 {
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2089 try
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2090 {
2140
aa4b8895cd23 reorganization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2136
diff changeset
2091 boost::filesystem::path exe(SystemToolbox::GetPathToExecutable());
1866
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2092 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
2093 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
2094 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
2095 }
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2096 catch (...)
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2097 {
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2098 }
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2099 }
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2100
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2101 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
2102 assert(DisplayPerformanceWarning());
4009
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2103
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2104 std::string s = "Architecture: ";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2105 if (sizeof(void*) == 4)
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2106 {
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2107 s += "32-bit, ";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2108 }
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2109 else if (sizeof(void*) == 8)
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2110 {
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2111 s += "64-bit, ";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2112 }
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2113 else
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2114 {
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2115 s += "unsupported pointer size, ";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2116 }
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2117
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2118 switch (Toolbox::DetectEndianness())
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2119 {
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2120 case Endianness_Little:
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2121 s += "little endian";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2122 break;
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2123
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2124 case Endianness_Big:
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2125 s += "big endian";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2126 break;
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2127
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2128 default:
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2129 s += "unsupported endianness";
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2130 break;
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2131 }
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2132
16978ee28588 print info about cpu architecture
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 3920
diff changeset
2133 LOG(INFO) << s;
1866
579bf74f7da1 output creation time for mainline builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1851
diff changeset
2134 }
1102
ce6386b37afd avoid unnecessary exceptions on Orthanc startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1066
diff changeset
2135
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2136 int status = 0;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2137 try
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2138 {
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
2139 for (;;)
270
e6a4c4329481 parameters for storage capacity
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 236
diff changeset
2140 {
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
2141 OrthancInitialize(configurationFile);
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2142
2671
06c0a6b8a871 new command-line argument: --no-jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 2665
diff changeset
2143 bool restart = StartOrthanc(argc, argv, upgradeDatabase, loadJobsFromDatabase);
1452
b737acb13da5 refactoring of the main function
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1447
diff changeset
2144 if (restart)
23
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2145 {
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
2146 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
2147 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
2148 Logging::Reset();
23
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2149 }
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2150 else
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2151 {
1103
bec1eccf976c Hot restart of Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1102
diff changeset
2152 break;
23
62bd05fe4b7c support for ssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 19
diff changeset
2153 }
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2154 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2155 }
1245
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2156 catch (const OrthancException& e)
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2157 {
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
2158 LOG(ERROR) << "Uncaught exception, stopping now: [" << e.What() << "] (code " << e.GetErrorCode() << ")";
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
2159 #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
2160 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
2161 {
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2162 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
2163 }
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2164 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
2165 {
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2166 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
2167 }
e2675b37eb01 Under Windows, the exit status of Orthanc corresponds to the encountered error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1733
diff changeset
2168
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
2169 #else
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2170 status = -1;
1733
e1f5ab395297 PrintErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1730
diff changeset
2171 #endif
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2172 }
1245
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2173 catch (const std::exception& e)
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2174 {
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2175 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
2176 status = -1;
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2177 }
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2178 catch (const std::string& s)
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2179 {
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2180 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
2181 status = -1;
aea9277dee75 catch more exceptions (patch from Valdas Rapsevicius)
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1232
diff changeset
2182 }
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2183 catch (...)
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2184 {
1223
5bd4c9f85b4c fix race condition while unregistering plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
2185 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
2186 status = -1;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2187 }
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2188
690
2e67366aab83 case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 689
diff changeset
2189 LOG(WARNING) << "Orthanc has stopped";
2e67366aab83 case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 689
diff changeset
2190
4026
05a363186da6 ORTHANC_BUILDING_FRAMEWORK_LIBRARY, Orthanc::InitializeFramework()
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 4009
diff changeset
2191 OrthancFinalize();
1485
27661b33f624 Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1455
diff changeset
2192
291
4d7469f72a0b embedding of dicom dictionaries
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 270
diff changeset
2193 return status;
0
3959d33612cc initial commit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2194 }