diff --git a/lib/remote/httpserverconnection.cpp b/lib/remote/httpserverconnection.cpp
index 01b32f403..cca0ff799 100644
--- a/lib/remote/httpserverconnection.cpp
+++ b/lib/remote/httpserverconnection.cpp
@@ -146,43 +146,37 @@ bool EnsureValidHeaders(
{
namespace http = boost::beast::http;
- bool httpError = true;
+ bool httpError = false;
+ String errorMsg;
- try {
- boost::system::error_code ec;
+ boost::system::error_code ec;
- http::async_read_header(stream, buf, parser, yc[ec]);
+ http::async_read_header(stream, buf, parser, yc[ec]);
- if (ec) {
- /**
- * Unfortunately there's no way to tell an HTTP protocol error
- * from an error on a lower layer:
- *
- *
- */
- throw std::invalid_argument(ec.message());
- }
+ if (ec) {
+ errorMsg = ec.message();
+ httpError = true;
+ }
- httpError = false;
+ switch (parser.get().version()) {
+ case 10:
+ case 11:
+ break;
+ default:
+ errorMsg = "Unsupported HTTP version";
+ }
- switch (parser.get().version()) {
- case 10:
- case 11:
- break;
- default:
- throw std::invalid_argument("Unsupported HTTP version");
- }
- } catch (const std::invalid_argument& ex) {
+ if (!errorMsg.IsEmpty() || httpError) {
response.result(http::status::bad_request);
if (!httpError && parser.get()[http::field::accept] == "application/json") {
HttpUtility::SendJsonBody(response, nullptr, new Dictionary({
{ "error", 400 },
- { "status", String("Bad Request: ") + ex.what() }
+ { "status", String("Bad Request: ") + errorMsg }
}));
} else {
response.set(http::field::content_type, "text/html");
- response.body() = String("Bad Request
") + ex.what() + "
";
+ response.body() = String("Bad Request
") + errorMsg + "
";
response.set(http::field::content_length, response.body().size());
}