# HG changeset patch # User jodogne # Date 1440316156 -7200 # Node ID 9c5d93510414ee65cd595b237855ea3eedd5b275 # Parent 3be6eb3757c8b10f0cfd0d2a552b41e649cd210a If error while calling the REST API, the answer body contains an error description diff -r 3be6eb3757c8 -r 9c5d93510414 Core/HttpServer/HttpOutput.cpp --- a/Core/HttpServer/HttpOutput.cpp Fri Aug 21 17:37:13 2015 +0200 +++ b/Core/HttpServer/HttpOutput.cpp Sun Aug 23 09:49:16 2015 +0200 @@ -287,7 +287,9 @@ } - void HttpOutput::SendStatus(HttpStatus status) + void HttpOutput::SendStatus(HttpStatus status, + const char* message, + size_t messageSize) { if (status == HttpStatus_200_Ok || status == HttpStatus_301_MovedPermanently || @@ -300,7 +302,7 @@ stateMachine_.ClearHeaders(); stateMachine_.SetHttpStatus(status); - stateMachine_.SendBody(NULL, 0); + stateMachine_.SendBody(message, messageSize); } diff -r 3be6eb3757c8 -r 9c5d93510414 Core/HttpServer/HttpOutput.h --- a/Core/HttpServer/HttpOutput.h Fri Aug 21 17:37:13 2015 +0200 +++ b/Core/HttpServer/HttpOutput.h Sun Aug 23 09:49:16 2015 +0200 @@ -146,7 +146,20 @@ return isGzipAllowed_; } - void SendStatus(HttpStatus status); + void SendStatus(HttpStatus status, + const char* message, + size_t messageSize); + + void SendStatus(HttpStatus status) + { + SendStatus(status, NULL, 0); + } + + void SendStatus(HttpStatus status, + const std::string& message) + { + SendStatus(status, message.c_str(), message.size()); + } void SetContentType(const char* contentType) { diff -r 3be6eb3757c8 -r 9c5d93510414 Core/HttpServer/MongooseServer.cpp --- a/Core/HttpServer/MongooseServer.cpp Fri Aug 21 17:37:13 2015 +0200 +++ b/Core/HttpServer/MongooseServer.cpp Sun Aug 23 09:49:16 2015 +0200 @@ -749,7 +749,7 @@ break; default: - output.SendStatus(HttpStatus_500_InternalServerError); + output.SendStatus(HttpStatus_500_InternalServerError, e.What()); } } catch (OrthancException&) @@ -763,13 +763,13 @@ catch (boost::bad_lexical_cast&) { LOG(ERROR) << "Exception in the HTTP handler: Bad lexical cast"; - output.SendStatus(HttpStatus_400_BadRequest); + output.SendStatus(HttpStatus_400_BadRequest, "Cannot cast some argument"); return; } catch (std::runtime_error&) { LOG(ERROR) << "Exception in the HTTP handler: Presumably a bad JSON request"; - output.SendStatus(HttpStatus_400_BadRequest); + output.SendStatus(HttpStatus_400_BadRequest, "Bad JSON request"); return; } diff -r 3be6eb3757c8 -r 9c5d93510414 Core/RestApi/RestApiOutput.cpp --- a/Core/RestApi/RestApiOutput.cpp Fri Aug 21 17:37:13 2015 +0200 +++ b/Core/RestApi/RestApiOutput.cpp Sun Aug 23 09:49:16 2015 +0200 @@ -135,7 +135,9 @@ alreadySent_ = true; } - void RestApiOutput::SignalError(HttpStatus status) + void RestApiOutput::SignalErrorInternal(HttpStatus status, + const char* message, + size_t messageSize) { if (status != HttpStatus_400_BadRequest && status != HttpStatus_403_Forbidden && @@ -146,10 +148,21 @@ } CheckStatus(); - output_.SendStatus(status); + output_.SendStatus(status, message, messageSize); alreadySent_ = true; } + void RestApiOutput::SignalError(HttpStatus status) + { + SignalErrorInternal(status, NULL, 0); + } + + void RestApiOutput::SignalError(HttpStatus status, + const std::string& message) + { + SignalErrorInternal(status, message.c_str(), message.size()); + } + void RestApiOutput::SetCookie(const std::string& name, const std::string& value, unsigned int maxAge) diff -r 3be6eb3757c8 -r 9c5d93510414 Core/RestApi/RestApiOutput.h --- a/Core/RestApi/RestApiOutput.h Fri Aug 21 17:37:13 2015 +0200 +++ b/Core/RestApi/RestApiOutput.h Sun Aug 23 09:49:16 2015 +0200 @@ -49,6 +49,10 @@ void CheckStatus(); + void SignalErrorInternal(HttpStatus status, + const char* message, + size_t messageSize); + public: RestApiOutput(HttpOutput& output, HttpMethod method); @@ -78,6 +82,9 @@ void SignalError(HttpStatus status); + void SignalError(HttpStatus status, + const std::string& message); + void Redirect(const std::string& path); void SetCookie(const std::string& name, diff -r 3be6eb3757c8 -r 9c5d93510414 NEWS --- a/NEWS Fri Aug 21 17:37:13 2015 +0200 +++ b/NEWS Sun Aug 23 09:49:16 2015 +0200 @@ -17,6 +17,7 @@ ----------- * Many code refactorings +* If error while calling the REST API, the answer body contains an error description * Upgrade to curl 7.44.0 for static and Windows builds * Upgrade to libcurl 1.0.2d for static and Windows builds * Bypass zlib uncompression if "StorageCompression" is enabled and HTTP client supports deflate