Mercurial > hg > orthanc-stone
annotate Applications/Platforms/WebAssembly/WebAssemblyOracle.cpp @ 1873:e0966648ebd0
unit tests of SegmentTree
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 11 Jan 2022 15:36:04 +0100 |
parents | 7053b8a0aaec |
children |
rev | line source |
---|---|
825 | 1 /** |
2 * Stone of Orthanc | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
1871
7053b8a0aaec
upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1870
diff
changeset
|
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium |
7053b8a0aaec
upgrade to year 2022
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1870
diff
changeset
|
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
825 | 7 * |
8 * This program is free software: you can redistribute it and/or | |
9 * modify it under the terms of the GNU Affero General Public License | |
10 * as published by the Free Software Foundation, either version 3 of | |
11 * the License, or (at your option) any later version. | |
12 * | |
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 * Affero General Public License for more details. | |
1596
4fb8fdf03314
removed annoying whitespace
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1591
diff
changeset
|
17 * |
825 | 18 * You should have received a copy of the GNU Affero General Public License |
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 **/ | |
21 | |
22 | |
1549
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
23 #if defined(ORTHANC_BUILDING_STONE_LIBRARY) && ORTHANC_BUILDING_STONE_LIBRARY == 1 |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
24 # include "WebAssemblyOracle_Includes.h" |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
25 #else |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
26 // This is the case when using the WebAssembly side module, and this |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
27 // source file must be compiled within the WebAssembly main module |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
28 # include <Oracle/WebAssemblyOracle_Includes.h> |
1244
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
29 #endif |
825 | 30 |
1455
30deba7bc8e2
simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1300
diff
changeset
|
31 #include <OrthancException.h> |
30deba7bc8e2
simplifying include_directories
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1300
diff
changeset
|
32 #include <Toolbox.h> |
825 | 33 |
34 #include <emscripten.h> | |
35 #include <emscripten/html5.h> | |
36 #include <emscripten/fetch.h> | |
37 | |
1549
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
38 |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
39 #if ORTHANC_ENABLE_DCMTK == 1 |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
40 static unsigned int BUCKET_SOP = 1; |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
41 #endif |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
42 |
a48ae10857b1
packaging of the WebAssembly module
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1524
diff
changeset
|
43 |
825 | 44 namespace OrthancStone |
45 { | |
46 class WebAssemblyOracle::TimeoutContext | |
47 { | |
48 private: | |
49 WebAssemblyOracle& oracle_; | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
50 boost::weak_ptr<IObserver> receiver_; |
1298
8a0a62189f46
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1270
diff
changeset
|
51 std::unique_ptr<SleepOracleCommand> command_; |
825 | 52 |
53 public: | |
54 TimeoutContext(WebAssemblyOracle& oracle, | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
55 boost::weak_ptr<IObserver> receiver, |
825 | 56 IOracleCommand* command) : |
57 oracle_(oracle), | |
58 receiver_(receiver) | |
59 { | |
60 if (command == NULL) | |
61 { | |
62 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); | |
63 } | |
64 else | |
65 { | |
66 command_.reset(dynamic_cast<SleepOracleCommand*>(command)); | |
67 } | |
68 } | |
69 | |
70 void EmitMessage() | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
71 { |
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
72 assert(command_.get() != NULL); |
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
73 |
825 | 74 SleepOracleCommand::TimeoutMessage message(*command_); |
75 oracle_.EmitMessage(receiver_, message); | |
76 } | |
77 | |
78 static void Callback(void *userData) | |
79 { | |
1298
8a0a62189f46
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1270
diff
changeset
|
80 std::unique_ptr<TimeoutContext> context(reinterpret_cast<TimeoutContext*>(userData)); |
825 | 81 context->EmitMessage(); |
82 } | |
83 }; | |
84 | |
85 | |
977
262a0244e9b2
Added missing Unregister for objects that register by the broker + logs + guard in FetchContext
Benjamin Golinvaux <bgo@osimis.io>
parents:
975
diff
changeset
|
86 /** |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
87 This object is created on the heap for every http request. |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
88 It is deleted in the success (or error) callbacks. |
825 | 89 |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
90 This object references the receiver of the request. Since this is a raw |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
91 reference, we need additional checks to make sure we send the response to |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
92 the same object, for the object can be deleted and a new one recreated at the |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
93 same address (it often happens in the [single-threaded] browser context). |
977
262a0244e9b2
Added missing Unregister for objects that register by the broker + logs + guard in FetchContext
Benjamin Golinvaux <bgo@osimis.io>
parents:
975
diff
changeset
|
94 */ |
825 | 95 class WebAssemblyOracle::FetchContext : public boost::noncopyable |
96 { | |
97 private: | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
98 WebAssemblyOracle& oracle_; |
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
99 boost::weak_ptr<IObserver> receiver_; |
1299
c38c89684d83
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1279
diff
changeset
|
100 std::unique_ptr<IOracleCommand> command_; |
825 | 101 std::string expectedContentType_; |
102 | |
103 public: | |
104 FetchContext(WebAssemblyOracle& oracle, | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
105 boost::weak_ptr<IObserver> receiver, |
825 | 106 IOracleCommand* command, |
107 const std::string& expectedContentType) : | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
108 oracle_(oracle), |
825 | 109 receiver_(receiver), |
110 command_(command), | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
111 expectedContentType_(expectedContentType) |
825 | 112 { |
1468
323bf6040f5d
fix for boost::program_options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1455
diff
changeset
|
113 if (Orthanc::Logging::IsTraceLevelEnabled()) |
323bf6040f5d
fix for boost::program_options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1455
diff
changeset
|
114 { |
323bf6040f5d
fix for boost::program_options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1455
diff
changeset
|
115 // Calling "receiver.lock()" is expensive, hence the quick check if TRACE is enabled |
323bf6040f5d
fix for boost::program_options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1455
diff
changeset
|
116 LOG(TRACE) << "WebAssemblyOracle::FetchContext::FetchContext() | " |
323bf6040f5d
fix for boost::program_options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1455
diff
changeset
|
117 << "receiver address = " << std::hex << receiver.lock().get(); |
323bf6040f5d
fix for boost::program_options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1455
diff
changeset
|
118 } |
977
262a0244e9b2
Added missing Unregister for objects that register by the broker + logs + guard in FetchContext
Benjamin Golinvaux <bgo@osimis.io>
parents:
975
diff
changeset
|
119 |
825 | 120 if (command == NULL) |
121 { | |
122 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); | |
123 } | |
124 } | |
125 | |
126 const std::string& GetExpectedContentType() const | |
127 { | |
128 return expectedContentType_; | |
129 } | |
130 | |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
131 void EmitException(const Orthanc::OrthancException& exception) |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
132 { |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
133 assert(command_.get() != NULL); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
134 OracleCommandExceptionMessage message(*command_, exception); |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
135 oracle_.EmitMessage(receiver_, message); |
825 | 136 } |
137 | |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
138 void ProcessFetchResult(const std::string& answer, |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
139 const HttpHeaders& headers) |
825 | 140 { |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
141 assert(command_.get() != NULL); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
142 oracle_.ProcessFetchResult(receiver_, answer, headers, *command_); |
825 | 143 } |
144 | |
145 static void SuccessCallback(emscripten_fetch_t *fetch) | |
146 { | |
147 /** | |
148 * Firstly, make a local copy of the fetched information, and | |
149 * free data associated with the fetch. | |
150 **/ | |
151 | |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
152 if (fetch->userData == NULL) |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
153 { |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
154 LOG(ERROR) << "WebAssemblyOracle::FetchContext::SuccessCallback fetch->userData is NULL!"; |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
155 return; |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
156 } |
825 | 157 |
1299
c38c89684d83
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1279
diff
changeset
|
158 std::unique_ptr<FetchContext> context(reinterpret_cast<FetchContext*>(fetch->userData)); |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
159 |
825 | 160 std::string answer; |
161 if (fetch->numBytes > 0) | |
162 { | |
163 answer.assign(fetch->data, fetch->numBytes); | |
164 } | |
165 | |
1245
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
166 |
825 | 167 /** |
1245
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
168 * Retrieving the headers of the HTTP answer. |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
169 **/ |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
170 HttpHeaders headers; |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
171 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
172 #if (__EMSCRIPTEN_major__ < 1 || \ |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
173 (__EMSCRIPTEN_major__ == 1 && __EMSCRIPTEN_minor__ < 38) || \ |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
174 (__EMSCRIPTEN_major__ == 1 && __EMSCRIPTEN_minor__ == 38 && __EMSCRIPTEN_tiny__ < 37)) |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
175 # warning Consider upgrading Emscripten to a version above 1.38.37, incomplete support of Fetch API |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
176 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
177 /** |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
178 * HACK - If emscripten < 1.38.37, the fetch API does not |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
179 * contain a way to retrieve the HTTP headers of the answer. We |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
180 * make the assumption that the "Content-Type" header of the |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
181 * response is the same as the "Accept" header of the |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
182 * query. This is fixed thanks to the |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
183 * "emscripten_fetch_get_response_headers()" function that was |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
184 * added to "fetch.h" at emscripten-1.38.37 on 2019-06-26. |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
185 * |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
186 * https://github.com/emscripten-core/emscripten/blob/1.38.37/system/include/emscripten/fetch.h |
825 | 187 * https://github.com/emscripten-core/emscripten/pull/8486 |
188 **/ | |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
189 if (fetch->userData != NULL) |
825 | 190 { |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
191 if (!context->GetExpectedContentType().empty()) |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
192 { |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
193 headers["Content-Type"] = context->GetExpectedContentType(); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
194 } |
825 | 195 } |
1245
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
196 #else |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
197 { |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
198 size_t size = emscripten_fetch_get_response_headers_length(fetch); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
199 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
200 std::string plainHeaders(size + 1, '\0'); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
201 emscripten_fetch_get_response_headers(fetch, &plainHeaders[0], size + 1); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
202 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
203 std::vector<std::string> tokens; |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
204 Orthanc::Toolbox::TokenizeString(tokens, plainHeaders, '\n'); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
205 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
206 for (size_t i = 0; i < tokens.size(); i++) |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
207 { |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
208 size_t p = tokens[i].find(':'); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
209 if (p != std::string::npos) |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
210 { |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
211 std::string key = Orthanc::Toolbox::StripSpaces(tokens[i].substr(0, p)); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
212 std::string value = Orthanc::Toolbox::StripSpaces(tokens[i].substr(p + 1)); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
213 headers[key] = value; |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
214 } |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
215 } |
964
91f827272c1f
Added cache-control headers for POST requests + #ifdef'd tracing logs + trace on context restored
Benjamin Golinvaux <bgo@osimis.io>
parents:
959
diff
changeset
|
216 } |
91f827272c1f
Added cache-control headers for POST requests + #ifdef'd tracing logs + trace on context restored
Benjamin Golinvaux <bgo@osimis.io>
parents:
959
diff
changeset
|
217 #endif |
825 | 218 |
975
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
219 LOG(TRACE) << "About to call emscripten_fetch_close"; |
825 | 220 emscripten_fetch_close(fetch); |
975
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
221 LOG(TRACE) << "Successfully called emscripten_fetch_close"; |
825 | 222 |
223 /** | |
224 * Secondly, use the retrieved data. | |
975
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
225 * IMPORTANT NOTE: the receiver might be dead. This is prevented |
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
226 * by the object responsible for zombie check, later on. |
825 | 227 **/ |
975
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
228 try |
973
38409549db43
Log with addresses + added fingerprint mechanism to avoid calling zombie objects
Benjamin Golinvaux <bgo@osimis.io>
parents:
971
diff
changeset
|
229 { |
975
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
230 if (context.get() == NULL) |
825 | 231 { |
975
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
232 LOG(ERROR) << "WebAssemblyOracle::FetchContext::SuccessCallback: (context.get() == NULL)"; |
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
233 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
234 } |
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
235 else |
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
236 { |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
237 context->ProcessFetchResult(answer, headers); |
825 | 238 } |
975
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
239 } |
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
240 catch (Orthanc::OrthancException& e) |
e75fd08d6c75
Cleaning in ICallable + changed fingerprint to plain char array to allow for
Benjamin Golinvaux <bgo@osimis.io>
parents:
973
diff
changeset
|
241 { |
1255
c1c83c1fb837
GetOrthancImageCommand: handling of unsupported formats
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1245
diff
changeset
|
242 LOG(INFO) << "Error while processing a fetch answer in the oracle: " << e.What(); |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
243 context->EmitException(e); |
825 | 244 } |
245 } | |
246 | |
247 static void FailureCallback(emscripten_fetch_t *fetch) | |
248 { | |
1298
8a0a62189f46
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1270
diff
changeset
|
249 std::unique_ptr<FetchContext> context(reinterpret_cast<FetchContext*>(fetch->userData)); |
995
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
250 |
1572 | 251 #if 0 |
995
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
252 { |
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
253 const size_t kEmscriptenStatusTextSize = sizeof(emscripten_fetch_t::statusText); |
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
254 char message[kEmscriptenStatusTextSize + 1]; |
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
255 memcpy(message, fetch->statusText, kEmscriptenStatusTextSize); |
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
256 message[kEmscriptenStatusTextSize] = 0; |
959
13e078adfb94
Better error log in fetch failure callback +
Benjamin Golinvaux <bgo@osimis.io>
parents:
956
diff
changeset
|
257 |
1572 | 258 LOG(ERROR) << "Fetching " << fetch->url |
995
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
259 << " failed, HTTP failure status code: " << fetch->status |
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
260 << " | statusText = " << message |
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
261 << " | numBytes = " << fetch->numBytes |
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
262 << " | totalBytes = " << fetch->totalBytes |
1572 | 263 << " | readyState = " << fetch->readyState; |
995
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
264 } |
1572 | 265 #endif |
825 | 266 |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
267 context->EmitException(Orthanc::OrthancException(Orthanc::ErrorCode_NetworkProtocol)); |
995
9893fa8cd7a6
send error message for HTTP fetching in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
992
diff
changeset
|
268 |
825 | 269 /** |
270 * TODO - The following code leads to an infinite recursion, at | |
271 * least with Firefox running on incognito mode => WHY? | |
272 **/ | |
959
13e078adfb94
Better error log in fetch failure callback +
Benjamin Golinvaux <bgo@osimis.io>
parents:
956
diff
changeset
|
273 emscripten_fetch_close(fetch); // Also free data on failure. |
825 | 274 } |
275 }; | |
276 | |
277 | |
278 | |
279 class WebAssemblyOracle::FetchCommand : public boost::noncopyable | |
280 { | |
281 private: | |
282 WebAssemblyOracle& oracle_; | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
283 boost::weak_ptr<IObserver> receiver_; |
1298
8a0a62189f46
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1270
diff
changeset
|
284 std::unique_ptr<IOracleCommand> command_; |
825 | 285 Orthanc::HttpMethod method_; |
992
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
286 std::string url_; |
825 | 287 std::string body_; |
288 HttpHeaders headers_; | |
289 unsigned int timeout_; | |
290 std::string expectedContentType_; | |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
291 bool hasCredentials_; |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
292 std::string username_; |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
293 std::string password_; |
825 | 294 |
295 public: | |
296 FetchCommand(WebAssemblyOracle& oracle, | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
297 boost::weak_ptr<IObserver> receiver, |
825 | 298 IOracleCommand* command) : |
299 oracle_(oracle), | |
300 receiver_(receiver), | |
301 command_(command), | |
302 method_(Orthanc::HttpMethod_Get), | |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
303 timeout_(0), |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
304 hasCredentials_(false) |
825 | 305 { |
306 if (command == NULL) | |
307 { | |
308 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); | |
309 } | |
310 } | |
311 | |
312 void SetMethod(Orthanc::HttpMethod method) | |
313 { | |
314 method_ = method; | |
315 } | |
316 | |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
317 Orthanc::HttpMethod GetMethod() const |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
318 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
319 return method_; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
320 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
321 |
992
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
322 void SetUrl(const std::string& url) |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
323 { |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
324 url_ = url; |
825 | 325 } |
326 | |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
327 const std::string& GetUrl() const |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
328 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
329 return url_; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
330 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
331 |
825 | 332 void SetBody(std::string& body /* will be swapped */) |
333 { | |
334 body_.swap(body); | |
335 } | |
336 | |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
337 void AddHttpHeaders(const HttpHeaders& headers) |
825 | 338 { |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
339 for (HttpHeaders::const_iterator it = headers.begin(); it != headers.end(); ++it) |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
340 { |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
341 headers_[it->first] = it->second; |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
342 } |
825 | 343 } |
344 | |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
345 const HttpHeaders& GetHttpHeaders() const |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
346 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
347 return headers_; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
348 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
349 |
825 | 350 void SetTimeout(unsigned int timeout) |
351 { | |
352 timeout_ = timeout; | |
353 } | |
354 | |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
355 unsigned int GetTimeout() const |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
356 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
357 return timeout_; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
358 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
359 |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
360 void SetCredentials(const std::string& username, |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
361 const std::string& password) |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
362 { |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
363 hasCredentials_ = true; |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
364 username_ = username; |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
365 password_ = password; |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
366 } |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
367 |
825 | 368 void Execute() |
369 { | |
370 if (command_.get() == NULL) | |
371 { | |
372 // Cannot call Execute() twice | |
956
a7351ad54960
Made IsContextLost automatically set the flag by checking with the emscripten
Benjamin Golinvaux <bgo@osimis.io>
parents:
933
diff
changeset
|
373 LOG(ERROR) << "WebAssemblyOracle::Execute(): (command_.get() == NULL)"; |
a7351ad54960
Made IsContextLost automatically set the flag by checking with the emscripten
Benjamin Golinvaux <bgo@osimis.io>
parents:
933
diff
changeset
|
374 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
825 | 375 } |
376 | |
377 emscripten_fetch_attr_t attr; | |
378 emscripten_fetch_attr_init(&attr); | |
379 | |
380 const char* method; | |
381 | |
382 switch (method_) | |
383 { | |
384 case Orthanc::HttpMethod_Get: | |
385 method = "GET"; | |
386 break; | |
387 | |
388 case Orthanc::HttpMethod_Post: | |
389 method = "POST"; | |
390 break; | |
391 | |
392 case Orthanc::HttpMethod_Delete: | |
393 method = "DELETE"; | |
394 break; | |
395 | |
396 case Orthanc::HttpMethod_Put: | |
397 method = "PUT"; | |
398 break; | |
399 | |
400 default: | |
401 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
402 } | |
403 | |
404 strcpy(attr.requestMethod, method); | |
405 | |
971
bc7b249dfbd0
Added EMSCRIPTEN_FETCH_REPLACE flag to requests to prevent stale cache results
Benjamin Golinvaux <bgo@osimis.io>
parents:
964
diff
changeset
|
406 attr.attributes = EMSCRIPTEN_FETCH_LOAD_TO_MEMORY | EMSCRIPTEN_FETCH_REPLACE; |
825 | 407 attr.onsuccess = FetchContext::SuccessCallback; |
408 attr.onerror = FetchContext::FailureCallback; | |
409 attr.timeoutMSecs = timeout_ * 1000; | |
410 | |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
411 if (hasCredentials_) |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
412 { |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
413 attr.withCredentials = EM_TRUE; |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
414 attr.userName = username_.c_str(); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
415 attr.password = password_.c_str(); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
416 } |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
417 |
825 | 418 std::vector<const char*> headers; |
419 headers.reserve(2 * headers_.size() + 1); | |
420 | |
421 std::string expectedContentType; | |
422 | |
423 for (HttpHeaders::const_iterator it = headers_.begin(); it != headers_.end(); ++it) | |
424 { | |
425 std::string key; | |
426 Orthanc::Toolbox::ToLowerCase(key, it->first); | |
427 | |
428 if (key == "accept") | |
429 { | |
430 expectedContentType = it->second; | |
431 } | |
432 | |
433 if (key != "accept-encoding") // Web browsers forbid the modification of this HTTP header | |
434 { | |
435 headers.push_back(it->first.c_str()); | |
436 headers.push_back(it->second.c_str()); | |
437 } | |
438 } | |
439 | |
440 headers.push_back(NULL); // Termination of the array of HTTP headers | |
441 | |
442 attr.requestHeaders = &headers[0]; | |
443 | |
841
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
444 char* requestData = NULL; |
825 | 445 if (!body_.empty()) |
841
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
446 requestData = reinterpret_cast<char*>(malloc(body_.size())); |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
447 |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
448 try |
825 | 449 { |
841
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
450 if (!body_.empty()) |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
451 { |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
452 memcpy(requestData, &(body_[0]), body_.size()); |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
453 attr.requestDataSize = body_.size(); |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
454 attr.requestData = requestData; |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
455 } |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
456 attr.userData = new FetchContext(oracle_, receiver_, command_.release(), expectedContentType); |
825 | 457 |
841
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
458 // Must be the last call to prevent memory leak on error |
992
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
459 emscripten_fetch(&attr, url_.c_str()); |
841
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
460 } |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
461 catch(...) |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
462 { |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
463 if(requestData != NULL) |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
464 free(requestData); |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
465 throw; |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
466 } |
266e2b0b9abc
better error reporting in DicomStructureSetLoader + fixed POST request logic
Benjamin Golinvaux <bgo@osimis.io>
parents:
831
diff
changeset
|
467 } |
825 | 468 }; |
964
91f827272c1f
Added cache-control headers for POST requests + #ifdef'd tracing logs + trace on context restored
Benjamin Golinvaux <bgo@osimis.io>
parents:
959
diff
changeset
|
469 |
91f827272c1f
Added cache-control headers for POST requests + #ifdef'd tracing logs + trace on context restored
Benjamin Golinvaux <bgo@osimis.io>
parents:
959
diff
changeset
|
470 |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
471 void WebAssemblyOracle::ProcessFetchResult(boost::weak_ptr<IObserver>& receiver, |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
472 const std::string& answer, |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
473 const HttpHeaders& headers, |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
474 const IOracleCommand& command) |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
475 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
476 switch (command.GetType()) |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
477 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
478 case IOracleCommand::Type_Http: |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
479 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
480 HttpCommand::SuccessMessage message(dynamic_cast<const HttpCommand&>(command), headers, answer); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
481 EmitMessage(receiver, message); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
482 break; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
483 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
484 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
485 case IOracleCommand::Type_OrthancRestApi: |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
486 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
487 LOG(TRACE) << "WebAssemblyOracle::FetchContext::SuccessCallback. About to call EmitMessage(message);"; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
488 OrthancRestApiCommand::SuccessMessage message |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
489 (dynamic_cast<const OrthancRestApiCommand&>(command), headers, answer); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
490 EmitMessage(receiver, message); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
491 break; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
492 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
493 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
494 case IOracleCommand::Type_GetOrthancImage: |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
495 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
496 dynamic_cast<const GetOrthancImageCommand&>(command).ProcessHttpAnswer(receiver, *this, answer, headers); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
497 break; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
498 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
499 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
500 case IOracleCommand::Type_GetOrthancWebViewerJpeg: |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
501 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
502 dynamic_cast<const GetOrthancWebViewerJpegCommand&>(command).ProcessHttpAnswer(receiver, *this, answer); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
503 break; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
504 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
505 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
506 case IOracleCommand::Type_ParseDicomFromWado: |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
507 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
508 #if ORTHANC_ENABLE_DCMTK == 1 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
509 const ParseDicomFromWadoCommand& c = dynamic_cast<const ParseDicomFromWadoCommand&>(command); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
510 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
511 size_t fileSize; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
512 std::unique_ptr<Orthanc::ParsedDicomFile> dicom |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
513 (ParseDicomSuccessMessage::ParseWadoAnswer(fileSize, answer, headers)); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
514 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
515 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
516 ParseDicomSuccessMessage message(c, c.GetSource(), *dicom, fileSize, true); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
517 EmitMessage(receiver, message); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
518 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
519 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
520 if (dicomCache_.get()) |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
521 { |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
522 // Store it into the cache for future use |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
523 dicomCache_->Acquire(BUCKET_SOP, c.GetSopInstanceUid(), dicom.release(), fileSize, true); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
524 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
525 #else |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
526 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
527 #endif |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
528 break; |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
529 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
530 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
531 default: |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
532 LOG(ERROR) << "Command type not implemented by the WebAssembly Oracle (in SuccessCallback): " |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
533 << command.GetType(); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
534 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
535 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
536 } |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
537 |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
538 |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
539 void WebAssemblyOracle::SetOrthancUrl(FetchCommand& command, |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
540 const std::string& uri) const |
964
91f827272c1f
Added cache-control headers for POST requests + #ifdef'd tracing logs + trace on context restored
Benjamin Golinvaux <bgo@osimis.io>
parents:
959
diff
changeset
|
541 { |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
542 if (isLocalOrthanc_) |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
543 { |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
544 command.SetUrl(localOrthancRoot_ + uri); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
545 } |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
546 else |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
547 { |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
548 command.SetUrl(remoteOrthanc_.GetUrl() + uri); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
549 command.AddHttpHeaders(remoteOrthanc_.GetHttpHeaders()); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
550 |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
551 if (!remoteOrthanc_.GetUsername().empty()) |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
552 { |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
553 command.SetCredentials(remoteOrthanc_.GetUsername(), remoteOrthanc_.GetPassword()); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
554 } |
964
91f827272c1f
Added cache-control headers for POST requests + #ifdef'd tracing logs + trace on context restored
Benjamin Golinvaux <bgo@osimis.io>
parents:
959
diff
changeset
|
555 } |
91f827272c1f
Added cache-control headers for POST requests + #ifdef'd tracing logs + trace on context restored
Benjamin Golinvaux <bgo@osimis.io>
parents:
959
diff
changeset
|
556 } |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
557 |
964
91f827272c1f
Added cache-control headers for POST requests + #ifdef'd tracing logs + trace on context restored
Benjamin Golinvaux <bgo@osimis.io>
parents:
959
diff
changeset
|
558 |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
559 void WebAssemblyOracle::Execute(boost::weak_ptr<IObserver> receiver, |
992
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
560 HttpCommand* command) |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
561 { |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
562 FetchCommand fetch(*this, receiver, command); |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
563 |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
564 fetch.SetMethod(command->GetMethod()); |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
565 fetch.SetUrl(command->GetUrl()); |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
566 fetch.AddHttpHeaders(command->GetHttpHeaders()); |
992
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
567 fetch.SetTimeout(command->GetTimeout()); |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
568 |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
569 if (command->GetMethod() == Orthanc::HttpMethod_Post || |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
570 command->GetMethod() == Orthanc::HttpMethod_Put) |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
571 { |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
572 std::string body; |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
573 command->SwapBody(body); |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
574 fetch.SetBody(body); |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
575 } |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
576 |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
577 fetch.Execute(); |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
578 } |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
579 |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
580 |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
581 void WebAssemblyOracle::Execute(boost::weak_ptr<IObserver> receiver, |
825 | 582 OrthancRestApiCommand* command) |
583 { | |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
584 try |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
585 { |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
586 //LOG(TRACE) << "*********** WebAssemblyOracle::Execute."; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
587 //LOG(TRACE) << "WebAssemblyOracle::Execute | command = " << command; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
588 FetchCommand fetch(*this, receiver, command); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
589 |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
590 fetch.SetMethod(command->GetMethod()); |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
591 SetOrthancUrl(fetch, command->GetUri()); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
592 fetch.AddHttpHeaders(command->GetHttpHeaders()); |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
593 fetch.SetTimeout(command->GetTimeout()); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
594 |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
595 if (command->GetMethod() == Orthanc::HttpMethod_Post || |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
596 command->GetMethod() == Orthanc::HttpMethod_Put) |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
597 { |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
598 std::string body; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
599 command->SwapBody(body); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
600 fetch.SetBody(body); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
601 } |
825 | 602 |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
603 fetch.Execute(); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
604 //LOG(TRACE) << "*********** successful end of WebAssemblyOracle::Execute."; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
605 } |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
606 catch (const Orthanc::OrthancException& e) |
825 | 607 { |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
608 if (e.HasDetails()) |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
609 { |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
610 LOG(ERROR) << "OrthancException in WebAssemblyOracle::Execute: " << e.What() << " Details: " << e.GetDetails(); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
611 } |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
612 else |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
613 { |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
614 LOG(ERROR) << "OrthancException in WebAssemblyOracle::Execute: " << e.What(); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
615 } |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
616 //LOG(TRACE) << "*********** failing end of WebAssemblyOracle::Execute."; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
617 throw; |
825 | 618 } |
933
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
619 catch (const std::exception& e) |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
620 { |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
621 LOG(ERROR) << "std::exception in WebAssemblyOracle::Execute: " << e.what(); |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
622 // LOG(TRACE) << "*********** failing end of WebAssemblyOracle::Execute."; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
623 throw; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
624 } |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
625 catch (...) |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
626 { |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
627 LOG(ERROR) << "Unknown exception in WebAssemblyOracle::Execute"; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
628 // LOG(TRACE) << "*********** failing end of WebAssemblyOracle::Execute."; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
629 throw; |
f75f6cb69c1b
Commented-out traces for debug
Benjamin Golinvaux <bgo@osimis.io>
parents:
843
diff
changeset
|
630 } |
825 | 631 } |
632 | |
633 | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
634 void WebAssemblyOracle::Execute(boost::weak_ptr<IObserver> receiver, |
825 | 635 GetOrthancImageCommand* command) |
636 { | |
637 FetchCommand fetch(*this, receiver, command); | |
638 | |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
639 SetOrthancUrl(fetch, command->GetUri()); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
640 fetch.AddHttpHeaders(command->GetHttpHeaders()); |
825 | 641 fetch.SetTimeout(command->GetTimeout()); |
642 | |
643 fetch.Execute(); | |
644 } | |
645 | |
646 | |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
647 void WebAssemblyOracle::Execute(boost::weak_ptr<IObserver> receiver, |
825 | 648 GetOrthancWebViewerJpegCommand* command) |
649 { | |
650 FetchCommand fetch(*this, receiver, command); | |
651 | |
1242
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
652 SetOrthancUrl(fetch, command->GetUri()); |
b9b5d4378874
working of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1229
diff
changeset
|
653 fetch.AddHttpHeaders(command->GetHttpHeaders()); |
825 | 654 fetch.SetTimeout(command->GetTimeout()); |
655 | |
656 fetch.Execute(); | |
657 } | |
658 | |
659 | |
1243
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
660 void WebAssemblyOracle::Execute(boost::weak_ptr<IObserver> receiver, |
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
661 ParseDicomFromWadoCommand* command) |
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
662 { |
1299
c38c89684d83
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1279
diff
changeset
|
663 std::unique_ptr<ParseDicomFromWadoCommand> protection(command); |
1244
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
664 |
1245
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
665 #if ORTHANC_ENABLE_DCMTK == 1 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
666 if (dicomCache_.get()) |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
667 { |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
668 ParsedDicomCache::Reader reader(*dicomCache_, BUCKET_SOP, protection->GetSopInstanceUid()); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
669 if (reader.IsValid() && |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
670 reader.HasPixelData()) |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
671 { |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
672 // Reuse the DICOM file from the cache |
1484
121d01aa328e
SeriesThumbnailsLoader working on raw dicom files
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1468
diff
changeset
|
673 ParseDicomSuccessMessage message(*protection, protection->GetSource(), reader.GetDicom(), |
1245
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
674 reader.GetFileSize(), reader.HasPixelData()); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
675 EmitMessage(receiver, message); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
676 return; |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
677 } |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
678 } |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
679 #endif |
825 | 680 |
1244
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
681 switch (command->GetRestCommand().GetType()) |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
682 { |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
683 case IOracleCommand::Type_Http: |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
684 { |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
685 const HttpCommand& rest = |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
686 dynamic_cast<const HttpCommand&>(protection->GetRestCommand()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
687 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
688 FetchCommand fetch(*this, receiver, protection.release()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
689 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
690 fetch.SetMethod(rest.GetMethod()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
691 fetch.SetUrl(rest.GetUrl()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
692 fetch.AddHttpHeaders(rest.GetHttpHeaders()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
693 fetch.SetTimeout(rest.GetTimeout()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
694 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
695 if (rest.GetMethod() == Orthanc::HttpMethod_Post || |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
696 rest.GetMethod() == Orthanc::HttpMethod_Put) |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
697 { |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
698 std::string body = rest.GetBody(); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
699 fetch.SetBody(body); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
700 } |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
701 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
702 fetch.Execute(); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
703 break; |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
704 } |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
705 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
706 case IOracleCommand::Type_OrthancRestApi: |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
707 { |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
708 const OrthancRestApiCommand& rest = |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
709 dynamic_cast<const OrthancRestApiCommand&>(protection->GetRestCommand()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
710 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
711 FetchCommand fetch(*this, receiver, protection.release()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
712 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
713 fetch.SetMethod(rest.GetMethod()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
714 SetOrthancUrl(fetch, rest.GetUri()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
715 fetch.AddHttpHeaders(rest.GetHttpHeaders()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
716 fetch.SetTimeout(rest.GetTimeout()); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
717 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
718 if (rest.GetMethod() == Orthanc::HttpMethod_Post || |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
719 rest.GetMethod() == Orthanc::HttpMethod_Put) |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
720 { |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
721 std::string body = rest.GetBody(); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
722 fetch.SetBody(body); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
723 } |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
724 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
725 fetch.Execute(); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
726 break; |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
727 } |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
728 |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
729 default: |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
730 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
731 } |
1243
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
732 } |
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
733 |
825 | 734 |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
735 bool WebAssemblyOracle::Schedule(boost::shared_ptr<IObserver> receiver, |
825 | 736 IOracleCommand* command) |
737 { | |
977
262a0244e9b2
Added missing Unregister for objects that register by the broker + logs + guard in FetchContext
Benjamin Golinvaux <bgo@osimis.io>
parents:
975
diff
changeset
|
738 LOG(TRACE) << "WebAssemblyOracle::Schedule : receiver = " |
1468
323bf6040f5d
fix for boost::program_options
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1455
diff
changeset
|
739 << std::hex << receiver.get(); |
977
262a0244e9b2
Added missing Unregister for objects that register by the broker + logs + guard in FetchContext
Benjamin Golinvaux <bgo@osimis.io>
parents:
975
diff
changeset
|
740 |
1298
8a0a62189f46
replacing std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1270
diff
changeset
|
741 std::unique_ptr<IOracleCommand> protection(command); |
825 | 742 |
743 if (command == NULL) | |
744 { | |
745 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); | |
746 } | |
747 | |
748 switch (command->GetType()) | |
749 { | |
992
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
750 case IOracleCommand::Type_Http: |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
751 Execute(receiver, dynamic_cast<HttpCommand*>(protection.release())); |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
752 break; |
a9f5d0742e22
implementation of HttpCommand in WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
977
diff
changeset
|
753 |
825 | 754 case IOracleCommand::Type_OrthancRestApi: |
755 Execute(receiver, dynamic_cast<OrthancRestApiCommand*>(protection.release())); | |
756 break; | |
757 | |
758 case IOracleCommand::Type_GetOrthancImage: | |
759 Execute(receiver, dynamic_cast<GetOrthancImageCommand*>(protection.release())); | |
760 break; | |
761 | |
762 case IOracleCommand::Type_GetOrthancWebViewerJpeg: | |
1524
5bc305a166c2
Re-enabled Jpeg command scheduling in WebAssemblyOracle
Benjamin Golinvaux <bgo@osimis.io>
parents:
1512
diff
changeset
|
763 Execute(receiver, dynamic_cast<GetOrthancWebViewerJpegCommand*>(protection.release())); |
825 | 764 break; |
765 | |
766 case IOracleCommand::Type_Sleep: | |
767 { | |
768 unsigned int timeoutMS = dynamic_cast<SleepOracleCommand*>(command)->GetDelay(); | |
769 emscripten_set_timeout(TimeoutContext::Callback, timeoutMS, | |
770 new TimeoutContext(*this, receiver, protection.release())); | |
771 break; | |
772 } | |
773 | |
1243
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
774 case IOracleCommand::Type_ParseDicomFromWado: |
1244
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
775 #if ORTHANC_ENABLE_DCMTK == 1 |
1243
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
776 Execute(receiver, dynamic_cast<ParseDicomFromWadoCommand*>(protection.release())); |
1244
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
777 #else |
1723
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
778 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, |
81273beabc9f
refactoring: WebAssemblyOracle::ProcessFetchResult()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1678
diff
changeset
|
779 "DCMTK must be enabled to parse DICOM files"); |
1244
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
780 #endif |
1243
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
781 break; |
608983cc2512
removing unused logs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1242
diff
changeset
|
782 |
825 | 783 default: |
1244
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
784 LOG(ERROR) << "Command type not implemented by the WebAssembly Oracle (in Schedule): " |
b17959d4da06
working on ParseDicomFromWadoCommand for wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1243
diff
changeset
|
785 << command->GetType(); |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
786 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
825 | 787 } |
1229
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
788 |
b9f2a111c5b9
fix compilation of WebAssemblyOracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1076
diff
changeset
|
789 return true; |
825 | 790 } |
1245
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
791 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
792 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
793 void WebAssemblyOracle::SetDicomCacheSize(size_t size) |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
794 { |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
795 #if ORTHANC_ENABLE_DCMTK == 1 |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
796 if (size == 0) |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
797 { |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
798 dicomCache_.reset(); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
799 } |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
800 else |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
801 { |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
802 dicomCache_.reset(new ParsedDicomCache(size)); |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
803 } |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
804 #else |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
805 LOG(INFO) << "DCMTK support is disabled, the DICOM cache is disabled"; |
3d4dc87af04b
ParseDicomFromWadoCommand working in wasm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1244
diff
changeset
|
806 #endif |
825 | 807 } |
1675
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
808 |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
809 |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
810 WebAssemblyOracle::CachedInstanceAccessor::CachedInstanceAccessor(WebAssemblyOracle& oracle, |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
811 const std::string& sopInstanceUid) |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
812 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
813 #if ORTHANC_ENABLE_DCMTK == 1 |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
814 if (oracle.dicomCache_.get() != NULL) |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
815 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
816 reader_.reset(new ParsedDicomCache::Reader(*oracle.dicomCache_, BUCKET_SOP, sopInstanceUid)); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
817 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
818 #endif |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
819 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
820 |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
821 bool WebAssemblyOracle::CachedInstanceAccessor::IsValid() const |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
822 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
823 #if ORTHANC_ENABLE_DCMTK == 1 |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
824 return (reader_.get() != NULL && |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
825 reader_->IsValid()); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
826 #else |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
827 return false; |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
828 #endif |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
829 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
830 |
1678 | 831 #if ORTHANC_ENABLE_DCMTK == 1 |
1675
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
832 const Orthanc::ParsedDicomFile& WebAssemblyOracle::CachedInstanceAccessor::GetDicom() const |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
833 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
834 if (IsValid()) |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
835 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
836 assert(reader_.get() != NULL); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
837 return reader_->GetDicom(); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
838 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
839 else |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
840 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
841 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
842 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
843 } |
1678 | 844 #endif |
1675
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
845 |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
846 size_t WebAssemblyOracle::CachedInstanceAccessor::GetFileSize() const |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
847 { |
1678 | 848 #if ORTHANC_ENABLE_DCMTK == 1 |
1675
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
849 if (IsValid()) |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
850 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
851 assert(reader_.get() != NULL); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
852 return reader_->GetFileSize(); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
853 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
854 else |
1678 | 855 #endif |
1675
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
856 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
857 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
858 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
859 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
860 |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
861 bool WebAssemblyOracle::CachedInstanceAccessor::HasPixelData() const |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
862 { |
1678 | 863 #if ORTHANC_ENABLE_DCMTK == 1 |
1675
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
864 if (IsValid()) |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
865 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
866 assert(reader_.get() != NULL); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
867 return reader_->HasPixelData(); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
868 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
869 else |
1678 | 870 #endif |
1675
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
871 { |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
872 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
873 } |
6fa05252b085
don't load low-quality image if the parsed dicom file is cached by the oracle
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1596
diff
changeset
|
874 } |
825 | 875 } |