# HG changeset patch # User Sebastien Jodogne # Date 1568197992 -7200 # Node ID f270852d3180a3a46a4824cb1ff9bbc9d438b959 # Parent a9f5d0742e225c31af38160bbbd6c8a60e257878# Parent 92a043b8e43153d8401988869a91ff93182b01f9 merge diff -r 92a043b8e431 -r f270852d3180 Framework/Oracle/WebAssemblyOracle.cpp --- a/Framework/Oracle/WebAssemblyOracle.cpp Wed Sep 11 12:15:21 2019 +0200 +++ b/Framework/Oracle/WebAssemblyOracle.cpp Wed Sep 11 12:33:12 2019 +0200 @@ -306,32 +306,39 @@ { switch (context->GetCommand().GetType()) { - case IOracleCommand::Type_OrthancRestApi: - { - LOG(TRACE) << "WebAssemblyOracle::FetchContext::SuccessCallback. About to call context->EmitMessage(message);"; - OrthancRestApiCommand::SuccessMessage message - (context->GetTypedCommand(), headers, answer); - context->EmitMessage(message); - break; - } + case IOracleCommand::Type_Http: + { + HttpCommand::SuccessMessage message(context->GetTypedCommand(), headers, answer); + context->EmitMessage(message); + break; + } + + case IOracleCommand::Type_OrthancRestApi: + { + LOG(TRACE) << "WebAssemblyOracle::FetchContext::SuccessCallback. About to call context->EmitMessage(message);"; + OrthancRestApiCommand::SuccessMessage message + (context->GetTypedCommand(), headers, answer); + context->EmitMessage(message); + break; + } - case IOracleCommand::Type_GetOrthancImage: - { - context->GetTypedCommand().ProcessHttpAnswer - (context->GetEmitter(), context->GetReceiver(), answer, headers); - break; - } + case IOracleCommand::Type_GetOrthancImage: + { + context->GetTypedCommand().ProcessHttpAnswer + (context->GetEmitter(), context->GetReceiver(), answer, headers); + break; + } - case IOracleCommand::Type_GetOrthancWebViewerJpeg: - { - context->GetTypedCommand().ProcessHttpAnswer - (context->GetEmitter(), context->GetReceiver(), answer); - break; - } + case IOracleCommand::Type_GetOrthancWebViewerJpeg: + { + context->GetTypedCommand().ProcessHttpAnswer + (context->GetEmitter(), context->GetReceiver(), answer); + break; + } - default: - LOG(ERROR) << "Command type not implemented by the WebAssembly Oracle: " - << context->GetCommand().GetType(); + default: + LOG(ERROR) << "Command type not implemented by the WebAssembly Oracle: " + << context->GetCommand().GetType(); } } } @@ -375,7 +382,7 @@ const IObserver& receiver_; std::auto_ptr command_; Orthanc::HttpMethod method_; - std::string uri_; + std::string url_; std::string body_; HttpHeaders headers_; unsigned int timeout_; @@ -402,9 +409,14 @@ method_ = method; } - void SetUri(const std::string& uri) + void SetOrthancUri(const std::string& uri) { - uri_ = oracle_.orthancRoot_ + uri; + url_ = oracle_.orthancRoot_ + uri; + } + + void SetUrl(const std::string& url) + { + url_ = url; } void SetBody(std::string& body /* will be swapped */) @@ -514,9 +526,9 @@ // Must be the last call to prevent memory leak on error #if 0 - LOG(TRACE) << "Performing " << method << " request on URI: \"" << uri_ << "\""; + LOG(TRACE) << "Performing " << method << " request on URI: \"" << url_ << "\""; #endif - emscripten_fetch(&attr, uri_.c_str()); + emscripten_fetch(&attr, url_.c_str()); } catch(...) { @@ -546,6 +558,29 @@ } #endif + + void WebAssemblyOracle::Execute(const IObserver& receiver, + HttpCommand* command) + { + FetchCommand fetch(*this, receiver, command); + + fetch.SetMethod(command->GetMethod()); + fetch.SetUrl(command->GetUrl()); + fetch.SetHttpHeaders(command->GetHttpHeaders()); + fetch.SetTimeout(command->GetTimeout()); + + if (command->GetMethod() == Orthanc::HttpMethod_Post || + command->GetMethod() == Orthanc::HttpMethod_Put) + { + std::string body; + command->SwapBody(body); + fetch.SetBody(body); + } + + fetch.Execute(); + } + + void WebAssemblyOracle::Execute(const IObserver& receiver, OrthancRestApiCommand* command) { @@ -566,7 +601,7 @@ FetchCommand fetch(*this, receiver, command); fetch.SetMethod(command->GetMethod()); - fetch.SetUri(command->GetUri()); + fetch.SetOrthancUri(command->GetUri()); fetch.SetHttpHeaders(command->GetHttpHeaders()); fetch.SetTimeout(command->GetTimeout()); @@ -622,7 +657,7 @@ FetchCommand fetch(*this, receiver, command); - fetch.SetUri(command->GetUri()); + fetch.SetOrthancUri(command->GetUri()); fetch.SetHttpHeaders(command->GetHttpHeaders()); fetch.SetTimeout(command->GetTimeout()); @@ -642,7 +677,7 @@ FetchCommand fetch(*this, receiver, command); - fetch.SetUri(command->GetUri()); + fetch.SetOrthancUri(command->GetUri()); fetch.SetHttpHeaders(command->GetHttpHeaders()); fetch.SetTimeout(command->GetTimeout()); @@ -667,6 +702,10 @@ switch (command->GetType()) { + case IOracleCommand::Type_Http: + Execute(receiver, dynamic_cast(protection.release())); + break; + case IOracleCommand::Type_OrthancRestApi: //// DIAGNOSTIC. PLEASE REMOVE IF IT HAS BEEN COMMITTED BY MISTAKE //{ diff -r 92a043b8e431 -r f270852d3180 Framework/Oracle/WebAssemblyOracle.h --- a/Framework/Oracle/WebAssemblyOracle.h Wed Sep 11 12:15:21 2019 +0200 +++ b/Framework/Oracle/WebAssemblyOracle.h Wed Sep 11 12:33:12 2019 +0200 @@ -32,6 +32,7 @@ #include "../Messages/IObservable.h" #include "GetOrthancImageCommand.h" #include "GetOrthancWebViewerJpegCommand.h" +#include "HttpCommand.h" #include "IOracle.h" #include "OrthancRestApiCommand.h" @@ -51,6 +52,9 @@ class FetchCommand; void Execute(const IObserver& receiver, + HttpCommand* command); + + void Execute(const IObserver& receiver, OrthancRestApiCommand* command); void Execute(const IObserver& receiver,