From deb28a9ce73ed7e38aaa53659027b61976fdca6b Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Wed, 11 Jan 2023 18:36:43 +0100 Subject: Websocket for both http and https --- http.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'http.cpp') diff --git a/http.cpp b/http.cpp index 4738ad8..469f1aa 100644 --- a/http.cpp +++ b/http.cpp @@ -4,6 +4,7 @@ #include "server.h" #include "response.h" +#include "websocket.h" #include #include @@ -27,6 +28,7 @@ namespace beast = boost::beast; // from namespace http = beast::http; // from namespace net = boost::asio; // from using tcp = boost::asio::ip::tcp; // from +namespace websocket = beast::websocket; namespace { @@ -41,6 +43,7 @@ void fail(beast::error_code ec, char const* what) // Handles an HTTP server connection class session : public std::enable_shared_from_this { + boost::asio::io_context& ioc_; beast::tcp_stream stream_; beast::flat_buffer buffer_; Server& m_server; @@ -65,13 +68,21 @@ class session : public std::enable_shared_from_this sp->need_eof())); } + void handle_websocket() + { + beast::get_lowest_layer(stream_).expires_never(); + make_websocket_session(ioc_, std::move(stream_), response::get_websocket_address(req_, m_server), parser_->release()); + } + public: // Take ownership of the stream session( + boost::asio::io_context& ioc, tcp::socket&& socket, - Server& server) - : stream_(std::move(socket)) - , m_server(server) + Server& server): + ioc_(ioc), + stream_(std::move(socket)), + m_server(server) { } @@ -127,6 +138,12 @@ public: req_ = parser_->get(); + if (websocket::is_upgrade(req_)) + { + handle_websocket(); + return; + } + // Send the response handle_request(m_server, std::move(req_)); } @@ -251,6 +268,7 @@ private: { // Create the session and run it std::make_shared( + ioc_, std::move(socket), m_server)->run(); } -- cgit v1.2.3