Mercurial > hg > orthanc
annotate OrthancServer/OrthancInitialization.cpp @ 2103:a89ca69ec1d1
ImageAccessor::SetFormat
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 13 Oct 2016 11:42:30 +0200 |
parents | bcbc9137a535 |
children | a657f7772e69 |
rev | line source |
---|---|
0 | 1 /** |
62 | 2 * Orthanc - A Lightweight, RESTful DICOM Store |
1900 | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
1288
6e7e5ed91c2d
upgrade to year 2015
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1275
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
0 | 5 * |
6 * This program is free software: you can redistribute it and/or | |
7 * modify it under the terms of the GNU General Public License as | |
8 * published by the Free Software Foundation, either version 3 of the | |
9 * License, or (at your option) any later version. | |
136 | 10 * |
11 * In addition, as a special exception, the copyright holders of this | |
12 * program give permission to link the code of its release with the | |
13 * OpenSSL project's "OpenSSL" library (or with modified versions of it | |
14 * that use the same license as the "OpenSSL" library), and distribute | |
15 * the linked executables. You must obey the GNU General Public License | |
16 * in all respects for all of the code used other than "OpenSSL". If you | |
17 * modify file(s) with this exception, you may extend this exception to | |
18 * your version of the file(s), but you are not obligated to do so. If | |
19 * you do not wish to do so, delete this exception statement from your | |
20 * version. If you delete this exception statement from all source files | |
21 * in the program, then also delete it here. | |
0 | 22 * |
23 * This program is distributed in the hope that it will be useful, but | |
24 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
26 * General Public License for more details. | |
27 * | |
28 * You should have received a copy of the GNU General Public License | |
29 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
30 **/ | |
31 | |
32 | |
831
84513f2ee1f3
pch for unit tests and server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
824
diff
changeset
|
33 #include "PrecompiledHeadersServer.h" |
62 | 34 #include "OrthancInitialization.h" |
0 | 35 |
476 | 36 #include "../Core/HttpClient.h" |
1485
27661b33f624
Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1429
diff
changeset
|
37 #include "../Core/Logging.h" |
62 | 38 #include "../Core/OrthancException.h" |
0 | 39 #include "../Core/Toolbox.h" |
1485
27661b33f624
Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1429
diff
changeset
|
40 #include "../Core/FileStorage/FilesystemStorage.h" |
27661b33f624
Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1429
diff
changeset
|
41 |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
42 #include "ServerEnumerations.h" |
1485
27661b33f624
Creation of Logging.h
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1429
diff
changeset
|
43 #include "DatabaseWrapper.h" |
1656 | 44 #include "FromDcmtkBridge.h" |
2006
6301bbcbcaed
more generic support of value representations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
45 #include "ToDcmtkBridge.h" |
0 | 46 |
47 #include <boost/lexical_cast.hpp> | |
48 #include <boost/filesystem.hpp> | |
49 #include <curl/curl.h> | |
50 #include <boost/thread.hpp> | |
1274 | 51 |
847
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
52 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
53 #if ORTHANC_JPEG_ENABLED == 1 |
2099 | 54 # include <dcmtk/dcmjpeg/djdecode.h> |
847
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
55 #endif |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
56 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
57 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
58 #if ORTHANC_JPEG_LOSSLESS_ENABLED == 1 |
2099 | 59 # include <dcmtk/dcmjpls/djdecode.h> |
847
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
60 #endif |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
61 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
62 |
1927
b60f27664b8f
simplification in FromDcmtkBridge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1900
diff
changeset
|
63 #include <dcmtk/dcmnet/dul.h> |
b60f27664b8f
simplification in FromDcmtkBridge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1900
diff
changeset
|
64 |
b60f27664b8f
simplification in FromDcmtkBridge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1900
diff
changeset
|
65 |
b60f27664b8f
simplification in FromDcmtkBridge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1900
diff
changeset
|
66 |
62 | 67 namespace Orthanc |
0 | 68 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
69 static boost::recursive_mutex globalMutex_; |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
70 static Json::Value configuration_; |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
71 static boost::filesystem::path defaultDirectory_; |
1145
0479d02c6778
Plugins can retrieve the path to Orthanc and to its configuration file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1007
diff
changeset
|
72 static std::string configurationAbsolutePath_; |
1610
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
73 static FontRegistry fontRegistry_; |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
74 static const char* configurationFileArg_ = NULL; |
0 | 75 |
806 | 76 |
1533
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
77 static std::string GetGlobalStringParameterInternal(const std::string& parameter, |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
78 const std::string& defaultValue) |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
79 { |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
80 if (configuration_.isMember(parameter)) |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
81 { |
1592
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
82 if (configuration_[parameter].type() != Json::stringValue) |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
83 { |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
84 LOG(ERROR) << "The configuration option \"" << parameter << "\" must be a string"; |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
85 throw OrthancException(ErrorCode_BadParameterType); |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
86 } |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
87 else |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
88 { |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
89 return configuration_[parameter].asString(); |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
90 } |
1533
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
91 } |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
92 else |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
93 { |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
94 return defaultValue; |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
95 } |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
96 } |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
97 |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
98 |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
99 static bool GetGlobalBoolParameterInternal(const std::string& parameter, |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
100 bool defaultValue) |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
101 { |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
102 if (configuration_.isMember(parameter)) |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
103 { |
1592
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
104 if (configuration_[parameter].type() != Json::booleanValue) |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
105 { |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
106 LOG(ERROR) << "The configuration option \"" << parameter << "\" must be a Boolean (true or false)"; |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
107 throw OrthancException(ErrorCode_BadParameterType); |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
108 } |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
109 else |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
110 { |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
111 return configuration_[parameter].asBool(); |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
112 } |
1533
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
113 } |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
114 else |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
115 { |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
116 return defaultValue; |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
117 } |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
118 } |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
119 |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
120 |
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
121 |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
122 static void AddFileToConfiguration(Json::Value& target, |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
123 const boost::filesystem::path& path) |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
124 { |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
125 LOG(WARNING) << "Reading the configuration from: " << path; |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
126 |
1424
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
127 Json::Value config; |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
128 |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
129 { |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
130 std::string content; |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
131 Toolbox::ReadFile(content, path.string()); |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
132 |
1424
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
133 Json::Value tmp; |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
134 Json::Reader reader; |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
135 if (!reader.parse(content, tmp) || |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
136 tmp.type() != Json::objectValue) |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
137 { |
1596
f2e3d030ea59
BadJson error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1592
diff
changeset
|
138 LOG(ERROR) << "The configuration file does not follow the JSON syntax: " << path; |
f2e3d030ea59
BadJson error code
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1592
diff
changeset
|
139 throw OrthancException(ErrorCode_BadJson); |
1424
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
140 } |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
141 |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
142 Toolbox::CopyJsonWithoutComments(config, tmp); |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
143 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
144 |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
145 if (target.size() == 0) |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
146 { |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
147 target = config; |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
148 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
149 else |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
150 { |
1424
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
151 Json::Value::Members members = config.getMemberNames(); |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
152 for (Json::Value::ArrayIndex i = 0; i < members.size(); i++) |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
153 { |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
154 if (target.isMember(members[i])) |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
155 { |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
156 LOG(ERROR) << "The configuration section \"" << members[i] << "\" is defined in 2 different configuration files"; |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
157 throw OrthancException(ErrorCode_BadFileFormat); |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
158 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
159 else |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
160 { |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
161 target[members[i]] = config[members[i]]; |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
162 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
163 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
164 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
165 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
166 |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
167 |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
168 static void ScanFolderForConfiguration(Json::Value& target, |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
169 const char* folder) |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
170 { |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
171 using namespace boost::filesystem; |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
172 |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
173 LOG(WARNING) << "Scanning folder \"" << folder << "\" for configuration files"; |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
174 |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
175 directory_iterator end_it; // default construction yields past-the-end |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
176 for (directory_iterator it(folder); |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
177 it != end_it; |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
178 ++it) |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
179 { |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
180 if (!is_directory(it->status())) |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
181 { |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
182 std::string extension = boost::filesystem::extension(it->path()); |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
183 Toolbox::ToLowerCase(extension); |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
184 |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
185 if (extension == ".json") |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
186 { |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
187 AddFileToConfiguration(target, it->path().string()); |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
188 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
189 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
190 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
191 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
192 |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
193 |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
194 static void ReadConfiguration(Json::Value& target, |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
195 const char* configurationFile) |
0 | 196 { |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
197 target = Json::objectValue; |
0 | 198 |
199 if (configurationFile) | |
200 { | |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
201 if (!boost::filesystem::exists(configurationFile)) |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
202 { |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
203 LOG(ERROR) << "Inexistent path to configuration: " << configurationFile; |
1427
d710ea64f0fd
Custom setting of the local AET during C-Store SCU (both in Lua and in the REST API)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1424
diff
changeset
|
204 throw OrthancException(ErrorCode_InexistentFile); |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
205 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
206 |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
207 if (boost::filesystem::is_directory(configurationFile)) |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
208 { |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
209 ScanFolderForConfiguration(target, configurationFile); |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
210 } |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
211 else |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
212 { |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
213 AddFileToConfiguration(target, configurationFile); |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
214 } |
0 | 215 } |
216 else | |
217 { | |
660 | 218 #if ORTHANC_STANDALONE == 1 |
219 // No default path for the standalone configuration | |
220 LOG(WARNING) << "Using the default Orthanc configuration"; | |
221 return; | |
222 | |
223 #else | |
224 // In a non-standalone build, we use the | |
225 // "Resources/Configuration.json" from the Orthanc source code | |
226 | |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
227 boost::filesystem::path p = ORTHANC_PATH; |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
228 p /= "Resources"; |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
229 p /= "Configuration.json"; |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
230 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
231 AddFileToConfiguration(target, p); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
232 #endif |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
233 } |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
234 } |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
235 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
236 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
237 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
238 static void ReadGlobalConfiguration(const char* configurationFile) |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
239 { |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
240 // Read the content of the configuration |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
241 configurationFileArg_ = configurationFile; |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
242 ReadConfiguration(configuration_, configurationFile); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
243 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
244 // Adapt the paths to the configurations |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
245 defaultDirectory_ = boost::filesystem::current_path(); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
246 configurationAbsolutePath_ = ""; |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
247 |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
248 if (configurationFile) |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
249 { |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
250 if (boost::filesystem::is_directory(configurationFile)) |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
251 { |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
252 defaultDirectory_ = boost::filesystem::path(configurationFile); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
253 configurationAbsolutePath_ = boost::filesystem::absolute(configurationFile).parent_path().string(); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
254 } |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
255 else |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
256 { |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
257 defaultDirectory_ = boost::filesystem::path(configurationFile).parent_path(); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
258 configurationAbsolutePath_ = boost::filesystem::absolute(configurationFile).string(); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
259 } |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
260 } |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
261 else |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
262 { |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
263 #if ORTHANC_STANDALONE != 1 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
264 // In a non-standalone build, we use the |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
265 // "Resources/Configuration.json" from the Orthanc source code |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
266 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
267 boost::filesystem::path p = ORTHANC_PATH; |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
268 p /= "Resources"; |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
269 p /= "Configuration.json"; |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
270 configurationAbsolutePath_ = boost::filesystem::absolute(p).string(); |
87
8517e2c44283
path to configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
62
diff
changeset
|
271 #endif |
0 | 272 } |
273 } | |
274 | |
275 | |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
276 static void ValidateGlobalConfiguration() |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
277 { |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
278 std::set<std::string> ids; |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
279 |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
280 Configuration::GetListOfOrthancPeers(ids); |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
281 for (std::set<std::string>::const_iterator it = ids.begin(); it != ids.end(); ++it) |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
282 { |
2020 | 283 WebServiceParameters peer; |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
284 Configuration::GetOrthancPeer(peer, *it); |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
285 } |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
286 |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
287 Configuration::GetListOfDicomModalities(ids); |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
288 for (std::set<std::string>::const_iterator it = ids.begin(); it != ids.end(); ++it) |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
289 { |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
290 RemoteModalityParameters modality; |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
291 Configuration::GetDicomModalityUsingSymbolicName(modality, *it); |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
292 } |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
293 } |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
294 |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
295 |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
296 static void RegisterUserMetadata() |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
297 { |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
298 if (configuration_.isMember("UserMetadata")) |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
299 { |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
300 const Json::Value& parameter = configuration_["UserMetadata"]; |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
301 |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
302 Json::Value::Members members = parameter.getMemberNames(); |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
303 for (size_t i = 0; i < members.size(); i++) |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
304 { |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
305 const std::string& name = members[i]; |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
306 |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
307 if (!parameter[name].isInt()) |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
308 { |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
309 LOG(ERROR) << "Not a number in this user-defined metadata: " << name; |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
310 throw OrthancException(ErrorCode_BadParameterType); |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
311 } |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
312 |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
313 int metadata = parameter[name].asInt(); |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
314 |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
315 LOG(INFO) << "Registering user-defined metadata: " << name << " (index " |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
316 << metadata << ")"; |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
317 |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
318 try |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
319 { |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
320 RegisterUserMetadata(metadata, name); |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
321 } |
657
5425bb6f1ea5
further cppcheck fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
656
diff
changeset
|
322 catch (OrthancException&) |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
323 { |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
324 LOG(ERROR) << "Cannot register this user-defined metadata: " << name; |
657
5425bb6f1ea5
further cppcheck fixes
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
656
diff
changeset
|
325 throw; |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
326 } |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
327 } |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
328 } |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
329 } |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
330 |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
331 |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
332 static void RegisterUserContentType() |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
333 { |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
334 if (configuration_.isMember("UserContentType")) |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
335 { |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
336 const Json::Value& parameter = configuration_["UserContentType"]; |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
337 |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
338 Json::Value::Members members = parameter.getMemberNames(); |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
339 for (size_t i = 0; i < members.size(); i++) |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
340 { |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
341 const std::string& name = members[i]; |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
342 std::string mime = "application/octet-stream"; |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
343 |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
344 const Json::Value& value = parameter[name]; |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
345 int contentType; |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
346 |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
347 if (value.isArray() && |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
348 value.size() == 2 && |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
349 value[0].isInt() && |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
350 value[1].isString()) |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
351 { |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
352 contentType = value[0].asInt(); |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
353 mime = value[1].asString(); |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
354 } |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
355 else if (value.isInt()) |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
356 { |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
357 contentType = value.asInt(); |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
358 } |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
359 else |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
360 { |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
361 LOG(ERROR) << "Not a number in this user-defined attachment type: " << name; |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
362 throw OrthancException(ErrorCode_BadParameterType); |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
363 } |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
364 |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
365 LOG(INFO) << "Registering user-defined attachment type: " << name << " (index " |
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
366 << contentType << ") with MIME type \"" << mime << "\""; |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
367 |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
368 try |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
369 { |
1772
53e045b5a8ec
MIME content type can be associated to custom attachments (cf. "UserContentType")
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1765
diff
changeset
|
370 RegisterUserContentType(contentType, name, mime); |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
371 } |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
372 catch (OrthancException&) |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
373 { |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
374 throw; |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
375 } |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
376 } |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
377 } |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
378 } |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
379 |
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
380 |
1765
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
381 static void LoadCustomDictionary(const Json::Value& configuration) |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
382 { |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
383 if (configuration.type() != Json::objectValue || |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
384 !configuration.isMember("Dictionary") || |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
385 configuration["Dictionary"].type() != Json::objectValue) |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
386 { |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
387 return; |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
388 } |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
389 |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
390 Json::Value::Members tags(configuration["Dictionary"].getMemberNames()); |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
391 |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
392 for (Json::Value::ArrayIndex i = 0; i < tags.size(); i++) |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
393 { |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
394 const Json::Value& content = configuration["Dictionary"][tags[i]]; |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
395 if (content.type() != Json::arrayValue || |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
396 content.size() < 2 || |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
397 content.size() > 4 || |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
398 content[0].type() != Json::stringValue || |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
399 content[1].type() != Json::stringValue || |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
400 (content.size() >= 3 && content[2].type() != Json::intValue) || |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
401 (content.size() >= 4 && content[3].type() != Json::intValue)) |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
402 { |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
403 throw OrthancException(ErrorCode_BadFileFormat); |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
404 } |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
405 |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
406 DicomTag tag(FromDcmtkBridge::ParseTag(tags[i])); |
2006
6301bbcbcaed
more generic support of value representations
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1987
diff
changeset
|
407 ValueRepresentation vr = StringToValueRepresentation(content[0].asString(), true); |
1765
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
408 std::string name = content[1].asString(); |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
409 unsigned int minMultiplicity = (content.size() >= 2) ? content[2].asUInt() : 1; |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
410 unsigned int maxMultiplicity = (content.size() >= 3) ? content[3].asUInt() : 1; |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
411 |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
412 FromDcmtkBridge::RegisterDictionaryTag(tag, vr, name, minMultiplicity, maxMultiplicity); |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
413 } |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
414 } |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
415 |
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
416 |
2022
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
417 static void ConfigurePkcs11(const Json::Value& config) |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
418 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
419 if (config.type() != Json::objectValue || |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
420 !config.isMember("Module") || |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
421 config["Module"].type() != Json::stringValue) |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
422 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
423 LOG(ERROR) << "No path to the PKCS#11 module (DLL or .so) is provided for HTTPS client authentication"; |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
424 throw OrthancException(ErrorCode_BadFileFormat); |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
425 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
426 |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
427 std::string pin; |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
428 if (config.isMember("Pin")) |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
429 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
430 if (config["Pin"].type() == Json::stringValue) |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
431 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
432 pin = config["Pin"].asString(); |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
433 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
434 else |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
435 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
436 LOG(ERROR) << "The PIN number in the PKCS#11 configuration must be a string"; |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
437 throw OrthancException(ErrorCode_BadFileFormat); |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
438 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
439 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
440 |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
441 bool verbose = false; |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
442 if (config.isMember("Verbose")) |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
443 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
444 if (config["Verbose"].type() == Json::booleanValue) |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
445 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
446 verbose = config["Verbose"].asBool(); |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
447 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
448 else |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
449 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
450 LOG(ERROR) << "The Verbose option in the PKCS#11 configuration must be a Boolean"; |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
451 throw OrthancException(ErrorCode_BadFileFormat); |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
452 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
453 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
454 |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
455 HttpClient::InitializePkcs11(config["Module"].asString(), pin, verbose); |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
456 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
457 |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
458 |
1656 | 459 |
62 | 460 void OrthancInitialize(const char* configurationFile) |
0 | 461 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
462 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
463 |
2099 | 464 HttpClient::InitializeOpenSsl(); |
1526
096a8af528c9
fix streams, initialization/finalization of libcurl and openssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1485
diff
changeset
|
465 |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
466 InitializeServerEnumerations(); |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
467 |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
468 // Read the user-provided configuration |
0 | 469 ReadGlobalConfiguration(configurationFile); |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
470 ValidateGlobalConfiguration(); |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
471 |
2022
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
472 if (configuration_.isMember("Pkcs11")) |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
473 { |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
474 ConfigurePkcs11(configuration_["Pkcs11"]); |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
475 } |
fefbe71c2272
Possibility to use PKCS#11 authentication for hardware security modules with Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2020
diff
changeset
|
476 |
1987
ce90d109bb64
new plugin functions: OrthancPluginHttpClient and OrthancPluginGenerateUuid
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1928
diff
changeset
|
477 HttpClient::GlobalInitialize(); |
435
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
478 |
28ba73274919
registration of user-defined metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
430
diff
changeset
|
479 RegisterUserMetadata(); |
696
4c1860179cc5
dictionary of user-defined content types
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
690
diff
changeset
|
480 RegisterUserContentType(); |
685
b01cc78caba4
possibility to disable the DICOM/HTTP servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
660
diff
changeset
|
481 |
1656 | 482 FromDcmtkBridge::InitializeDictionary(); |
1765
57b9e6890482
New configuration option: "Dictionary" to declare custom DICOM tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1656
diff
changeset
|
483 LoadCustomDictionary(configuration_); |
847
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
484 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
485 #if ORTHANC_JPEG_LOSSLESS_ENABLED == 1 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
486 LOG(WARNING) << "Registering JPEG Lossless codecs"; |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
487 DJLSDecoderRegistration::registerCodecs(); |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
488 #endif |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
489 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
490 #if ORTHANC_JPEG_ENABLED == 1 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
491 LOG(WARNING) << "Registering JPEG codecs"; |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
492 DJDecoderRegistration::registerCodecs(); |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
493 #endif |
1610
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
494 |
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
495 fontRegistry_.AddFromResource(EmbeddedResources::FONT_UBUNTU_MONO_BOLD_16); |
1927
b60f27664b8f
simplification in FromDcmtkBridge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1900
diff
changeset
|
496 |
b60f27664b8f
simplification in FromDcmtkBridge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1900
diff
changeset
|
497 /* Disable "gethostbyaddr" (which results in memory leaks) and use raw IP addresses */ |
b60f27664b8f
simplification in FromDcmtkBridge
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1900
diff
changeset
|
498 dcmDisableGethostbyaddr.set(OFTrue); |
0 | 499 } |
500 | |
501 | |
502 | |
62 | 503 void OrthancFinalize() |
0 | 504 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
505 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
457 | 506 HttpClient::GlobalFinalize(); |
847
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
507 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
508 #if ORTHANC_JPEG_LOSSLESS_ENABLED == 1 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
509 // Unregister JPEG-LS codecs |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
510 DJLSDecoderRegistration::cleanup(); |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
511 #endif |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
512 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
513 #if ORTHANC_JPEG_ENABLED == 1 |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
514 // Unregister JPEG codecs |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
515 DJDecoderRegistration::cleanup(); |
03ea55da7429
fully functional JPEG-LS conversion
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
831
diff
changeset
|
516 #endif |
1526
096a8af528c9
fix streams, initialization/finalization of libcurl and openssl
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1485
diff
changeset
|
517 |
2099 | 518 HttpClient::FinalizeOpenSsl(); |
0 | 519 } |
520 | |
521 | |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
522 std::string Configuration::GetGlobalStringParameter(const std::string& parameter, |
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
523 const std::string& defaultValue) |
0 | 524 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
525 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
1533
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
526 return GetGlobalStringParameterInternal(parameter, defaultValue); |
0 | 527 } |
528 | |
529 | |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
530 int Configuration::GetGlobalIntegerParameter(const std::string& parameter, |
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
531 int defaultValue) |
0 | 532 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
533 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
0 | 534 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
535 if (configuration_.isMember(parameter)) |
0 | 536 { |
1592
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
537 if (configuration_[parameter].type() != Json::intValue) |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
538 { |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
539 LOG(ERROR) << "The configuration option \"" << parameter << "\" must be an integer"; |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
540 throw OrthancException(ErrorCode_BadParameterType); |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
541 } |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
542 else |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
543 { |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
544 return configuration_[parameter].asInt(); |
d73124f6b439
configuration option HttpDescribeErrors
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1587
diff
changeset
|
545 } |
0 | 546 } |
547 else | |
548 { | |
549 return defaultValue; | |
550 } | |
551 } | |
552 | |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
553 |
2069
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
554 unsigned int Configuration::GetGlobalUnsignedIntegerParameter(const std::string& parameter, |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
555 unsigned int defaultValue) |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
556 { |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
557 int v = GetGlobalIntegerParameter(parameter, defaultValue); |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
558 |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
559 if (v < 0) |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
560 { |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
561 LOG(ERROR) << "The configuration option \"" << parameter << "\" must be a positive integer"; |
2071 | 562 throw OrthancException(ErrorCode_ParameterOutOfRange); |
2069
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
563 } |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
564 else |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
565 { |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
566 return static_cast<unsigned int>(v); |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
567 } |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
568 } |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
569 |
fabf7820d1f1
New configuration options: "DicomScuTimeout" and "DicomScpTimeout" + validation of non-negative options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2022
diff
changeset
|
570 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
571 bool Configuration::GetGlobalBoolParameter(const std::string& parameter, |
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
572 bool defaultValue) |
23 | 573 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
574 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
1533
0011cc99443c
improving HTTPS support
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1526
diff
changeset
|
575 return GetGlobalBoolParameterInternal(parameter, defaultValue); |
23 | 576 } |
577 | |
578 | |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
579 void Configuration::GetDicomModalityUsingSymbolicName(RemoteModalityParameters& modality, |
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
580 const std::string& name) |
0 | 581 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
582 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
0 | 583 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
584 if (!configuration_.isMember("DicomModalities")) |
0 | 585 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
586 LOG(ERROR) << "No modality with symbolic name: " << name; |
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
587 throw OrthancException(ErrorCode_InexistentItem); |
0 | 588 } |
589 | |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
590 const Json::Value& modalities = configuration_["DicomModalities"]; |
0 | 591 if (modalities.type() != Json::objectValue || |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
592 !modalities.isMember(name)) |
0 | 593 { |
1007
871c49c9b11d
lua routing is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
942
diff
changeset
|
594 LOG(ERROR) << "No modality with symbolic name: " << name; |
871c49c9b11d
lua routing is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
942
diff
changeset
|
595 throw OrthancException(ErrorCode_InexistentItem); |
0 | 596 } |
597 | |
598 try | |
599 { | |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
600 modality.FromJson(modalities[name]); |
0 | 601 } |
1545 | 602 catch (OrthancException&) |
0 | 603 { |
1429
7366a0bdda6a
attempt of fix for Syngo.Via
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1427
diff
changeset
|
604 LOG(ERROR) << "Syntax error in the definition of DICOM modality \"" << name |
752
45715eadc2e0
port number as a string
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
725
diff
changeset
|
605 << "\". Please check your configuration file."; |
942
b3f6fb1130cd
fixes thanks to cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
847
diff
changeset
|
606 throw; |
0 | 607 } |
608 } | |
609 | |
610 | |
611 | |
2020 | 612 void Configuration::GetOrthancPeer(WebServiceParameters& peer, |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
613 const std::string& name) |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
614 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
615 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
616 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
617 if (!configuration_.isMember("OrthancPeers")) |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
618 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
619 LOG(ERROR) << "No peer with symbolic name: " << name; |
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
620 throw OrthancException(ErrorCode_InexistentItem); |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
621 } |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
622 |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
623 try |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
624 { |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
625 const Json::Value& modalities = configuration_["OrthancPeers"]; |
752
45715eadc2e0
port number as a string
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
725
diff
changeset
|
626 if (modalities.type() != Json::objectValue || |
45715eadc2e0
port number as a string
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
725
diff
changeset
|
627 !modalities.isMember(name)) |
485
bdbde1fbfab3
send resources through HTTP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
484
diff
changeset
|
628 { |
1007
871c49c9b11d
lua routing is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
942
diff
changeset
|
629 LOG(ERROR) << "No peer with symbolic name: " << name; |
871c49c9b11d
lua routing is working
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
942
diff
changeset
|
630 throw OrthancException(ErrorCode_InexistentItem); |
485
bdbde1fbfab3
send resources through HTTP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
484
diff
changeset
|
631 } |
752
45715eadc2e0
port number as a string
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
725
diff
changeset
|
632 |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
633 peer.FromJson(modalities[name]); |
485
bdbde1fbfab3
send resources through HTTP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
484
diff
changeset
|
634 } |
1545 | 635 catch (OrthancException&) |
485
bdbde1fbfab3
send resources through HTTP
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
484
diff
changeset
|
636 { |
752
45715eadc2e0
port number as a string
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
725
diff
changeset
|
637 LOG(ERROR) << "Syntax error in the definition of peer \"" << name |
45715eadc2e0
port number as a string
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
725
diff
changeset
|
638 << "\". Please check your configuration file."; |
942
b3f6fb1130cd
fixes thanks to cppcheck
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
847
diff
changeset
|
639 throw; |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
640 } |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
641 } |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
642 |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
643 |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
644 static bool ReadKeys(std::set<std::string>& target, |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
645 const char* parameter, |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
646 bool onlyAlphanumeric) |
0 | 647 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
648 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
0 | 649 |
650 target.clear(); | |
651 | |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
652 if (!configuration_.isMember(parameter)) |
0 | 653 { |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
654 return true; |
0 | 655 } |
656 | |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
657 const Json::Value& modalities = configuration_[parameter]; |
0 | 658 if (modalities.type() != Json::objectValue) |
659 { | |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
660 LOG(ERROR) << "Bad format of the \"DicomModalities\" configuration section"; |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
661 throw OrthancException(ErrorCode_BadFileFormat); |
0 | 662 } |
663 | |
664 Json::Value::Members members = modalities.getMemberNames(); | |
665 for (size_t i = 0; i < members.size(); i++) | |
666 { | |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
667 if (onlyAlphanumeric) |
0 | 668 { |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
669 for (size_t j = 0; j < members[i].size(); j++) |
0 | 670 { |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
671 if (!isalnum(members[i][j]) && members[i][j] != '-') |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
672 { |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
673 return false; |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
674 } |
0 | 675 } |
676 } | |
677 | |
678 target.insert(members[i]); | |
679 } | |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
680 |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
681 return true; |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
682 } |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
683 |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
684 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
685 void Configuration::GetListOfDicomModalities(std::set<std::string>& target) |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
686 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
687 target.clear(); |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
688 |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
689 if (!ReadKeys(target, "DicomModalities", true)) |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
690 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
691 LOG(ERROR) << "Only alphanumeric and dash characters are allowed in the names of the modalities"; |
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
692 throw OrthancException(ErrorCode_BadFileFormat); |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
693 } |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
694 } |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
695 |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
696 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
697 void Configuration::GetListOfOrthancPeers(std::set<std::string>& target) |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
698 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
699 target.clear(); |
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
700 |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
701 if (!ReadKeys(target, "OrthancPeers", true)) |
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
702 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
703 LOG(ERROR) << "Only alphanumeric and dash characters are allowed in the names of Orthanc peers"; |
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
704 throw OrthancException(ErrorCode_BadFileFormat); |
484
b8ace6fc1d1f
preparation for handling Orthanc peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
476
diff
changeset
|
705 } |
0 | 706 } |
25
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
707 |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
708 |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
709 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
710 void Configuration::SetupRegisteredUsers(MongooseServer& httpServer) |
25
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
711 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
712 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
25
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
713 |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
714 httpServer.ClearUsers(); |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
715 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
716 if (!configuration_.isMember("RegisteredUsers")) |
25
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
717 { |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
718 return; |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
719 } |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
720 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
721 const Json::Value& users = configuration_["RegisteredUsers"]; |
25
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
722 if (users.type() != Json::objectValue) |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
723 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
724 LOG(ERROR) << "Badly formatted list of users"; |
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
725 throw OrthancException(ErrorCode_BadFileFormat); |
25
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
726 } |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
727 |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
728 Json::Value::Members usernames = users.getMemberNames(); |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
729 for (size_t i = 0; i < usernames.size(); i++) |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
730 { |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
731 const std::string& username = usernames[i]; |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
732 std::string password = users[username].asString(); |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
733 httpServer.RegisterUser(username.c_str(), password.c_str()); |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
734 } |
dd1489098265
basic http authentication
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
23
diff
changeset
|
735 } |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
736 |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
737 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
738 std::string Configuration::InterpretRelativePath(const std::string& baseDirectory, |
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
739 const std::string& relativePath) |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
740 { |
429
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
741 boost::filesystem::path base(baseDirectory); |
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
742 boost::filesystem::path relative(relativePath); |
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
743 |
428 | 744 /** |
745 The following lines should be equivalent to this one: | |
746 | |
429
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
747 return (base / relative).string(); |
428 | 748 |
749 However, for some unknown reason, some versions of Boost do not | |
429
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
750 make the proper path resolution when "baseDirectory" is an |
428 | 751 absolute path. So, a hack is used below. |
752
45715eadc2e0
port number as a string
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
725
diff
changeset
|
752 **/ |
428 | 753 |
429
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
754 if (relative.is_absolute()) |
427 | 755 { |
429
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
756 return relative.string(); |
427 | 757 } |
758 else | |
759 { | |
429
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
760 return (base / relative).string(); |
427 | 761 } |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
762 } |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
763 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
764 std::string Configuration::InterpretStringParameterAsPath(const std::string& parameter) |
429
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
765 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
766 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
429
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
767 return InterpretRelativePath(defaultDirectory_.string(), parameter); |
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
768 } |
09b3c6265a94
unit test for fedora 18 problem
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
428
diff
changeset
|
769 |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
770 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
771 void Configuration::GetGlobalListOfStringsParameter(std::list<std::string>& target, |
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
772 const std::string& key) |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
773 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
774 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
775 |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
776 target.clear(); |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
777 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
778 if (!configuration_.isMember(key)) |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
779 { |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
780 return; |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
781 } |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
782 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
783 const Json::Value& lst = configuration_[key]; |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
784 |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
785 if (lst.type() != Json::arrayValue) |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
786 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
787 LOG(ERROR) << "Badly formatted list of strings"; |
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
788 throw OrthancException(ErrorCode_BadFileFormat); |
394
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
789 } |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
790 |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
791 for (Json::Value::ArrayIndex i = 0; i < lst.size(); i++) |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
792 { |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
793 target.push_back(lst[i].asString()); |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
794 } |
9784f19f7e1b
path relative to configuration path, list of lua scripts
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
136
diff
changeset
|
795 } |
613 | 796 |
797 | |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
798 bool Configuration::IsSameAETitle(const std::string& aet1, |
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
799 const std::string& aet2) |
690
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
800 { |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
801 if (GetGlobalBoolParameter("StrictAetComparison", false)) |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
802 { |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
803 // Case-sensitive matching |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
804 return aet1 == aet2; |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
805 } |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
806 else |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
807 { |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
808 // Case-insensitive matching (default) |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
809 std::string tmp1, tmp2; |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
810 Toolbox::ToLowerCase(tmp1, aet1); |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
811 Toolbox::ToLowerCase(tmp2, aet2); |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
812 return tmp1 == tmp2; |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
813 } |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
814 } |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
815 |
2e67366aab83
case-insensitive matching of Application Entity Titles
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
689
diff
changeset
|
816 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
817 bool Configuration::LookupDicomModalityUsingAETitle(RemoteModalityParameters& modality, |
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
818 const std::string& aet) |
613 | 819 { |
820 std::set<std::string> modalities; | |
821 GetListOfDicomModalities(modalities); | |
822 | |
823 for (std::set<std::string>::const_iterator | |
656 | 824 it = modalities.begin(); it != modalities.end(); ++it) |
613 | 825 { |
826 try | |
827 { | |
806 | 828 GetDicomModalityUsingSymbolicName(modality, *it); |
725 | 829 |
806 | 830 if (IsSameAETitle(aet, modality.GetApplicationEntityTitle())) |
613 | 831 { |
617 | 832 return true; |
613 | 833 } |
834 } | |
835 catch (OrthancException&) | |
836 { | |
837 } | |
838 } | |
839 | |
617 | 840 return false; |
841 } | |
842 | |
843 | |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
844 bool Configuration::IsKnownAETitle(const std::string& aet) |
617 | 845 { |
806 | 846 RemoteModalityParameters modality; |
847 return LookupDicomModalityUsingAETitle(modality, aet); | |
617 | 848 } |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
849 |
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
850 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
851 RemoteModalityParameters Configuration::GetModalityUsingSymbolicName(const std::string& name) |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
852 { |
806 | 853 RemoteModalityParameters modality; |
854 GetDicomModalityUsingSymbolicName(modality, name); | |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
855 |
806 | 856 return modality; |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
857 } |
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
858 |
773 | 859 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
860 RemoteModalityParameters Configuration::GetModalityUsingAet(const std::string& aet) |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
861 { |
806 | 862 RemoteModalityParameters modality; |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
863 |
806 | 864 if (LookupDicomModalityUsingAETitle(modality, aet)) |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
865 { |
806 | 866 return modality; |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
867 } |
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
868 else |
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
869 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
870 LOG(ERROR) << "Unknown modality for AET: " << aet; |
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
871 throw OrthancException(ErrorCode_InexistentItem); |
772
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
872 } |
31cc399c7762
RemoteModalityParameters
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
771
diff
changeset
|
873 } |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
874 |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
875 |
812 | 876 void Configuration::UpdateModality(const std::string& symbolicName, |
877 const RemoteModalityParameters& modality) | |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
878 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
879 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
880 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
881 if (!configuration_.isMember("DicomModalities")) |
1366 | 882 { |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
883 configuration_["DicomModalities"] = Json::objectValue; |
1366 | 884 } |
885 | |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
886 Json::Value& modalities = configuration_["DicomModalities"]; |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
887 if (modalities.type() != Json::objectValue) |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
888 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
889 LOG(ERROR) << "Bad file format for modality: " << symbolicName; |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
890 throw OrthancException(ErrorCode_BadFileFormat); |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
891 } |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
892 |
812 | 893 modalities.removeMember(symbolicName); |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
894 |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
895 Json::Value v; |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
896 modality.ToJson(v); |
812 | 897 modalities[symbolicName] = v; |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
898 } |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
899 |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
900 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
901 void Configuration::RemoveModality(const std::string& symbolicName) |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
902 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
903 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
904 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
905 if (!configuration_.isMember("DicomModalities")) |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
906 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
907 LOG(ERROR) << "No modality with symbolic name: " << symbolicName; |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
908 throw OrthancException(ErrorCode_BadFileFormat); |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
909 } |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
910 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
911 Json::Value& modalities = configuration_["DicomModalities"]; |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
912 if (modalities.type() != Json::objectValue) |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
913 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
914 LOG(ERROR) << "Bad file format for the \"DicomModalities\" configuration section"; |
807
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
915 throw OrthancException(ErrorCode_BadFileFormat); |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
916 } |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
917 |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
918 modalities.removeMember(symbolicName.c_str()); |
566a2fb3c1fb
update/delete modalities
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
806
diff
changeset
|
919 } |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
920 |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
921 |
812 | 922 void Configuration::UpdatePeer(const std::string& symbolicName, |
2020 | 923 const WebServiceParameters& peer) |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
924 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
925 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
926 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
927 if (!configuration_.isMember("OrthancPeers")) |
1366 | 928 { |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
929 LOG(ERROR) << "No peer with symbolic name: " << symbolicName; |
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
930 configuration_["OrthancPeers"] = Json::objectValue; |
1366 | 931 } |
932 | |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
933 Json::Value& peers = configuration_["OrthancPeers"]; |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
934 if (peers.type() != Json::objectValue) |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
935 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
936 LOG(ERROR) << "Bad file format for the \"OrthancPeers\" configuration section"; |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
937 throw OrthancException(ErrorCode_BadFileFormat); |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
938 } |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
939 |
812 | 940 peers.removeMember(symbolicName); |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
941 |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
942 Json::Value v; |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
943 peer.ToJson(v); |
812 | 944 peers[symbolicName] = v; |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
945 } |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
946 |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
947 |
810
401a9633e492
configuration into a namespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
808
diff
changeset
|
948 void Configuration::RemovePeer(const std::string& symbolicName) |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
949 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
950 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
951 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
952 if (!configuration_.isMember("OrthancPeers")) |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
953 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
954 LOG(ERROR) << "No peer with symbolic name: " << symbolicName; |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
955 throw OrthancException(ErrorCode_BadFileFormat); |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
956 } |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
957 |
1423
7b7d597a190c
The configuration can be splitted into several files stored inside the same folder
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1422
diff
changeset
|
958 Json::Value& peers = configuration_["OrthancPeers"]; |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
959 if (peers.type() != Json::objectValue) |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
960 { |
1422
52b2070fc8f1
improvements to the logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1366
diff
changeset
|
961 LOG(ERROR) << "Bad file format for the \"OrthancPeers\" configuration section"; |
808
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
962 throw OrthancException(ErrorCode_BadFileFormat); |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
963 } |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
964 |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
965 peers.removeMember(symbolicName.c_str()); |
2d9a000aa3a6
update/delete peers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
807
diff
changeset
|
966 } |
1145
0479d02c6778
Plugins can retrieve the path to Orthanc and to its configuration file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1007
diff
changeset
|
967 |
0479d02c6778
Plugins can retrieve the path to Orthanc and to its configuration file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1007
diff
changeset
|
968 |
0479d02c6778
Plugins can retrieve the path to Orthanc and to its configuration file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1007
diff
changeset
|
969 |
0479d02c6778
Plugins can retrieve the path to Orthanc and to its configuration file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1007
diff
changeset
|
970 const std::string& Configuration::GetConfigurationAbsolutePath() |
0479d02c6778
Plugins can retrieve the path to Orthanc and to its configuration file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1007
diff
changeset
|
971 { |
0479d02c6778
Plugins can retrieve the path to Orthanc and to its configuration file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1007
diff
changeset
|
972 return configurationAbsolutePath_; |
0479d02c6778
Plugins can retrieve the path to Orthanc and to its configuration file
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1007
diff
changeset
|
973 } |
1274 | 974 |
975 | |
976 static IDatabaseWrapper* CreateSQLiteWrapper() | |
977 { | |
978 std::string storageDirectoryStr = Configuration::GetGlobalStringParameter("StorageDirectory", "OrthancStorage"); | |
979 | |
980 // Open the database | |
981 boost::filesystem::path indexDirectory = Configuration::InterpretStringParameterAsPath( | |
982 Configuration::GetGlobalStringParameter("IndexDirectory", storageDirectoryStr)); | |
983 | |
984 LOG(WARNING) << "SQLite index directory: " << indexDirectory; | |
985 | |
986 try | |
987 { | |
988 boost::filesystem::create_directories(indexDirectory); | |
989 } | |
990 catch (boost::filesystem::filesystem_error) | |
991 { | |
992 } | |
993 | |
994 return new DatabaseWrapper(indexDirectory.string() + "/index"); | |
995 } | |
996 | |
997 | |
998 namespace | |
999 { | |
1000 // Anonymous namespace to avoid clashes between compilation modules | |
1001 | |
1002 class FilesystemStorageWithoutDicom : public IStorageArea | |
1003 { | |
1004 private: | |
1005 FilesystemStorage storage_; | |
1006 | |
1007 public: | |
1008 FilesystemStorageWithoutDicom(const std::string& path) : storage_(path) | |
1009 { | |
1010 } | |
1011 | |
1012 virtual void Create(const std::string& uuid, | |
1013 const void* content, | |
1014 size_t size, | |
1015 FileContentType type) | |
1016 { | |
1017 if (type != FileContentType_Dicom) | |
1018 { | |
1019 storage_.Create(uuid, content, size, type); | |
1020 } | |
1021 } | |
1022 | |
1023 virtual void Read(std::string& content, | |
1024 const std::string& uuid, | |
1025 FileContentType type) | |
1026 { | |
1027 if (type != FileContentType_Dicom) | |
1028 { | |
1029 storage_.Read(content, uuid, type); | |
1030 } | |
1031 else | |
1032 { | |
1033 throw OrthancException(ErrorCode_UnknownResource); | |
1034 } | |
1035 } | |
1036 | |
1037 virtual void Remove(const std::string& uuid, | |
1038 FileContentType type) | |
1039 { | |
1040 if (type != FileContentType_Dicom) | |
1041 { | |
1042 storage_.Remove(uuid, type); | |
1043 } | |
1044 } | |
1045 }; | |
1046 } | |
1047 | |
1048 | |
1049 static IStorageArea* CreateFilesystemStorage() | |
1050 { | |
1051 std::string storageDirectoryStr = Configuration::GetGlobalStringParameter("StorageDirectory", "OrthancStorage"); | |
1052 | |
1053 boost::filesystem::path storageDirectory = Configuration::InterpretStringParameterAsPath(storageDirectoryStr); | |
1054 LOG(WARNING) << "Storage directory: " << storageDirectory; | |
1055 | |
1056 if (Configuration::GetGlobalBoolParameter("StoreDicom", true)) | |
1057 { | |
1058 return new FilesystemStorage(storageDirectory.string()); | |
1059 } | |
1060 else | |
1061 { | |
1062 LOG(WARNING) << "The DICOM files will not be stored, Orthanc running in index-only mode"; | |
1063 return new FilesystemStorageWithoutDicom(storageDirectory.string()); | |
1064 } | |
1065 } | |
1066 | |
1067 | |
1068 IDatabaseWrapper* Configuration::CreateDatabaseWrapper() | |
1069 { | |
1070 return CreateSQLiteWrapper(); | |
1071 } | |
1072 | |
1073 | |
1074 IStorageArea* Configuration::CreateStorageArea() | |
1075 { | |
1076 return CreateFilesystemStorage(); | |
1077 } | |
1424
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1078 |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1079 |
1587
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1545
diff
changeset
|
1080 void Configuration::GetConfiguration(Json::Value& result) |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1545
diff
changeset
|
1081 { |
1892
0001f8cd7849
Warn about badly formatted modality/peer definitions in configuration file at startup
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1772
diff
changeset
|
1082 boost::recursive_mutex::scoped_lock lock(globalMutex_); |
1587
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1545
diff
changeset
|
1083 result = configuration_; |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1545
diff
changeset
|
1084 } |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1545
diff
changeset
|
1085 |
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1545
diff
changeset
|
1086 |
1424
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1087 void Configuration::FormatConfiguration(std::string& result) |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1088 { |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1089 Json::Value config; |
1587
d7e569640d09
New function "GetOrthancConfiguration()" to get the Orthanc configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1545
diff
changeset
|
1090 GetConfiguration(config); |
1424
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1091 |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1092 Json::StyledWriter w; |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1093 result = w.write(config); |
fe384a9d3b51
OrthancPluginGetConfiguration
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1423
diff
changeset
|
1094 } |
1610
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
1095 |
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
1096 |
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
1097 const FontRegistry& Configuration::GetFontRegistry() |
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
1098 { |
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
1099 return fontRegistry_; |
2dff2bdffdb8
font support within Orthanc
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
1100 } |
1928
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1101 |
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1102 |
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1103 Encoding Configuration::GetDefaultEncoding() |
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1104 { |
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1105 std::string s = GetGlobalStringParameter("DefaultEncoding", "Latin1"); |
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1106 |
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1107 // By default, Latin1 encoding is assumed |
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1108 return s.empty() ? Encoding_Latin1 : StringToEncoding(s.c_str()); |
84c7eaeb5244
Configuration::GetDefaultEncoding
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1927
diff
changeset
|
1109 } |
2010
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1110 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1111 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1112 bool Configuration::HasConfigurationChanged() |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1113 { |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1114 Json::Value starting; |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1115 GetConfiguration(starting); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1116 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1117 Json::Value current; |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1118 ReadConfiguration(current, configurationFileArg_); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1119 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1120 Json::FastWriter writer; |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1121 std::string a = writer.write(starting); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1122 std::string b = writer.write(current); |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1123 |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1124 return a != b; |
4dafe2a0d3ab
Support of SIGHUP signal (restart Orthanc only if the configuration files have changed)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2006
diff
changeset
|
1125 } |
0 | 1126 } |