Mercurial > hg > orthanc-transfers
annotate Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h @ 72:d60d1a3a7357 OrthancTransfers-1.4
fix md5
author | Alain Mazy <am@osimis.io> |
---|---|
date | Tue, 26 Mar 2024 10:16:15 +0100 |
parents | 5915547fa6f2 |
children | 5fb01c588287 |
rev | line source |
---|---|
22 | 1 /** |
2 * Orthanc - A Lightweight, RESTful DICOM Store | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
40
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
22 | 7 * |
8 * This program is free software: you can redistribute it and/or | |
9 * modify it under the terms of the GNU General Public License as | |
10 * published by the Free Software Foundation, either version 3 of the | |
11 * License, or (at your option) any later version. | |
28 | 12 * |
22 | 13 * This program is distributed in the hope that it will be useful, but |
14 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 * General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU General Public License | |
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 **/ | |
21 | |
22 | |
23 #pragma once | |
24 | |
25 #include "OrthancPluginException.h" | |
26 | |
27 #include <orthanc/OrthancCPlugin.h> | |
28 #include <boost/noncopyable.hpp> | |
29 #include <boost/lexical_cast.hpp> | |
30 #include <boost/date_time/posix_time/posix_time.hpp> | |
31 #include <json/value.h> | |
32 #include <vector> | |
33 #include <list> | |
34 #include <set> | |
35 #include <map> | |
36 | |
37 | |
38 | |
39 /** | |
40 * The definition of ORTHANC_PLUGINS_VERSION_IS_ABOVE below is for | |
41 * backward compatibility with Orthanc SDK <= 1.3.0. | |
42 * | |
43 * $ hg diff -r Orthanc-1.3.0:Orthanc-1.3.1 ../../../Plugins/Include/orthanc/OrthancCPlugin.h | |
44 * | |
45 **/ | |
46 #if !defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) | |
47 #define ORTHANC_PLUGINS_VERSION_IS_ABOVE(major, minor, revision) \ | |
48 (ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER > major || \ | |
49 (ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER == major && \ | |
50 (ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER > minor || \ | |
51 (ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER == minor && \ | |
52 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER >= revision)))) | |
53 #endif | |
54 | |
55 | |
56 #if !defined(ORTHANC_FRAMEWORK_VERSION_IS_ABOVE) | |
57 #define ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(major, minor, revision) \ | |
58 (ORTHANC_VERSION_MAJOR > major || \ | |
59 (ORTHANC_VERSION_MAJOR == major && \ | |
60 (ORTHANC_VERSION_MINOR > minor || \ | |
61 (ORTHANC_VERSION_MINOR == minor && \ | |
62 ORTHANC_VERSION_REVISION >= revision)))) | |
63 #endif | |
64 | |
65 | |
66 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 2, 0) | |
67 // The "OrthancPluginFindMatcher()" primitive was introduced in Orthanc 1.2.0 | |
68 # define HAS_ORTHANC_PLUGIN_FIND_MATCHER 1 | |
69 #else | |
70 # define HAS_ORTHANC_PLUGIN_FIND_MATCHER 0 | |
71 #endif | |
72 | |
73 | |
74 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 4, 2) | |
75 # define HAS_ORTHANC_PLUGIN_PEERS 1 | |
76 # define HAS_ORTHANC_PLUGIN_JOB 1 | |
77 #else | |
78 # define HAS_ORTHANC_PLUGIN_PEERS 0 | |
79 # define HAS_ORTHANC_PLUGIN_JOB 0 | |
80 #endif | |
81 | |
82 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 0) | |
83 # define HAS_ORTHANC_PLUGIN_EXCEPTION_DETAILS 1 | |
84 #else | |
85 # define HAS_ORTHANC_PLUGIN_EXCEPTION_DETAILS 0 | |
86 #endif | |
87 | |
88 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4) | |
89 # define HAS_ORTHANC_PLUGIN_METRICS 1 | |
90 #else | |
91 # define HAS_ORTHANC_PLUGIN_METRICS 0 | |
92 #endif | |
93 | |
94 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 1, 0) | |
95 # define HAS_ORTHANC_PLUGIN_HTTP_CLIENT 1 | |
96 #else | |
97 # define HAS_ORTHANC_PLUGIN_HTTP_CLIENT 0 | |
98 #endif | |
99 | |
100 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 7) | |
101 # define HAS_ORTHANC_PLUGIN_CHUNKED_HTTP_CLIENT 1 | |
102 #else | |
103 # define HAS_ORTHANC_PLUGIN_CHUNKED_HTTP_CLIENT 0 | |
104 #endif | |
105 | |
106 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 7) | |
107 # define HAS_ORTHANC_PLUGIN_CHUNKED_HTTP_SERVER 1 | |
108 #else | |
109 # define HAS_ORTHANC_PLUGIN_CHUNKED_HTTP_SERVER 0 | |
110 #endif | |
111 | |
112 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 6, 0) | |
113 # define HAS_ORTHANC_PLUGIN_STORAGE_COMMITMENT_SCP 1 | |
114 #else | |
115 # define HAS_ORTHANC_PLUGIN_STORAGE_COMMITMENT_SCP 0 | |
116 #endif | |
117 | |
40
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
118 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 9, 2) |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
119 # define HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API 1 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
120 #else |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
121 # define HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API 0 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
122 #endif |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
123 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
124 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 10, 1) |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
125 # define HAS_ORTHANC_PLUGIN_WEBDAV 1 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
126 #else |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
127 # define HAS_ORTHANC_PLUGIN_WEBDAV 0 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
128 #endif |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
129 |
22 | 130 |
131 | |
132 namespace OrthancPlugins | |
133 { | |
134 typedef void (*RestCallback) (OrthancPluginRestOutput* output, | |
135 const char* url, | |
136 const OrthancPluginHttpRequest* request); | |
137 | |
138 void SetGlobalContext(OrthancPluginContext* context); | |
139 | |
140 bool HasGlobalContext(); | |
141 | |
142 OrthancPluginContext* GetGlobalContext(); | |
143 | |
144 | |
145 class OrthancImage; | |
146 | |
147 | |
148 class MemoryBuffer : public boost::noncopyable | |
149 { | |
150 private: | |
151 OrthancPluginMemoryBuffer buffer_; | |
152 | |
153 void Check(OrthancPluginErrorCode code); | |
154 | |
155 bool CheckHttp(OrthancPluginErrorCode code); | |
156 | |
157 public: | |
158 MemoryBuffer(); | |
159 | |
160 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 7, 0) | |
161 // This constructor makes a copy of the given buffer in the memory | |
162 // handled by the Orthanc core | |
163 MemoryBuffer(const void* buffer, | |
164 size_t size); | |
165 #endif | |
166 | |
167 ~MemoryBuffer() | |
168 { | |
169 Clear(); | |
170 } | |
171 | |
172 OrthancPluginMemoryBuffer* operator*() | |
173 { | |
174 return &buffer_; | |
175 } | |
176 | |
177 // This transfers ownership from "other" to "this" | |
178 void Assign(OrthancPluginMemoryBuffer& other); | |
179 | |
180 void Swap(MemoryBuffer& other); | |
181 | |
182 OrthancPluginMemoryBuffer Release(); | |
183 | |
184 const char* GetData() const | |
185 { | |
186 if (buffer_.size > 0) | |
187 { | |
188 return reinterpret_cast<const char*>(buffer_.data); | |
189 } | |
190 else | |
191 { | |
192 return NULL; | |
193 } | |
194 } | |
195 | |
196 size_t GetSize() const | |
197 { | |
198 return buffer_.size; | |
199 } | |
200 | |
201 bool IsEmpty() const | |
202 { | |
203 return GetSize() == 0 || GetData() == NULL; | |
204 } | |
205 | |
206 void Clear(); | |
207 | |
208 void ToString(std::string& target) const; | |
209 | |
210 void ToJson(Json::Value& target) const; | |
211 | |
212 bool RestApiGet(const std::string& uri, | |
213 bool applyPlugins); | |
214 | |
215 bool RestApiGet(const std::string& uri, | |
216 const std::map<std::string, std::string>& httpHeaders, | |
217 bool applyPlugins); | |
218 | |
219 bool RestApiPost(const std::string& uri, | |
220 const void* body, | |
221 size_t bodySize, | |
222 bool applyPlugins); | |
223 | |
224 bool RestApiPut(const std::string& uri, | |
225 const void* body, | |
226 size_t bodySize, | |
227 bool applyPlugins); | |
228 | |
229 bool RestApiPost(const std::string& uri, | |
230 const Json::Value& body, | |
231 bool applyPlugins); | |
232 | |
40
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
233 #if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
234 bool RestApiPost(const std::string& uri, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
235 const Json::Value& body, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
236 const std::map<std::string, std::string>& httpHeaders, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
237 bool applyPlugins); |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
238 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
239 bool RestApiPost(const std::string& uri, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
240 const void* body, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
241 size_t bodySize, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
242 const std::map<std::string, std::string>& httpHeaders, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
243 bool applyPlugins); |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
244 #endif |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
245 |
22 | 246 bool RestApiPut(const std::string& uri, |
247 const Json::Value& body, | |
248 bool applyPlugins); | |
249 | |
250 bool RestApiPost(const std::string& uri, | |
251 const std::string& body, | |
252 bool applyPlugins) | |
253 { | |
254 return RestApiPost(uri, body.empty() ? NULL : body.c_str(), body.size(), applyPlugins); | |
255 } | |
256 | |
257 bool RestApiPut(const std::string& uri, | |
258 const std::string& body, | |
259 bool applyPlugins) | |
260 { | |
261 return RestApiPut(uri, body.empty() ? NULL : body.c_str(), body.size(), applyPlugins); | |
262 } | |
263 | |
264 void CreateDicom(const Json::Value& tags, | |
265 OrthancPluginCreateDicomFlags flags); | |
266 | |
267 void CreateDicom(const Json::Value& tags, | |
268 const OrthancImage& pixelData, | |
269 OrthancPluginCreateDicomFlags flags); | |
270 | |
271 void ReadFile(const std::string& path); | |
272 | |
273 void GetDicomQuery(const OrthancPluginWorklistQuery* query); | |
274 | |
275 void DicomToJson(Json::Value& target, | |
276 OrthancPluginDicomToJsonFormat format, | |
277 OrthancPluginDicomToJsonFlags flags, | |
278 uint32_t maxStringLength); | |
279 | |
280 bool HttpGet(const std::string& url, | |
281 const std::string& username, | |
282 const std::string& password); | |
283 | |
284 bool HttpPost(const std::string& url, | |
285 const std::string& body, | |
286 const std::string& username, | |
287 const std::string& password); | |
288 | |
289 bool HttpPut(const std::string& url, | |
290 const std::string& body, | |
291 const std::string& username, | |
292 const std::string& password); | |
293 | |
294 void GetDicomInstance(const std::string& instanceId); | |
295 }; | |
296 | |
297 | |
298 class OrthancString : public boost::noncopyable | |
299 { | |
300 private: | |
301 char* str_; | |
302 | |
303 void Clear(); | |
304 | |
305 public: | |
306 OrthancString() : | |
307 str_(NULL) | |
308 { | |
309 } | |
310 | |
311 ~OrthancString() | |
312 { | |
313 Clear(); | |
314 } | |
315 | |
316 // This transfers ownership, warning: The string must have been | |
317 // allocated by the Orthanc core | |
318 void Assign(char* str); | |
319 | |
320 const char* GetContent() const | |
321 { | |
322 return str_; | |
323 } | |
324 | |
40
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
325 bool IsNullOrEmpty() const |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
326 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
327 return str_ == NULL || str_[0] == 0; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
328 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
329 |
22 | 330 void ToString(std::string& target) const; |
331 | |
332 void ToJson(Json::Value& target) const; | |
40
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
333 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
334 void ToJsonWithoutComments(Json::Value& target) const; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
335 }; |
22 | 336 |
337 | |
338 class OrthancConfiguration : public boost::noncopyable | |
339 { | |
340 private: | |
341 Json::Value configuration_; // Necessarily a Json::objectValue | |
342 std::string path_; | |
343 | |
344 std::string GetPath(const std::string& key) const; | |
345 | |
346 void LoadConfiguration(); | |
347 | |
348 public: | |
349 OrthancConfiguration(); | |
350 | |
351 explicit OrthancConfiguration(bool load); | |
352 | |
353 const Json::Value& GetJson() const | |
354 { | |
355 return configuration_; | |
356 } | |
357 | |
358 bool IsSection(const std::string& key) const; | |
359 | |
360 void GetSection(OrthancConfiguration& target, | |
361 const std::string& key) const; | |
362 | |
363 bool LookupStringValue(std::string& target, | |
364 const std::string& key) const; | |
365 | |
366 bool LookupIntegerValue(int& target, | |
367 const std::string& key) const; | |
368 | |
369 bool LookupUnsignedIntegerValue(unsigned int& target, | |
370 const std::string& key) const; | |
371 | |
372 bool LookupBooleanValue(bool& target, | |
373 const std::string& key) const; | |
374 | |
375 bool LookupFloatValue(float& target, | |
376 const std::string& key) const; | |
377 | |
378 bool LookupListOfStrings(std::list<std::string>& target, | |
379 const std::string& key, | |
380 bool allowSingleString) const; | |
381 | |
382 bool LookupSetOfStrings(std::set<std::string>& target, | |
383 const std::string& key, | |
384 bool allowSingleString) const; | |
385 | |
386 std::string GetStringValue(const std::string& key, | |
387 const std::string& defaultValue) const; | |
388 | |
389 int GetIntegerValue(const std::string& key, | |
390 int defaultValue) const; | |
391 | |
392 unsigned int GetUnsignedIntegerValue(const std::string& key, | |
393 unsigned int defaultValue) const; | |
394 | |
395 bool GetBooleanValue(const std::string& key, | |
396 bool defaultValue) const; | |
397 | |
398 float GetFloatValue(const std::string& key, | |
399 float defaultValue) const; | |
400 | |
401 void GetDictionary(std::map<std::string, std::string>& target, | |
402 const std::string& key) const; | |
403 }; | |
404 | |
405 class OrthancImage : public boost::noncopyable | |
406 { | |
407 private: | |
408 OrthancPluginImage* image_; | |
409 | |
410 void Clear(); | |
411 | |
412 void CheckImageAvailable() const; | |
413 | |
414 public: | |
415 OrthancImage(); | |
416 | |
417 explicit OrthancImage(OrthancPluginImage* image); | |
418 | |
419 OrthancImage(OrthancPluginPixelFormat format, | |
420 uint32_t width, | |
421 uint32_t height); | |
422 | |
423 OrthancImage(OrthancPluginPixelFormat format, | |
424 uint32_t width, | |
425 uint32_t height, | |
426 uint32_t pitch, | |
427 void* buffer); | |
428 | |
429 ~OrthancImage() | |
430 { | |
431 Clear(); | |
432 } | |
433 | |
434 void UncompressPngImage(const void* data, | |
435 size_t size); | |
436 | |
437 void UncompressJpegImage(const void* data, | |
438 size_t size); | |
439 | |
440 void DecodeDicomImage(const void* data, | |
441 size_t size, | |
442 unsigned int frame); | |
443 | |
444 OrthancPluginPixelFormat GetPixelFormat() const; | |
445 | |
446 unsigned int GetWidth() const; | |
447 | |
448 unsigned int GetHeight() const; | |
449 | |
450 unsigned int GetPitch() const; | |
451 | |
452 void* GetBuffer() const; | |
453 | |
454 const OrthancPluginImage* GetObject() const | |
455 { | |
456 return image_; | |
457 } | |
458 | |
459 void CompressPngImage(MemoryBuffer& target) const; | |
460 | |
461 void CompressJpegImage(MemoryBuffer& target, | |
462 uint8_t quality) const; | |
463 | |
464 void AnswerPngImage(OrthancPluginRestOutput* output) const; | |
465 | |
466 void AnswerJpegImage(OrthancPluginRestOutput* output, | |
467 uint8_t quality) const; | |
468 | |
469 void* GetWriteableBuffer(); | |
470 | |
471 OrthancPluginImage* Release(); | |
472 }; | |
473 | |
474 | |
475 #if HAS_ORTHANC_PLUGIN_FIND_MATCHER == 1 | |
476 class FindMatcher : public boost::noncopyable | |
477 { | |
478 private: | |
479 OrthancPluginFindMatcher* matcher_; | |
480 const OrthancPluginWorklistQuery* worklist_; | |
481 | |
482 void SetupDicom(const void* query, | |
483 uint32_t size); | |
484 | |
485 public: | |
486 explicit FindMatcher(const OrthancPluginWorklistQuery* worklist); | |
487 | |
488 FindMatcher(const void* query, | |
489 uint32_t size) | |
490 { | |
491 SetupDicom(query, size); | |
492 } | |
493 | |
494 explicit FindMatcher(const MemoryBuffer& dicom) | |
495 { | |
496 SetupDicom(dicom.GetData(), dicom.GetSize()); | |
497 } | |
498 | |
499 ~FindMatcher(); | |
500 | |
501 bool IsMatch(const void* dicom, | |
502 uint32_t size) const; | |
503 | |
504 bool IsMatch(const MemoryBuffer& dicom) const | |
505 { | |
506 return IsMatch(dicom.GetData(), dicom.GetSize()); | |
507 } | |
508 }; | |
509 #endif | |
510 | |
511 | |
31
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
512 bool ReadJson(Json::Value& target, |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
513 const std::string& source); |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
514 |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
515 bool ReadJson(Json::Value& target, |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
516 const void* buffer, |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
517 size_t size); |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
518 |
35 | 519 bool ReadJsonWithoutComments(Json::Value& target, |
520 const std::string& source); | |
521 | |
522 bool ReadJsonWithoutComments(Json::Value& target, | |
523 const void* buffer, | |
524 size_t size); | |
525 | |
31
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
526 void WriteFastJson(std::string& target, |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
527 const Json::Value& source); |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
528 |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
529 void WriteStyledJson(std::string& target, |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
530 const Json::Value& source); |
cfeda58d0c8e
remove calls to deprecated classes of JsonCpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
531 |
22 | 532 bool RestApiGet(Json::Value& result, |
533 const std::string& uri, | |
534 bool applyPlugins); | |
535 | |
536 bool RestApiGetString(std::string& result, | |
537 const std::string& uri, | |
538 bool applyPlugins); | |
539 | |
540 bool RestApiGetString(std::string& result, | |
541 const std::string& uri, | |
542 const std::map<std::string, std::string>& httpHeaders, | |
543 bool applyPlugins); | |
544 | |
545 bool RestApiPost(std::string& result, | |
546 const std::string& uri, | |
547 const void* body, | |
548 size_t bodySize, | |
549 bool applyPlugins); | |
550 | |
551 bool RestApiPost(Json::Value& result, | |
552 const std::string& uri, | |
553 const void* body, | |
554 size_t bodySize, | |
555 bool applyPlugins); | |
556 | |
40
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
557 #if HAS_ORTHANC_PLUGIN_GENERIC_CALL_REST_API == 1 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
558 bool RestApiPost(Json::Value& result, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
559 const std::string& uri, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
560 const Json::Value& body, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
561 const std::map<std::string, std::string>& httpHeaders, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
562 bool applyPlugins); |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
563 #endif |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
564 |
22 | 565 bool RestApiPost(Json::Value& result, |
566 const std::string& uri, | |
567 const Json::Value& body, | |
568 bool applyPlugins); | |
569 | |
570 inline bool RestApiPost(Json::Value& result, | |
571 const std::string& uri, | |
572 const std::string& body, | |
573 bool applyPlugins) | |
574 { | |
575 return RestApiPost(result, uri, body.empty() ? NULL : body.c_str(), | |
576 body.size(), applyPlugins); | |
577 } | |
578 | |
579 inline bool RestApiPost(Json::Value& result, | |
580 const std::string& uri, | |
581 const MemoryBuffer& body, | |
582 bool applyPlugins) | |
583 { | |
584 return RestApiPost(result, uri, body.GetData(), | |
585 body.GetSize(), applyPlugins); | |
586 } | |
587 | |
588 bool RestApiPut(Json::Value& result, | |
589 const std::string& uri, | |
590 const void* body, | |
591 size_t bodySize, | |
592 bool applyPlugins); | |
593 | |
594 bool RestApiPut(Json::Value& result, | |
595 const std::string& uri, | |
596 const Json::Value& body, | |
597 bool applyPlugins); | |
598 | |
599 inline bool RestApiPut(Json::Value& result, | |
600 const std::string& uri, | |
601 const std::string& body, | |
602 bool applyPlugins) | |
603 { | |
604 return RestApiPut(result, uri, body.empty() ? NULL : body.c_str(), | |
605 body.size(), applyPlugins); | |
606 } | |
607 | |
608 bool RestApiDelete(const std::string& uri, | |
609 bool applyPlugins); | |
610 | |
611 bool HttpDelete(const std::string& url, | |
612 const std::string& username, | |
613 const std::string& password); | |
614 | |
615 void AnswerJson(const Json::Value& value, | |
616 OrthancPluginRestOutput* output); | |
617 | |
618 void AnswerString(const std::string& answer, | |
619 const char* mimeType, | |
620 OrthancPluginRestOutput* output); | |
621 | |
622 void AnswerHttpError(uint16_t httpError, | |
623 OrthancPluginRestOutput* output); | |
624 | |
625 void AnswerMethodNotAllowed(OrthancPluginRestOutput* output, const char* allowedMethods); | |
626 | |
627 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 0) | |
628 const char* AutodetectMimeType(const std::string& path); | |
629 #endif | |
630 | |
631 void LogError(const std::string& message); | |
632 | |
633 void LogWarning(const std::string& message); | |
634 | |
635 void LogInfo(const std::string& message); | |
636 | |
637 void ReportMinimalOrthancVersion(unsigned int major, | |
638 unsigned int minor, | |
639 unsigned int revision); | |
640 | |
641 bool CheckMinimalOrthancVersion(unsigned int major, | |
642 unsigned int minor, | |
643 unsigned int revision); | |
644 | |
40
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
645 bool CheckMinimalVersion(const char* version, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
646 unsigned int major, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
647 unsigned int minor, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
648 unsigned int revision); |
22 | 649 |
650 namespace Internals | |
651 { | |
652 template <RestCallback Callback> | |
653 static OrthancPluginErrorCode Protect(OrthancPluginRestOutput* output, | |
654 const char* url, | |
655 const OrthancPluginHttpRequest* request) | |
656 { | |
657 try | |
658 { | |
659 Callback(output, url, request); | |
660 return OrthancPluginErrorCode_Success; | |
661 } | |
662 catch (ORTHANC_PLUGINS_EXCEPTION_CLASS& e) | |
663 { | |
664 #if HAS_ORTHANC_EXCEPTION == 1 && HAS_ORTHANC_PLUGIN_EXCEPTION_DETAILS == 1 | |
665 if (HasGlobalContext() && | |
666 e.HasDetails()) | |
667 { | |
668 // The "false" instructs Orthanc not to log the detailed | |
669 // error message. This is to avoid duplicating the details, | |
670 // because "OrthancException" already does it on construction. | |
671 OrthancPluginSetHttpErrorDetails | |
672 (GetGlobalContext(), output, e.GetDetails(), false); | |
673 } | |
674 #endif | |
675 | |
676 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); | |
677 } | |
678 catch (boost::bad_lexical_cast&) | |
679 { | |
680 return OrthancPluginErrorCode_BadFileFormat; | |
681 } | |
682 catch (...) | |
683 { | |
684 return OrthancPluginErrorCode_Plugin; | |
685 } | |
686 } | |
687 } | |
688 | |
689 | |
690 template <RestCallback Callback> | |
691 void RegisterRestCallback(const std::string& uri, | |
692 bool isThreadSafe) | |
693 { | |
694 if (isThreadSafe) | |
695 { | |
696 OrthancPluginRegisterRestCallbackNoLock | |
697 (GetGlobalContext(), uri.c_str(), Internals::Protect<Callback>); | |
698 } | |
699 else | |
700 { | |
701 OrthancPluginRegisterRestCallback | |
702 (GetGlobalContext(), uri.c_str(), Internals::Protect<Callback>); | |
703 } | |
704 } | |
705 | |
706 | |
707 #if HAS_ORTHANC_PLUGIN_PEERS == 1 | |
708 class OrthancPeers : public boost::noncopyable | |
709 { | |
710 private: | |
711 typedef std::map<std::string, uint32_t> Index; | |
712 | |
713 OrthancPluginPeers *peers_; | |
714 Index index_; | |
715 uint32_t timeout_; | |
716 | |
717 size_t GetPeerIndex(const std::string& name) const; | |
718 | |
719 public: | |
720 OrthancPeers(); | |
721 | |
722 ~OrthancPeers(); | |
723 | |
724 uint32_t GetTimeout() const | |
725 { | |
726 return timeout_; | |
727 } | |
728 | |
729 void SetTimeout(uint32_t timeout) | |
730 { | |
731 timeout_ = timeout; | |
732 } | |
733 | |
734 bool LookupName(size_t& target, | |
735 const std::string& name) const; | |
736 | |
737 std::string GetPeerName(size_t index) const; | |
738 | |
739 std::string GetPeerUrl(size_t index) const; | |
740 | |
741 std::string GetPeerUrl(const std::string& name) const; | |
742 | |
743 size_t GetPeersCount() const | |
744 { | |
745 return index_.size(); | |
746 } | |
747 | |
748 bool LookupUserProperty(std::string& value, | |
749 size_t index, | |
750 const std::string& key) const; | |
751 | |
752 bool LookupUserProperty(std::string& value, | |
753 const std::string& peer, | |
754 const std::string& key) const; | |
755 | |
756 bool DoGet(MemoryBuffer& target, | |
757 size_t index, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
758 const std::string& uri, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
759 const std::map<std::string, std::string>& headers) const; |
22 | 760 |
761 bool DoGet(MemoryBuffer& target, | |
762 const std::string& name, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
763 const std::string& uri, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
764 const std::map<std::string, std::string>& headers) const; |
22 | 765 |
766 bool DoGet(Json::Value& target, | |
767 size_t index, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
768 const std::string& uri, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
769 const std::map<std::string, std::string>& headers) const; |
22 | 770 |
771 bool DoGet(Json::Value& target, | |
772 const std::string& name, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
773 const std::string& uri, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
774 const std::map<std::string, std::string>& headers) const; |
22 | 775 |
776 bool DoPost(MemoryBuffer& target, | |
777 size_t index, | |
778 const std::string& uri, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
779 const std::string& body, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
780 const std::map<std::string, std::string>& headers) const; |
22 | 781 |
782 bool DoPost(MemoryBuffer& target, | |
783 const std::string& name, | |
784 const std::string& uri, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
785 const std::string& body, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
786 const std::map<std::string, std::string>& headers) const; |
22 | 787 |
788 bool DoPost(Json::Value& target, | |
789 size_t index, | |
790 const std::string& uri, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
791 const std::string& body, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
792 const std::map<std::string, std::string>& headers) const; |
22 | 793 |
794 bool DoPost(Json::Value& target, | |
795 const std::string& name, | |
796 const std::string& uri, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
797 const std::string& body, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
798 const std::map<std::string, std::string>& headers) const; |
22 | 799 |
800 bool DoPut(size_t index, | |
801 const std::string& uri, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
802 const std::string& body, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
803 const std::map<std::string, std::string>& headers) const; |
22 | 804 |
805 bool DoPut(const std::string& name, | |
806 const std::string& uri, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
807 const std::string& body, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
808 const std::map<std::string, std::string>& headers) const; |
22 | 809 |
810 bool DoDelete(size_t index, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
811 const std::string& uri, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
812 const std::map<std::string, std::string>& headers) const; |
22 | 813 |
814 bool DoDelete(const std::string& name, | |
44
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
815 const std::string& uri, |
f4e828607f02
Added 'SenderTransferID' option that is added as an HTTP header in outgoing requests in PushMode
Alain Mazy <am@osimis.io>
parents:
40
diff
changeset
|
816 const std::map<std::string, std::string>& headers) const; |
22 | 817 }; |
818 #endif | |
819 | |
820 | |
821 | |
822 #if HAS_ORTHANC_PLUGIN_JOB == 1 | |
823 class OrthancJob : public boost::noncopyable | |
824 { | |
825 private: | |
826 std::string jobType_; | |
827 std::string content_; | |
828 bool hasSerialized_; | |
829 std::string serialized_; | |
830 float progress_; | |
831 | |
832 static void CallbackFinalize(void* job); | |
833 | |
834 static float CallbackGetProgress(void* job); | |
835 | |
54
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
836 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 11, 3) |
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
837 static OrthancPluginErrorCode CallbackGetContent(OrthancPluginMemoryBuffer* target, |
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
838 void* job); |
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
839 #else |
22 | 840 static const char* CallbackGetContent(void* job); |
54
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
841 #endif |
22 | 842 |
54
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
843 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 11, 3) |
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
844 static int32_t CallbackGetSerialized(OrthancPluginMemoryBuffer* target, |
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
845 void* job); |
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
846 #else |
22 | 847 static const char* CallbackGetSerialized(void* job); |
54
5915547fa6f2
upgraded SDK and framework to 1.11.3
Alain Mazy <am@osimis.io>
parents:
44
diff
changeset
|
848 #endif |
22 | 849 |
850 static OrthancPluginJobStepStatus CallbackStep(void* job); | |
851 | |
852 static OrthancPluginErrorCode CallbackStop(void* job, | |
853 OrthancPluginJobStopReason reason); | |
854 | |
855 static OrthancPluginErrorCode CallbackReset(void* job); | |
856 | |
857 protected: | |
858 void ClearContent(); | |
859 | |
860 void UpdateContent(const Json::Value& content); | |
861 | |
862 void ClearSerialized(); | |
863 | |
864 void UpdateSerialized(const Json::Value& serialized); | |
865 | |
866 void UpdateProgress(float progress); | |
867 | |
868 public: | |
30 | 869 explicit OrthancJob(const std::string& jobType); |
22 | 870 |
871 virtual ~OrthancJob() | |
872 { | |
873 } | |
874 | |
875 virtual OrthancPluginJobStepStatus Step() = 0; | |
876 | |
877 virtual void Stop(OrthancPluginJobStopReason reason) = 0; | |
878 | |
879 virtual void Reset() = 0; | |
880 | |
881 static OrthancPluginJob* Create(OrthancJob* job /* takes ownership */); | |
882 | |
883 static std::string Submit(OrthancJob* job /* takes ownership */, | |
884 int priority); | |
885 | |
886 static void SubmitAndWait(Json::Value& result, | |
887 OrthancJob* job /* takes ownership */, | |
888 int priority); | |
889 | |
890 // Submit a job from a POST on the REST API with the same | |
891 // conventions as in the Orthanc core (according to the | |
892 // "Synchronous" and "Priority" options) | |
893 static void SubmitFromRestApiPost(OrthancPluginRestOutput* output, | |
894 const Json::Value& body, | |
895 OrthancJob* job); | |
896 }; | |
897 #endif | |
898 | |
899 | |
900 #if HAS_ORTHANC_PLUGIN_METRICS == 1 | |
901 inline void SetMetricsValue(char* name, | |
902 float value) | |
903 { | |
904 OrthancPluginSetMetricsValue(GetGlobalContext(), name, | |
905 value, OrthancPluginMetricsType_Default); | |
906 } | |
907 | |
908 class MetricsTimer : public boost::noncopyable | |
909 { | |
910 private: | |
911 std::string name_; | |
912 boost::posix_time::ptime start_; | |
913 | |
914 public: | |
915 explicit MetricsTimer(const char* name); | |
916 | |
917 ~MetricsTimer(); | |
918 }; | |
919 #endif | |
920 | |
921 | |
922 #if HAS_ORTHANC_PLUGIN_HTTP_CLIENT == 1 | |
923 class HttpClient : public boost::noncopyable | |
924 { | |
925 public: | |
926 typedef std::map<std::string, std::string> HttpHeaders; | |
927 | |
928 class IRequestBody : public boost::noncopyable | |
929 { | |
930 public: | |
931 virtual ~IRequestBody() | |
932 { | |
933 } | |
934 | |
935 virtual bool ReadNextChunk(std::string& chunk) = 0; | |
936 }; | |
937 | |
938 | |
939 class IAnswer : public boost::noncopyable | |
940 { | |
941 public: | |
942 virtual ~IAnswer() | |
943 { | |
944 } | |
945 | |
946 virtual void AddHeader(const std::string& key, | |
947 const std::string& value) = 0; | |
948 | |
949 virtual void AddChunk(const void* data, | |
950 size_t size) = 0; | |
951 }; | |
952 | |
953 | |
954 private: | |
955 class RequestBodyWrapper; | |
956 | |
957 uint16_t httpStatus_; | |
958 OrthancPluginHttpMethod method_; | |
959 std::string url_; | |
960 HttpHeaders headers_; | |
961 std::string username_; | |
962 std::string password_; | |
963 uint32_t timeout_; | |
964 std::string certificateFile_; | |
965 std::string certificateKeyFile_; | |
966 std::string certificateKeyPassword_; | |
967 bool pkcs11_; | |
968 std::string fullBody_; | |
969 IRequestBody* chunkedBody_; | |
970 bool allowChunkedTransfers_; | |
971 | |
972 #if HAS_ORTHANC_PLUGIN_CHUNKED_HTTP_CLIENT == 1 | |
973 void ExecuteWithStream(uint16_t& httpStatus, // out | |
974 IAnswer& answer, // out | |
975 IRequestBody& body) const; | |
976 #endif | |
977 | |
978 void ExecuteWithoutStream(uint16_t& httpStatus, // out | |
979 HttpHeaders& answerHeaders, // out | |
980 std::string& answerBody, // out | |
981 const std::string& body) const; | |
982 | |
983 public: | |
984 HttpClient(); | |
985 | |
986 uint16_t GetHttpStatus() const | |
987 { | |
988 return httpStatus_; | |
989 } | |
990 | |
991 void SetMethod(OrthancPluginHttpMethod method) | |
992 { | |
993 method_ = method; | |
994 } | |
995 | |
996 const std::string& GetUrl() const | |
997 { | |
998 return url_; | |
999 } | |
1000 | |
1001 void SetUrl(const std::string& url) | |
1002 { | |
1003 url_ = url; | |
1004 } | |
1005 | |
1006 void SetHeaders(const HttpHeaders& headers) | |
1007 { | |
1008 headers_ = headers; | |
1009 } | |
1010 | |
1011 void AddHeader(const std::string& key, | |
1012 const std::string& value) | |
1013 { | |
1014 headers_[key] = value; | |
1015 } | |
1016 | |
1017 void AddHeaders(const HttpHeaders& headers); | |
1018 | |
1019 void SetCredentials(const std::string& username, | |
1020 const std::string& password); | |
1021 | |
1022 void ClearCredentials(); | |
1023 | |
1024 void SetTimeout(unsigned int timeout) // 0 for default timeout | |
1025 { | |
1026 timeout_ = timeout; | |
1027 } | |
1028 | |
1029 void SetCertificate(const std::string& certificateFile, | |
1030 const std::string& keyFile, | |
1031 const std::string& keyPassword); | |
1032 | |
1033 void ClearCertificate(); | |
1034 | |
1035 void SetPkcs11(bool pkcs11) | |
1036 { | |
1037 pkcs11_ = pkcs11; | |
1038 } | |
1039 | |
1040 void ClearBody(); | |
1041 | |
1042 void SwapBody(std::string& body); | |
1043 | |
1044 void SetBody(const std::string& body); | |
1045 | |
1046 void SetBody(IRequestBody& body); | |
1047 | |
1048 // This function can be used to disable chunked transfers if the | |
1049 // remote server is Orthanc with a version <= 1.5.6. | |
1050 void SetChunkedTransfersAllowed(bool allow) | |
1051 { | |
1052 allowChunkedTransfers_ = allow; | |
1053 } | |
1054 | |
1055 bool IsChunkedTransfersAllowed() const | |
1056 { | |
1057 return allowChunkedTransfers_; | |
1058 } | |
1059 | |
1060 void Execute(IAnswer& answer); | |
1061 | |
1062 void Execute(HttpHeaders& answerHeaders /* out */, | |
1063 std::string& answerBody /* out */); | |
1064 | |
1065 void Execute(HttpHeaders& answerHeaders /* out */, | |
1066 Json::Value& answerBody /* out */); | |
1067 | |
1068 void Execute(); | |
1069 }; | |
1070 #endif | |
1071 | |
1072 | |
1073 | |
1074 class IChunkedRequestReader : public boost::noncopyable | |
1075 { | |
1076 public: | |
1077 virtual ~IChunkedRequestReader() | |
1078 { | |
1079 } | |
1080 | |
1081 virtual void AddChunk(const void* data, | |
1082 size_t size) = 0; | |
1083 | |
1084 virtual void Execute(OrthancPluginRestOutput* output) = 0; | |
1085 }; | |
1086 | |
1087 | |
1088 typedef IChunkedRequestReader* (*ChunkedRestCallback) (const char* url, | |
1089 const OrthancPluginHttpRequest* request); | |
1090 | |
1091 | |
1092 namespace Internals | |
1093 { | |
1094 void NullRestCallback(OrthancPluginRestOutput* output, | |
1095 const char* url, | |
1096 const OrthancPluginHttpRequest* request); | |
1097 | |
1098 IChunkedRequestReader *NullChunkedRestCallback(const char* url, | |
1099 const OrthancPluginHttpRequest* request); | |
1100 | |
1101 | |
1102 #if HAS_ORTHANC_PLUGIN_CHUNKED_HTTP_SERVER == 1 | |
1103 template <ChunkedRestCallback Callback> | |
1104 static OrthancPluginErrorCode ChunkedProtect(OrthancPluginServerChunkedRequestReader** reader, | |
1105 const char* url, | |
1106 const OrthancPluginHttpRequest* request) | |
1107 { | |
1108 try | |
1109 { | |
1110 if (reader == NULL) | |
1111 { | |
1112 return OrthancPluginErrorCode_InternalError; | |
1113 } | |
1114 else | |
1115 { | |
1116 *reader = reinterpret_cast<OrthancPluginServerChunkedRequestReader*>(Callback(url, request)); | |
1117 if (*reader == NULL) | |
1118 { | |
1119 return OrthancPluginErrorCode_Plugin; | |
1120 } | |
1121 else | |
1122 { | |
1123 return OrthancPluginErrorCode_Success; | |
1124 } | |
1125 } | |
1126 } | |
1127 catch (ORTHANC_PLUGINS_EXCEPTION_CLASS& e) | |
1128 { | |
1129 return static_cast<OrthancPluginErrorCode>(e.GetErrorCode()); | |
1130 } | |
1131 catch (boost::bad_lexical_cast&) | |
1132 { | |
1133 return OrthancPluginErrorCode_BadFileFormat; | |
1134 } | |
1135 catch (...) | |
1136 { | |
1137 return OrthancPluginErrorCode_Plugin; | |
1138 } | |
1139 } | |
1140 | |
1141 OrthancPluginErrorCode ChunkedRequestReaderAddChunk( | |
1142 OrthancPluginServerChunkedRequestReader* reader, | |
1143 const void* data, | |
1144 uint32_t size); | |
1145 | |
1146 OrthancPluginErrorCode ChunkedRequestReaderExecute( | |
1147 OrthancPluginServerChunkedRequestReader* reader, | |
1148 OrthancPluginRestOutput* output); | |
1149 | |
1150 void ChunkedRequestReaderFinalize( | |
1151 OrthancPluginServerChunkedRequestReader* reader); | |
1152 | |
1153 #else | |
1154 | |
1155 OrthancPluginErrorCode ChunkedRestCompatibility(OrthancPluginRestOutput* output, | |
1156 const char* url, | |
1157 const OrthancPluginHttpRequest* request, | |
1158 RestCallback GetHandler, | |
1159 ChunkedRestCallback PostHandler, | |
1160 RestCallback DeleteHandler, | |
1161 ChunkedRestCallback PutHandler); | |
1162 | |
1163 template< | |
1164 RestCallback GetHandler, | |
1165 ChunkedRestCallback PostHandler, | |
1166 RestCallback DeleteHandler, | |
1167 ChunkedRestCallback PutHandler | |
1168 > | |
1169 inline OrthancPluginErrorCode ChunkedRestCompatibility(OrthancPluginRestOutput* output, | |
1170 const char* url, | |
1171 const OrthancPluginHttpRequest* request) | |
1172 { | |
1173 return ChunkedRestCompatibility(output, url, request, GetHandler, | |
1174 PostHandler, DeleteHandler, PutHandler); | |
1175 } | |
1176 #endif | |
1177 } | |
1178 | |
1179 | |
1180 | |
1181 // NB: We use a templated class instead of a templated function, because | |
1182 // default values are only available in functions since C++11 | |
1183 template< | |
1184 RestCallback GetHandler = Internals::NullRestCallback, | |
1185 ChunkedRestCallback PostHandler = Internals::NullChunkedRestCallback, | |
1186 RestCallback DeleteHandler = Internals::NullRestCallback, | |
1187 ChunkedRestCallback PutHandler = Internals::NullChunkedRestCallback | |
1188 > | |
1189 class ChunkedRestRegistration : public boost::noncopyable | |
1190 { | |
1191 public: | |
1192 static void Apply(const std::string& uri) | |
1193 { | |
1194 #if HAS_ORTHANC_PLUGIN_CHUNKED_HTTP_SERVER == 1 | |
1195 OrthancPluginRegisterChunkedRestCallback( | |
1196 GetGlobalContext(), uri.c_str(), | |
1197 GetHandler == Internals::NullRestCallback ? NULL : Internals::Protect<GetHandler>, | |
1198 PostHandler == Internals::NullChunkedRestCallback ? NULL : Internals::ChunkedProtect<PostHandler>, | |
1199 DeleteHandler == Internals::NullRestCallback ? NULL : Internals::Protect<DeleteHandler>, | |
1200 PutHandler == Internals::NullChunkedRestCallback ? NULL : Internals::ChunkedProtect<PutHandler>, | |
1201 Internals::ChunkedRequestReaderAddChunk, | |
1202 Internals::ChunkedRequestReaderExecute, | |
1203 Internals::ChunkedRequestReaderFinalize); | |
1204 #else | |
1205 OrthancPluginRegisterRestCallbackNoLock( | |
1206 GetGlobalContext(), uri.c_str(), | |
1207 Internals::ChunkedRestCompatibility<GetHandler, PostHandler, DeleteHandler, PutHandler>); | |
1208 #endif | |
1209 } | |
1210 }; | |
1211 | |
1212 | |
1213 | |
1214 #if HAS_ORTHANC_PLUGIN_STORAGE_COMMITMENT_SCP == 1 | |
1215 class IStorageCommitmentScpHandler : public boost::noncopyable | |
1216 { | |
1217 public: | |
1218 virtual ~IStorageCommitmentScpHandler() | |
1219 { | |
1220 } | |
1221 | |
1222 virtual OrthancPluginStorageCommitmentFailureReason Lookup(const std::string& sopClassUid, | |
1223 const std::string& sopInstanceUid) = 0; | |
1224 | |
1225 static OrthancPluginErrorCode Lookup(OrthancPluginStorageCommitmentFailureReason* target, | |
1226 void* rawHandler, | |
1227 const char* sopClassUid, | |
1228 const char* sopInstanceUid); | |
1229 | |
1230 static void Destructor(void* rawHandler); | |
1231 }; | |
1232 #endif | |
1233 | |
1234 | |
1235 class DicomInstance : public boost::noncopyable | |
1236 { | |
1237 private: | |
1238 bool toFree_; | |
1239 | |
1240 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 6, 1) | |
1241 const OrthancPluginDicomInstance* instance_; | |
1242 #else | |
1243 OrthancPluginDicomInstance* instance_; | |
1244 #endif | |
1245 | |
1246 public: | |
1247 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 6, 1) | |
29
a0af5a8182a8
sync, removed old patch for Orthanc framework 1.5.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
1248 explicit DicomInstance(const OrthancPluginDicomInstance* instance); |
22 | 1249 #else |
29
a0af5a8182a8
sync, removed old patch for Orthanc framework 1.5.6
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
28
diff
changeset
|
1250 explicit DicomInstance(OrthancPluginDicomInstance* instance); |
22 | 1251 #endif |
1252 | |
1253 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 7, 0) | |
1254 DicomInstance(const void* buffer, | |
1255 size_t size); | |
1256 #endif | |
1257 | |
1258 ~DicomInstance(); | |
1259 | |
1260 std::string GetRemoteAet() const; | |
1261 | |
1262 const void* GetBuffer() const | |
1263 { | |
1264 return OrthancPluginGetInstanceData(GetGlobalContext(), instance_); | |
1265 } | |
1266 | |
1267 size_t GetSize() const | |
1268 { | |
1269 return static_cast<size_t>(OrthancPluginGetInstanceSize(GetGlobalContext(), instance_)); | |
1270 } | |
1271 | |
1272 void GetJson(Json::Value& target) const; | |
1273 | |
1274 void GetSimplifiedJson(Json::Value& target) const; | |
1275 | |
1276 OrthancPluginInstanceOrigin GetOrigin() const | |
1277 { | |
1278 return OrthancPluginGetInstanceOrigin(GetGlobalContext(), instance_); | |
1279 } | |
1280 | |
1281 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 6, 1) | |
1282 std::string GetTransferSyntaxUid() const; | |
1283 #endif | |
1284 | |
1285 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 6, 1) | |
1286 bool HasPixelData() const; | |
1287 #endif | |
1288 | |
1289 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 7, 0) | |
1290 unsigned int GetFramesCount() const | |
1291 { | |
1292 return OrthancPluginGetInstanceFramesCount(GetGlobalContext(), instance_); | |
1293 } | |
1294 #endif | |
1295 | |
1296 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 7, 0) | |
1297 void GetRawFrame(std::string& target, | |
1298 unsigned int frameIndex) const; | |
1299 #endif | |
1300 | |
1301 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 7, 0) | |
1302 OrthancImage* GetDecodedFrame(unsigned int frameIndex) const; | |
1303 #endif | |
1304 | |
1305 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 7, 0) | |
1306 void Serialize(std::string& target) const; | |
1307 #endif | |
1308 | |
1309 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 7, 0) | |
1310 static DicomInstance* Transcode(const void* buffer, | |
1311 size_t size, | |
1312 const std::string& transferSyntax); | |
1313 #endif | |
1314 }; | |
40
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1315 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1316 // helper method to convert Http headers from the plugin SDK to a std::map |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1317 void GetHttpHeaders(std::map<std::string, std::string>& result, const OrthancPluginHttpRequest* request); |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1318 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1319 #if HAS_ORTHANC_PLUGIN_WEBDAV == 1 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1320 class IWebDavCollection : public boost::noncopyable |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1321 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1322 public: |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1323 class FileInfo |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1324 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1325 private: |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1326 std::string name_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1327 uint64_t contentSize_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1328 std::string mime_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1329 std::string dateTime_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1330 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1331 public: |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1332 FileInfo(const std::string& name, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1333 uint64_t contentSize, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1334 const std::string& dateTime) : |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1335 name_(name), |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1336 contentSize_(contentSize), |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1337 dateTime_(dateTime) |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1338 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1339 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1340 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1341 const std::string& GetName() const |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1342 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1343 return name_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1344 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1345 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1346 uint64_t GetContentSize() const |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1347 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1348 return contentSize_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1349 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1350 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1351 void SetMimeType(const std::string& mime) |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1352 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1353 mime_ = mime; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1354 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1355 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1356 const std::string& GetMimeType() const |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1357 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1358 return mime_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1359 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1360 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1361 const std::string& GetDateTime() const |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1362 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1363 return dateTime_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1364 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1365 }; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1366 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1367 class FolderInfo |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1368 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1369 private: |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1370 std::string name_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1371 std::string dateTime_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1372 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1373 public: |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1374 FolderInfo(const std::string& name, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1375 const std::string& dateTime) : |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1376 name_(name), |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1377 dateTime_(dateTime) |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1378 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1379 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1380 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1381 const std::string& GetName() const |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1382 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1383 return name_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1384 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1385 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1386 const std::string& GetDateTime() const |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1387 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1388 return dateTime_; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1389 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1390 }; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1391 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1392 virtual ~IWebDavCollection() |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1393 { |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1394 } |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1395 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1396 virtual bool IsExistingFolder(const std::vector<std::string>& path) = 0; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1397 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1398 virtual bool ListFolder(std::list<FileInfo>& files, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1399 std::list<FolderInfo>& subfolders, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1400 const std::vector<std::string>& path) = 0; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1401 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1402 virtual bool GetFile(std::string& content /* out */, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1403 std::string& mime /* out */, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1404 std::string& dateTime /* out */, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1405 const std::vector<std::string>& path) = 0; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1406 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1407 virtual bool StoreFile(const std::vector<std::string>& path, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1408 const void* data, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1409 size_t size) = 0; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1410 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1411 virtual bool CreateFolder(const std::vector<std::string>& path) = 0; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1412 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1413 virtual bool DeleteItem(const std::vector<std::string>& path) = 0; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1414 |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1415 static void Register(const std::string& uri, |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1416 IWebDavCollection& collection); |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1417 }; |
1256194e1c08
sync orthanc + sdk 1.5.0 + added more info in error logs
Alain Mazy <am@osimis.io>
parents:
35
diff
changeset
|
1418 #endif |
22 | 1419 } |