diff Framework/Oracle/ThreadedOracle.cpp @ 979:18d53a8b41b7

HttpCommand
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 03 Sep 2019 17:52:28 +0200
parents a7351ad54960
children 81b29bc7c3d4 2d8ab34c8c91
line wrap: on
line diff
--- a/Framework/Oracle/ThreadedOracle.cpp	Mon Sep 02 17:44:20 2019 +0200
+++ b/Framework/Oracle/ThreadedOracle.cpp	Tue Sep 03 17:52:28 2019 +0200
@@ -23,6 +23,7 @@
 
 #include "GetOrthancImageCommand.h"
 #include "GetOrthancWebViewerJpegCommand.h"
+#include "HttpCommand.h"
 #include "OrthancRestApiCommand.h"
 #include "SleepOracleCommand.h"
 #include "OracleCommandExceptionMessage.h"
@@ -212,6 +213,34 @@
 
 
   static void Execute(IMessageEmitter& emitter,
+                      const IObserver& receiver,
+                      const HttpCommand& command)
+  {
+    Orthanc::HttpClient client;
+    client.SetUrl(command.GetUrl());
+    client.SetMethod(command.GetMethod());
+    client.SetTimeout(command.GetTimeout());
+
+    CopyHttpHeaders(client, command.GetHttpHeaders());
+
+    if (command.GetMethod() == Orthanc::HttpMethod_Post ||
+        command.GetMethod() == Orthanc::HttpMethod_Put)
+    {
+      client.SetBody(command.GetBody());
+    }
+
+    std::string answer;
+    Orthanc::HttpClient::HttpHeaders answerHeaders;
+    client.ApplyAndThrowException(answer, answerHeaders);
+
+    DecodeAnswer(answer, answerHeaders);
+
+    HttpCommand::SuccessMessage message(command, answerHeaders, answer);
+    emitter.EmitMessage(receiver, message);
+  }
+
+
+  static void Execute(IMessageEmitter& emitter,
                       const Orthanc::WebServiceParameters& orthanc,
                       const IObserver& receiver,
                       const OrthancRestApiCommand& command)
@@ -307,6 +336,11 @@
             break;
           }
 
+          case IOracleCommand::Type_Http:
+            Execute(emitter_, item.GetReceiver(), 
+                    dynamic_cast<const HttpCommand&>(item.GetCommand()));
+            break;
+
           case IOracleCommand::Type_OrthancRestApi:
             Execute(emitter_, orthanc_, item.GetReceiver(), 
                     dynamic_cast<const OrthancRestApiCommand&>(item.GetCommand()));