RESTinio
request_handler.hpp
Go to the documentation of this file.
1 /*
2  restinio
3 */
4 
9 #pragma once
10 
11 #include <functional>
12 #include <iosfwd>
13 
14 #include <restinio/exception.hpp>
19 
20 namespace restinio
21 {
22 
23 class request_t;
24 
25 namespace impl
26 {
27 
29 access_req_connection( request_t & ) noexcept;
30 
31 } /* namespace impl */
32 
33 //
34 // request_t
35 //
36 
38 
42 class request_t final
43  : public std::enable_shared_from_this< request_t >
44 {
47 
48  public:
50 
57  std::string body,
58  impl::connection_handle_t connection,
60  : request_t{
61  request_id,
62  std::move( header ),
63  std::move( body ),
65  std::move( connection ),
67  }
68  {}
69 
71 
77  std::string body,
79  impl::connection_handle_t connection,
82  , m_header{ std::move( header ) }
83  , m_body{ std::move( body ) }
85  , m_connection{ std::move( connection ) }
86  , m_connection_id{ m_connection->connection_id() }
88  {}
89 
91  const http_request_header_t &
92  header() const noexcept
93  {
94  return m_header;
95  }
96 
98  const std::string &
99  body() const noexcept
100  {
101  return m_body;
102  }
103 
104  template < typename Output = restinio_controlled_output_t >
105  auto
107  {
109 
111  status_line,
113  m_request_id,
115  }
116 
118  auto request_id() const noexcept { return m_request_id; }
119 
122 
124  const endpoint_t & remote_endpoint() const noexcept { return m_remote_endpoint; }
125 
127 
136  {
137  return m_chunked_input_info.get();
138  }
139 
140  private:
141  void
143  {
144  if( !m_connection )
145  {
146  throw exception_t{ "connection already moved" };
147  }
148  }
149 
152  const std::string m_body;
153 
155 
162 
165 
168 };
169 
170 inline std::ostream &
171 operator << ( std::ostream & o, const request_t & req )
172 {
173  o << "{req_id: " << req.request_id() << ", "
174  "conn_id: " << req.connection_id() << ", "
175  "path: " << req.header().path() << ", "
176  "query: " << req.header().query() << "}";
177 
178  return o;
179 }
180 
182 using request_handle_t = std::shared_ptr< request_t >;
183 
184 //
185 // default_request_handler_t
186 //
187 
189  std::function< request_handling_status_t ( request_handle_t ) >;
190 
191 namespace impl
192 {
193 
194 inline connection_handle_t &
196 {
197  return req.m_connection;
198 }
199 
200 } /* namespace impl */
201 
202 
203 } /* namespace restinio */
restinio::exception_t
Exception class for all exceptions thrown by RESTinio.
Definition: exception.hpp:26
restinio::request_t::chunked_input_info
nullable_pointer_t< const chunked_input_info_t > chunked_input_info() const noexcept
Get optional info about chunked input.
Definition: request_handler.hpp:135
restinio::operator<<
std::ostream & operator<<(std::ostream &o, response_parts_attr_t attr)
Definition: common_types.hpp:63
restinio::http_header_common_t::should_keep_alive
bool should_keep_alive() const noexcept
Definition: http_headers.hpp:1611
nonstd::optional_lite::std11::move
T & move(T &t)
Definition: optional.hpp:421
restinio::endpoint_t
asio_ns::ip::tcp::endpoint endpoint_t
An alias for endpoint type from Asio.
Definition: common_types.hpp:158
restinio::request_t::check_connection
void check_connection()
Definition: request_handler.hpp:142
restinio::status_ok
http_status_line_t status_ok()
Definition: http_headers.hpp:2175
connection_base.hpp
restinio::connection_id_t
std::uint64_t connection_id_t
Type for ID of connection.
Definition: common_types.hpp:155
restinio::http_status_line_t
HTTP response header status line.
Definition: http_headers.hpp:2124
restinio::request_t::remote_endpoint
const endpoint_t & remote_endpoint() const noexcept
Get the remote endpoint of the underlying connection.
Definition: request_handler.hpp:124
restinio::request_t::request_t
request_t(request_id_t request_id, http_request_header_t header, std::string body, chunked_input_info_unique_ptr_t chunked_input_info, impl::connection_handle_t connection, endpoint_t remote_endpoint)
New-format initializing constructor.
Definition: request_handler.hpp:74
restinio::request_t::body
const std::string & body() const noexcept
Get request body.
Definition: request_handler.hpp:99
restinio::http_request_header_t::query
string_view_t query() const noexcept
Get the query part of the request URL.
Definition: http_headers.hpp:1924
restinio::request_t::request_t
request_t(request_id_t request_id, http_request_header_t header, std::string body, impl::connection_handle_t connection, endpoint_t remote_endpoint)
Old-format initializing constructor.
Definition: request_handler.hpp:54
restinio::request_handling_status_t
request_handling_status_t
Request handling status.
Definition: common_types.hpp:26
restinio::request_t::m_connection_id
const connection_id_t m_connection_id
Definition: request_handler.hpp:164
restinio::request_t::connection_id
connection_id_t connection_id() const noexcept
Get connection id.
Definition: request_handler.hpp:121
chunked_input_info.hpp
Information about chunked encoded body.
message_builders.hpp
restinio::http_request_header_t::path
string_view_t path() const noexcept
Request URL-structure.
Definition: http_headers.hpp:1913
restinio::request_t::m_chunked_input_info
const chunked_input_info_unique_ptr_t m_chunked_input_info
Optional description for chunked-encoding.
Definition: request_handler.hpp:161
restinio::request_t::header
const http_request_header_t & header() const noexcept
Get request header.
Definition: request_handler.hpp:92
restinio::request_t::m_connection
impl::connection_handle_t m_connection
Definition: request_handler.hpp:163
restinio::nullable_pointer_t
T * nullable_pointer_t
Type for pointer that can be nullptr.
Definition: common_types.hpp:135
restinio
Definition: asio_include.hpp:21
restinio::request_t::m_body
const std::string m_body
Definition: request_handler.hpp:152
restinio::default_request_handler_t
std::function< request_handling_status_t(request_handle_t) > default_request_handler_t
Definition: request_handler.hpp:189
restinio::request_t::m_remote_endpoint
const endpoint_t m_remote_endpoint
Remote endpoint for underlying connection.
Definition: request_handler.hpp:167
exception.hpp
restinio::impl::access_req_connection
connection_handle_t & access_req_connection(request_t &) noexcept
Definition: request_handler.hpp:195
restinio::request_t::m_request_id
const request_id_t m_request_id
Definition: request_handler.hpp:150
restinio::request_id_t
unsigned int request_id_t
Request id in scope of single connection.
Definition: common_types.hpp:51
restinio::response_builder_t
Forbid arbitrary response_builder_t instantiations.
Definition: message_builders.hpp:243
restinio::request_handle_t
std::shared_ptr< request_t > request_handle_t
Request handler, that is the type for calling request handlers.
Definition: request_handler.hpp:182
restinio::chunked_input_info_unique_ptr_t
std::unique_ptr< chunked_input_info_t > chunked_input_info_unique_ptr_t
Alias of unique_ptr for chunked_input_info.
Definition: chunked_input_info.hpp:230
restinio::http_request_header_t
Req header.
Definition: http_headers.hpp:1859
restinio::impl::connection_handle_t
std::shared_ptr< connection_base_t > connection_handle_t
Alias for http connection handle.
Definition: connection_base.hpp:47
restinio::request_t::m_header
const http_request_header_t m_header
Definition: request_handler.hpp:151
http_headers.hpp
restinio::request_t::create_response
auto create_response(http_status_line_t status_line=status_ok())
Definition: request_handler.hpp:106
restinio::request_t
HTTP Request data.
Definition: request_handler.hpp:44
const
#define const
Definition: zconf.h:230
restinio::request_t::request_id
auto request_id() const noexcept
Get request id.
Definition: request_handler.hpp:118