diff Core/HttpServer/MongooseServer.cpp @ 1575:f8aae45011c9

exceptions now carry HTTP status
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 25 Aug 2015 14:00:57 +0200
parents 3232f1c995a5
children bd1889029cbb
line wrap: on
line diff
--- a/Core/HttpServer/MongooseServer.cpp	Tue Aug 25 13:37:57 2015 +0200
+++ b/Core/HttpServer/MongooseServer.cpp	Tue Aug 25 14:00:57 2015 +0200
@@ -734,12 +734,12 @@
       }
       catch (boost::bad_lexical_cast&)
       {
-        throw OrthancException(ErrorCode_BadParameterType);
+        throw OrthancException(ErrorCode_BadParameterType, HttpStatus_400_BadRequest);
       }
       catch (std::runtime_error&)
       {
         // Presumably an error while parsing the JSON body
-        throw OrthancException(ErrorCode_BadRequest);
+        throw OrthancException(ErrorCode_BadRequest, HttpStatus_400_BadRequest);
       }
 
       if (!found)
@@ -752,39 +752,20 @@
       // Using this candidate handler results in an exception
       LOG(ERROR) << "Exception in the HTTP handler: " << e.What();
 
-      HttpStatus status;
+      Json::Value message = Json::objectValue;
+      message["HttpError"] = EnumerationToString(e.GetHttpStatus());
+      message["HttpStatus"] = e.GetHttpStatus();
+      message["Message"] = e.What();
+      message["Method"] = EnumerationToString(method);
+      message["OrthancError"] = EnumerationToString(e.GetErrorCode());
+      message["OrthancStatus"] = e.GetErrorCode();
+      message["Uri"] = request->uri;
+
+      std::string info = message.toStyledString();
 
       try
       {
-        switch (e.GetErrorCode())
-        {
-          case ErrorCode_InexistentFile:
-          case ErrorCode_InexistentItem:
-          case ErrorCode_UnknownResource:
-            status = HttpStatus_404_NotFound;
-            break;
-
-          case ErrorCode_BadRequest:
-          case ErrorCode_UriSyntax:
-          case ErrorCode_BadParameterType:
-            status = HttpStatus_400_BadRequest;
-            break;
-
-          default:
-	    status = HttpStatus_500_InternalServerError;
-	    break;
-        }
-
-	Json::Value message = Json::objectValue;
-	message["HttpStatus"] = status;
-	message["HttpError"] = EnumerationToString(status);
-	message["OrthancStatus"] = e.GetErrorCode();
-	message["OrthancError"] = e.GetDescription(e.GetErrorCode());
-	message["Message"] = e.What();
-	message["Uri"] = request->uri;
-	message["Method"] = EnumerationToString(method);
-	std::string s = message.toStyledString();
-	output.SendStatus(status, s);
+	output.SendStatus(e.GetHttpStatus(), info);
       }
       catch (OrthancException&)
       {