diff options
Diffstat (limited to 'http.cpp')
-rw-r--r-- | http.cpp | 52 |
1 files changed, 22 insertions, 30 deletions
@@ -71,8 +71,7 @@ template< class Send> void handle_request( - const Config& config, - const Socket& socket, + Server& server, http::request<Body, http::basic_fields<Allocator>>&& req, Send&& send) { @@ -115,9 +114,17 @@ handle_request( return res; }; - std::string res_data; try { - res_data = generate_response(req, config, socket); + http::response<http::string_body> res{http::status::ok, req.version()}; + res.set(http::field::server, VersionString); + res.set(http::field::content_type, mime_type(extend_index_html(std::string(req.target())))); + res.keep_alive(req.keep_alive()); + std::string res_data = generate_response(req, res, server); + if (req.method() != http::verb::head) { + res.body() = res_data; + res.content_length(res_data.size()); + } + return send(std::move(res)); } catch(const bad_request_exception& ex) { return send(bad_request(ex.what())); } catch(const not_found_exception& ex) { @@ -126,14 +133,6 @@ handle_request( return send(server_error(ex.what())); } - http::response<http::string_body> res{http::status::ok, req.version()}; - res.set(http::field::server, VersionString); - res.set(http::field::content_type, mime_type(extend_index_html(std::string(req.target())))); - res.content_length(res_data.size()); - res.keep_alive(req.keep_alive()); - if (req.method() != http::verb::head) - res.body() = res_data; - return send(std::move(res)); } //------------------------------------------------------------------------------ @@ -187,8 +186,7 @@ class session : public std::enable_shared_from_this<session> beast::tcp_stream stream_; beast::flat_buffer buffer_; - const Config& m_config; - const Socket& m_socket; + Server& m_server; http::request<http::string_body> req_; std::shared_ptr<void> res_; send_lambda lambda_; @@ -197,11 +195,9 @@ public: // Take ownership of the stream session( tcp::socket&& socket, - const Config& config, - const Socket& config_socket) + Server& server) : stream_(std::move(socket)) - , m_config(config) - , m_socket(config_socket) + , m_server(server) , lambda_(*this) { } @@ -252,7 +248,7 @@ public: return fail(ec, "read"); // Send the response - handle_request(m_config, m_socket , std::move(req_), lambda_); + handle_request(m_server , std::move(req_), lambda_); } void @@ -298,19 +294,16 @@ class listener : public std::enable_shared_from_this<listener> { net::io_context& ioc_; tcp::acceptor acceptor_; - const Config& m_config; - const Socket& m_socket; + Server& m_server; public: listener( net::io_context& ioc, tcp::endpoint endpoint, - const Config& config, - const Socket& socket) + Server& server) : ioc_(ioc) , acceptor_(net::make_strand(ioc)) - , m_config(config) - , m_socket(socket) + , m_server(server) { beast::error_code ec; @@ -379,8 +372,7 @@ private: // Create the session and run it std::make_shared<session>( std::move(socket), - m_config, - m_socket)->run(); + m_server)->run(); } // Accept another connection @@ -394,7 +386,8 @@ private: namespace HTTP { - Server::Server(Config& config, boost::asio::io_context& ioc, const Socket& socket): ::Server(config, ioc), m_socket(socket) + Server::Server(Config& config, boost::asio::io_context& ioc, const Socket& socket, plugins_container_type& plugins) + : ::Server(config, ioc, socket, plugins) { } @@ -411,8 +404,7 @@ namespace HTTP { std::make_shared<listener>( m_ioc, tcp::endpoint{address, port}, - m_config, - m_socket)->run(); + *this)->run(); return EXIT_SUCCESS; } |