]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/asio/example/cpp11/http/server/connection.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / asio / example / cpp11 / http / server / connection.hpp
1 //
2 // connection.hpp
3 // ~~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2019 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_CONNECTION_HPP
12 #define HTTP_CONNECTION_HPP
13
14 #include <array>
15 #include <memory>
16 #include <boost/asio.hpp>
17 #include "reply.hpp"
18 #include "request.hpp"
19 #include "request_handler.hpp"
20 #include "request_parser.hpp"
21
22 namespace http {
23 namespace server {
24
25 class connection_manager;
26
27 /// Represents a single connection from a client.
28 class connection
29 : public std::enable_shared_from_this<connection>
30 {
31 public:
32 connection(const connection&) = delete;
33 connection& operator=(const connection&) = delete;
34
35 /// Construct a connection with the given socket.
36 explicit connection(boost::asio::ip::tcp::socket socket,
37 connection_manager& manager, request_handler& handler);
38
39 /// Start the first asynchronous operation for the connection.
40 void start();
41
42 /// Stop all asynchronous operations associated with the connection.
43 void stop();
44
45 private:
46 /// Perform an asynchronous read operation.
47 void do_read();
48
49 /// Perform an asynchronous write operation.
50 void do_write();
51
52 /// Socket for the connection.
53 boost::asio::ip::tcp::socket socket_;
54
55 /// The manager for this connection.
56 connection_manager& connection_manager_;
57
58 /// The handler used to process the incoming request.
59 request_handler& request_handler_;
60
61 /// Buffer for incoming data.
62 std::array<char, 8192> buffer_;
63
64 /// The incoming request.
65 request request_;
66
67 /// The parser for the incoming request.
68 request_parser request_parser_;
69
70 /// The reply to be sent back to the client.
71 reply reply_;
72 };
73
74 typedef std::shared_ptr<connection> connection_ptr;
75
76 } // namespace server
77 } // namespace http
78
79 #endif // HTTP_CONNECTION_HPP