]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // |
2 | // server.hpp | |
3 | // ~~~~~~~~~~ | |
4 | // | |
b32b8144 | 5 | // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
7c673cae FG |
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_SERVER4_SERVER_HPP | |
12 | #define HTTP_SERVER4_SERVER_HPP | |
13 | ||
14 | #include <boost/asio.hpp> | |
15 | #include <string> | |
16 | #include <boost/array.hpp> | |
17 | #include <boost/function.hpp> | |
18 | #include <boost/shared_ptr.hpp> | |
19 | #include "request_parser.hpp" | |
20 | ||
21 | namespace http { | |
22 | namespace server4 { | |
23 | ||
24 | struct request; | |
25 | struct reply; | |
26 | ||
27 | /// The top-level coroutine of the HTTP server. | |
28 | class server : boost::asio::coroutine | |
29 | { | |
30 | public: | |
31 | /// Construct the server to listen on the specified TCP address and port, and | |
32 | /// serve up files from the given directory. | |
b32b8144 | 33 | explicit server(boost::asio::io_context& io_context, |
7c673cae FG |
34 | const std::string& address, const std::string& port, |
35 | boost::function<void(const request&, reply&)> request_handler); | |
36 | ||
37 | /// Perform work associated with the server. | |
38 | void operator()( | |
39 | boost::system::error_code ec = boost::system::error_code(), | |
40 | std::size_t length = 0); | |
41 | ||
42 | private: | |
43 | typedef boost::asio::ip::tcp tcp; | |
44 | ||
45 | /// The user-supplied handler for all incoming requests. | |
46 | boost::function<void(const request&, reply&)> request_handler_; | |
47 | ||
48 | /// Acceptor used to listen for incoming connections. | |
49 | boost::shared_ptr<tcp::acceptor> acceptor_; | |
50 | ||
51 | /// The current connection from a client. | |
52 | boost::shared_ptr<tcp::socket> socket_; | |
53 | ||
54 | /// Buffer for incoming data. | |
55 | boost::shared_ptr<boost::array<char, 8192> > buffer_; | |
56 | ||
57 | /// The incoming request. | |
58 | boost::shared_ptr<request> request_; | |
59 | ||
60 | /// Whether the request is valid or not. | |
61 | boost::tribool valid_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 | boost::shared_ptr<reply> reply_; | |
68 | }; | |
69 | ||
70 | } // namespace server4 | |
71 | } // namespace http | |
72 | ||
73 | #endif // HTTP_SERVER4_SERVER_HPP |