Use url parsing
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ class ConnectionOperator
|
||||
private:
|
||||
std::vector<std::unique_ptr<Middleware::BaseMiddleware>> middlewares;
|
||||
|
||||
void SendResponse(Connection const & connection, Http::Response const & response) const;
|
||||
|
||||
public:
|
||||
void HandleNewConnection(Connection const & newConnection);
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
#include "url.hpp"
|
||||
|
||||
bool Url::HasPath() const
|
||||
{
|
||||
return path.size() > 1;
|
||||
}
|
||||
|
||||
bool Url::HasQuery() const
|
||||
{
|
||||
// TODO implement
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Url::HasFragment() const
|
||||
{
|
||||
// TODO implement
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string const & Url::GetPath() const
|
||||
{
|
||||
return path;
|
||||
}
|
||||
|
||||
std::string const & Url::GetQuery() const
|
||||
{
|
||||
return query;
|
||||
}
|
||||
|
||||
std::string const & Url::GetFragment() const
|
||||
{
|
||||
return fragment;
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
|
||||
class Url
|
||||
{
|
||||
private:
|
||||
std::string path;
|
||||
std::string query;
|
||||
std::string fragment;
|
||||
|
||||
public:
|
||||
bool HasPath() const;
|
||||
bool HasQuery() const;
|
||||
bool HasFragment() const;
|
||||
|
||||
std::string const & GetPath() const;
|
||||
std::string const & GetQuery() const;
|
||||
std::string const & GetFragment() const;
|
||||
};
|
||||
Reference in New Issue
Block a user