RESTinio
connection_settings.hpp
Go to the documentation of this file.
1 /*
2  restinio
3 */
4 
5 /*!
6  Connection settings.
7 */
8 
9 #pragma once
10 
11 #include <http_parser.h>
12 
13 #include <restinio/connection_state_listener.hpp>
14 #include <restinio/incoming_http_msg_limits.hpp>
15 
16 #include <restinio/utils/suppress_exceptions.hpp>
17 
18 #include <memory>
19 #include <chrono>
20 
21 namespace restinio
22 {
23 
24 namespace impl
25 {
26 
28 {
29 
30 /*!
31  * @brief A class for holding actual state listener.
32  *
33  * This class holds shared pointer to actual state listener object and
34  * provides actual call_state_listener() and
35  * call_state_listener_suppressing_exceptions() implementations.
36  *
37  * @since v.0.5.1
38  */
39 template< typename Listener >
41 {
43 
44  template< typename Settings >
46  const Settings & settings )
48  {}
49 
50  template< typename Lambda >
51  void
52  call_state_listener( Lambda && lambda ) const
53  {
55  }
56 
57  template< typename Lambda >
58  void
60  Lambda && lambda ) const noexcept
61  {
64  } );
65  }
66 };
67 
68 /*!
69  * @brief A specialization of state_listener_holder for case of
70  * noop_listener.
71  *
72  * This class doesn't hold anything and doesn't do anything.
73  *
74  * @since v.0.5.1
75  */
76 template<>
78 {
79  template< typename Settings >
80  state_listener_holder_t( const Settings & ) { /* nothing to do */ }
81 
82  template< typename Lambda >
83  void
84  call_state_listener( Lambda && /*lambda*/ ) const noexcept
85  {
86  /* nothing to do */
87  }
88 
89  template< typename Lambda >
90  void
92  Lambda && /*lambda*/ ) const noexcept
93  {
94  /* nothing to do */
95  }
96 };
97 
98 } /* namespace connection_settings_details */
99 
100 //
101 // connection_settings_t
102 //
103 
104 //! Parameters shared between connections.
105 /*!
106  Each connection has access to common params and
107  server-agent throught this object.
108 */
109 template < typename Traits >
113  typename Traits::connection_state_listener_t >
114 {
115  using timer_manager_t = typename Traits::timer_manager_t;
117 
119 
120  using logger_t = typename Traits::logger_t;
121 
122  using connection_state_listener_holder_t =
124  typename Traits::connection_state_listener_t >;
125 
126  /*!
127  * @brief An alias for shared-pointer to extra-data-factory.
128  *
129  * @since v.0.6.13
130  */
133 
134  connection_settings_t( const connection_settings_t & ) = delete;
135  connection_settings_t( const connection_settings_t && ) = delete;
136  connection_settings_t & operator = ( const connection_settings_t & ) = delete;
138 
139  template < typename Settings >
141  Settings && settings,
142  http_parser_settings parser_settings,
143  timer_manager_handle_t timer_manager )
156  , m_logger{ settings.logger() }
159  {
160  if( !m_timer_manager )
161  throw exception_t{ "timer manager not set" };
162 
163  if( !m_extra_data_factory )
164  throw exception_t{ "extra_data_factory is nullptr" };
165  }
166 
167  //! Request handler factory.
169 
170  //! Parser settings.
171  /*!
172  Parsing settings are common for each connection.
173  */
175 
176  //! Params from server_settings_t.
177  //! \{
179 
180  /*!
181  * @since v.0.6.12
182  */
184 
187 
190 
193 
195 
197  //! \}
198 
199  //! Create new timer guard.
200  auto
202  {
203  return m_timer_manager->create_timer_guard();
204  }
205 
206  /*!
207  * @brief Get a reference to extra-data-factory object.
208  *
209  * @since v.0.6.13
210  */
212  auto &
213  extra_data_factory() const noexcept
214  {
215  return *m_extra_data_factory;
216  }
217 
218 private:
219  //! Timer factory for timout guards.
221 
222  /*!
223  * @brief A factory for instances of extra-data incorporated into a request.
224  *
225  * @attention
226  * This value is expected to be not-null.
227  *
228  * @since v.0.6.13
229  */
231 };
232 
233 template < typename Traits >
236 
237 } /* namespace impl */
238 
239 } /* namespace restinio */
connection_settings_t(Settings &&settings, http_parser_settings parser_settings, timer_manager_handle_t timer_manager)
extra_data_factory_handle_t m_extra_data_factory
A factory for instances of extra-data incorporated into a request.
std::unique_ptr< request_handler_t > m_request_handler
Request handler factory.
RESTINIO_NODISCARD auto & extra_data_factory() const noexcept
Get a reference to extra-data-factory object.
std::chrono::steady_clock::duration m_write_http_response_timelimit
std::chrono::steady_clock::duration m_handle_request_timeout
connection_settings_t & operator=(connection_settings_t &&)=delete
connection_settings_t(const connection_settings_t &&)=delete
const std::unique_ptr< logger_t > m_logger
connection_settings_t(const connection_settings_t &)=delete
RESTINIO_NODISCARD char to_lower_case(unsigned char ch)
std::size_t m_buffer_size
Params from server_settings_t.
connection_settings_t & operator=(const connection_settings_t &)=delete
std::chrono::steady_clock::duration m_read_next_http_message_timelimit
auto create_timer_guard()
Create new timer guard.
const incoming_http_msg_limits_t m_incoming_http_msg_limits
const http_parser_settings m_parser_settings
Parser settings.
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, optional_t< Value_Type > >::type opt_value(const Parameter_Container &params, string_view_t key)
Gets the value of a parameter specified by key wrapped in optional_t<Value_Type> if parameter exists ...
Definition: value_or.hpp:64