diff Core/RestApi/RestApiOutput.cpp @ 211:b7aea293b965

list of resources
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 29 Nov 2012 09:56:46 +0100
parents 96b7918a6a18
children c07170f3f4f7
line wrap: on
line diff
--- a/Core/RestApi/RestApiOutput.cpp	Wed Nov 28 18:03:44 2012 +0100
+++ b/Core/RestApi/RestApiOutput.cpp	Thu Nov 29 09:56:46 2012 +0100
@@ -32,6 +32,8 @@
 
 #include "RestApiOutput.h"
 
+#include "../OrthancException.h"
+
 namespace Orthanc
 {
   RestApiOutput::RestApiOutput(HttpOutput& output) : 
@@ -40,7 +42,6 @@
     existingResource_ = false;
   }
 
-
   RestApiOutput::~RestApiOutput()
   {
     if (!existingResource_)
@@ -48,15 +49,25 @@
       output_.SendHeader(Orthanc_HttpStatus_400_BadRequest);
     }
   }
+  
+  void RestApiOutput::CheckStatus()
+  {
+    if (existingResource_)
+    {
+      throw OrthancException(ErrorCode_BadSequenceOfCalls);
+    }
+  }
 
   void RestApiOutput::AnswerFile(HttpFileSender& sender)
   {
+    CheckStatus();
     sender.Send(output_);
     existingResource_ = true;
   }
 
   void RestApiOutput::AnswerJson(const Json::Value& value)
   {
+    CheckStatus();
     Json::StyledWriter writer;
     std::string s = writer.write(value);
     output_.AnswerBufferWithContentType(s, "application/json");
@@ -66,12 +77,14 @@
   void RestApiOutput::AnswerBuffer(const std::string& buffer,
                                    const std::string& contentType)
   {
+    CheckStatus();
     output_.AnswerBufferWithContentType(buffer, contentType);
     existingResource_ = true;
   }
 
   void RestApiOutput::Redirect(const char* path)
   {
+    CheckStatus();
     output_.Redirect(path);
     existingResource_ = true;
   }