diff Core/RestApi/RestApiOutput.cpp @ 216:e5d5d4a9a326

refactored upload of dicom through http
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 29 Nov 2012 11:57:35 +0100
parents c07170f3f4f7
children 78a8eaa5f30b
line wrap: on
line diff
--- a/Core/RestApi/RestApiOutput.cpp	Thu Nov 29 11:25:29 2012 +0100
+++ b/Core/RestApi/RestApiOutput.cpp	Thu Nov 29 11:57:35 2012 +0100
@@ -39,12 +39,12 @@
   RestApiOutput::RestApiOutput(HttpOutput& output) : 
     output_(output)
   {
-    existingResource_ = false;
+    alreadySent_ = false;
   }
 
   RestApiOutput::~RestApiOutput()
   {
-    if (!existingResource_)
+    if (!alreadySent_)
     {
       output_.SendHeader(Orthanc_HttpStatus_400_BadRequest);
     }
@@ -52,7 +52,7 @@
   
   void RestApiOutput::CheckStatus()
   {
-    if (existingResource_)
+    if (alreadySent_)
     {
       throw OrthancException(ErrorCode_BadSequenceOfCalls);
     }
@@ -62,7 +62,7 @@
   {
     CheckStatus();
     sender.Send(output_);
-    existingResource_ = true;
+    alreadySent_ = true;
   }
 
   void RestApiOutput::AnswerJson(const Json::Value& value)
@@ -71,7 +71,7 @@
     Json::StyledWriter writer;
     std::string s = writer.write(value);
     output_.AnswerBufferWithContentType(s, "application/json");
-    existingResource_ = true;
+    alreadySent_ = true;
   }
 
   void RestApiOutput::AnswerBuffer(const std::string& buffer,
@@ -79,13 +79,25 @@
   {
     CheckStatus();
     output_.AnswerBufferWithContentType(buffer, contentType);
-    existingResource_ = true;
+    alreadySent_ = true;
   }
 
   void RestApiOutput::Redirect(const std::string& path)
   {
     CheckStatus();
     output_.Redirect(path);
-    existingResource_ = true;
+    alreadySent_ = true;
+  }
+
+  void RestApiOutput::SignalError(Orthanc_HttpStatus status)
+  {
+    if (status != Orthanc_HttpStatus_415_UnsupportedMediaType)
+    {
+      throw OrthancException("This HTTP status is not allowed in a REST API");
+    }
+
+    CheckStatus();
+    output_.SendHeader(status);
+    alreadySent_ = true;    
   }
 }