1 // 2 // connection.hpp 3 // ~~~~~~~~~~~~~~ 4 // 5 // Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 // 7 // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 // 10 11 #ifndef HTTP_SERVER2_CONNECTION_HPP 12 #define HTTP_SERVER2_CONNECTION_HPP 13 14 #include <boost/asio.hpp> 15 #include <boost/array.hpp> 16 #include <boost/noncopyable.hpp> 17 #include <boost/shared_ptr.hpp> 18 #include <boost/enable_shared_from_this.hpp> 19 #include "reply.hpp" 20 #include "request.hpp" 21 #include "request_handler.hpp" 22 #include "request_parser.hpp" 23 24 namespace http { 25 namespace server2 { 26 27 /// Represents a single connection from a client. 28 class connection 29 : public boost::enable_shared_from_this<connection>, 30 private boost::noncopyable 31 { 32 public: 33 /// Construct a connection with the given io_context. 34 explicit connection(boost::asio::io_context& io_context, 35 request_handler& handler); 36 37 /// Get the socket associated with the connection. 38 boost::asio::ip::tcp::socket& socket(); 39 40 /// Start the first asynchronous operation for the connection. 41 void start(); 42 43 private: 44 /// Handle completion of a read operation. 45 void handle_read(const boost::system::error_code& e, 46 std::size_t bytes_transferred); 47 48 /// Handle completion of a write operation. 49 void handle_write(const boost::system::error_code& e); 50 51 /// Socket for the connection. 52 boost::asio::ip::tcp::socket socket_; 53 54 /// The handler used to process the incoming request. 55 request_handler& request_handler_; 56 57 /// Buffer for incoming data. 58 boost::array<char, 8192> buffer_; 59 60 /// The incoming request. 61 request request_; 62 63 /// The parser for the incoming request. 64 request_parser request_parser_; 65 66 /// The reply to be sent back to the client. 67 reply reply_; 68 }; 69 70 typedef boost::shared_ptr<connection> connection_ptr; 71 72 } // namespace server2 73 } // namespace http 74 75 #endif // HTTP_SERVER2_CONNECTION_HPP 76