Use url parsing

This commit is contained in:
2019-06-15 20:52:40 +02:00
parent 22d5430e57
commit 71a7aa147c
10 changed files with 126 additions and 71 deletions

View File

@@ -6,12 +6,34 @@
#include <cstdio>
#include <sstream>
void ConnectionOperator::SendResponse(Connection const & connection, Http::Response const & response) const
{
auto bytesToSend = response.Serialize();
connection.WriteBytes(bytesToSend);
}
void ConnectionOperator::HandleNewConnection(Connection const & newConnection)
{
auto requestBytes = newConnection.ReadBytes();
Http::Request request = Http::Request::Deserialize(requestBytes);
Http::Request request;
Http::Response response;
try
{
request = Http::Request::Deserialize(requestBytes);
}
catch (std::runtime_error & e)
{
std::stringstream ss;
ss << "Error during parsing of request <";
ss << e.what();
ss << '>';
Logger::GetInstance().Error(ss.str());
response.code = HttpResponse::Code::BAD_REQUEST;
SendResponse(newConnection, response);
return;
}
for(size_t i = 0; i < middlewares.size(); ++i)
{
middlewares[i]->HandleRequest(request, response);
@@ -20,10 +42,15 @@ void ConnectionOperator::HandleNewConnection(Connection const & newConnection)
if (response.code == HttpResponse::Code::UNKNOWN)
{
std::stringstream ss;
ss << "Unhandled request for file <";
ss << request.path;
ss << "Unhandled ";
ss << HttpRequest::typeStrings[static_cast<int>(request.requestType)];
ss << " request for file <";
ss << request.url.GetPath();
ss << '>';
Logger::GetInstance().Error(ss.str());
response.code = HttpResponse::Code::NOT_IMPLEMENTED;
SendResponse(newConnection, response);
return;
}