Read body in parseRequest for HttpServer (#244)

Co-authored-by: Jay <jasoncarr@Jasons-MacBook-Pro.local>
This commit is contained in:
carr-7
2020-09-12 21:53:56 +01:00
committed by GitHub
parent a4e5d1b47a
commit 72d6651ded
3 changed files with 69 additions and 1 deletions

View File

@ -129,8 +129,28 @@ namespace ix
{
return std::make_tuple(false, "Error parsing HTTP headers", httpRequest);
}
std::string body = "";
if (headers.find("Content-Length") != headers.end()){
int contentLength = 0;
try {
contentLength = std::stoi(headers["Content-Length"]);
}
catch (std::exception){
return std::make_tuple(false, "Error parsing HTTP Header 'Content-Length'", httpRequest);
}
char c;
body.reserve(contentLength);
for (int i = 0; i < contentLength; i++){
if (socket->readByte(&c, isCancellationRequested))
body += c;
}
}
httpRequest = std::make_shared<HttpRequest>(uri, method, httpVersion, headers);
httpRequest = std::make_shared<HttpRequest>(uri, method, httpVersion, body, headers);
return std::make_tuple(true, "", httpRequest);
}

View File

@ -95,15 +95,18 @@ namespace ix
std::string uri;
std::string method;
std::string version;
std::string body;
WebSocketHttpHeaders headers;
HttpRequest(const std::string& u,
const std::string& m,
const std::string& v,
const std::string& b,
const WebSocketHttpHeaders& h = WebSocketHttpHeaders())
: uri(u)
, method(m)
, version(v)
, body(b)
, headers(h)
{
}