diff --git a/includes/request_parser.hpp b/includes/request_parser.hpp new file mode 100644 index 0000000..a256ec8 --- /dev/null +++ b/includes/request_parser.hpp @@ -0,0 +1,23 @@ +#ifndef REQUEST_PARSER_HPP +#define REQUEST_PARSER_HPP + +#include +#include +#include + +using namespace std; + +struct HttpRequest { + string method; + string uri; + string version; + map headers; + string body; +}; + +class request_parser { +public: + HttpRequest& parse(istream& data_stream); +}; + +#endif \ No newline at end of file diff --git a/includes/response_handler.hpp b/includes/response_handler.hpp new file mode 100644 index 0000000..cce703b --- /dev/null +++ b/includes/response_handler.hpp @@ -0,0 +1,14 @@ +#ifndef RESPONSE_HANDLER_HPP +#define RESPONSE_HANDLER_HPP + +#include "request_parser.hpp" +#include + +using namespace std; + +class response_handler { +public: + string& handle(HttpRequest request); +}; + +#endif \ No newline at end of file diff --git a/includes/tcp_connection.hpp b/includes/tcp_connection.hpp index 2b17831..47dcf92 100644 --- a/includes/tcp_connection.hpp +++ b/includes/tcp_connection.hpp @@ -4,6 +4,8 @@ #include #include #include +#include "request_parser.hpp" +#include "response_handler.hpp" using namespace boost; using namespace std; @@ -19,6 +21,8 @@ public: private: asio::ip::tcp::socket socket_; asio::streambuf buffer_; + request_parser request_parser_; + response_handler response_handler_; explicit tcp_connection(asio::io_context& io_context); diff --git a/src/tcp_connection.cpp b/src/tcp_connection.cpp index 8a7d3bc..0331757 100644 --- a/src/tcp_connection.cpp +++ b/src/tcp_connection.cpp @@ -27,17 +27,11 @@ void tcp_connection::handle() { void tcp_connection::handle_read(const boost::system::error_code& error, size_t bytes_transferred) { if (!error) { - // std::istream request_stream(&buffer_); - // std::string request_line; - // std::getline(request_stream, request_line); + istream request_stream(&buffer_); + auto requst = request_parser_.parse(request_stream); + string response = response_handler_.handle(requst); - // auto parsed_data = request_parser_.parse(request_line); - // string response = response_handler_.handle(parsed_data); - - std::string response = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, world!"; - auto data = asio::buffer(response); - - asio::async_write(socket_, data, + asio::async_write(socket_, asio::buffer(response), bind(&tcp_connection::handle_write, shared_from_this(), asio::placeholders::error,