RESTinio
connection_settings.hpp
Go to the documentation of this file.
1 /*
2  restinio
3 */
4 
9 #pragma once
10 
11 #include <http_parser.h>
12 
15 
17 
18 #include <memory>
19 #include <chrono>
20 
21 namespace restinio
22 {
23 
24 namespace impl
25 {
26 
27 namespace connection_settings_details
28 {
29 
39 template< typename Listener >
41 {
42  std::shared_ptr< Listener > m_connection_state_listener;
43 
44  template< typename Settings >
46  const Settings & settings )
47  : m_connection_state_listener{ settings.connection_state_listener() }
48  {}
49 
50  template< typename Lambda >
51  void
52  call_state_listener( Lambda && lambda ) const
53  {
54  m_connection_state_listener->state_changed( lambda() );
55  }
56 
57  template< typename Lambda >
58  void
60  Lambda && lambda ) const noexcept
61  {
63  m_connection_state_listener->state_changed( lambda() );
64  } );
65  }
66 };
67 
76 template<>
77 struct state_listener_holder_t< connection_state::noop_listener_t >
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 
105 
109 template < typename Traits >
111  : public std::enable_shared_from_this< connection_settings_t< Traits > >
113  typename Traits::connection_state_listener_t >
114 {
115  using timer_manager_t = typename Traits::timer_manager_t;
116  using timer_manager_handle_t = std::shared_ptr< timer_manager_t >;
117  using request_handler_t = typename Traits::request_handler_t;
118  using logger_t = typename Traits::logger_t;
119 
122  typename Traits::connection_state_listener_t >;
123 
128 
129  template < typename Settings >
131  Settings && settings,
132  http_parser_settings parser_settings,
133  timer_manager_handle_t timer_manager )
135  , m_request_handler{ settings.request_handler() }
136  , m_parser_settings{ parser_settings }
137  , m_buffer_size{ settings.buffer_size() }
138  , m_incoming_http_msg_limits{ settings.incoming_http_msg_limits() }
140  settings.read_next_http_message_timelimit() }
142  settings.write_http_response_timelimit() }
144  settings.handle_request_timeout() }
145  , m_max_pipelined_requests{ settings.max_pipelined_requests() }
146  , m_logger{ settings.logger() }
147  , m_timer_manager{ std::move( timer_manager ) }
148  {
149  if( !m_timer_manager )
150  throw exception_t{ "timer manager not set" };
151  }
152 
154  std::unique_ptr< request_handler_t > m_request_handler;
155 
157 
160  const http_parser_settings m_parser_settings;
161 
164  std::size_t m_buffer_size;
165 
170 
171  std::chrono::steady_clock::duration
172  m_read_next_http_message_timelimit{ std::chrono::seconds( 60 ) };
173 
174  std::chrono::steady_clock::duration
175  m_write_http_response_timelimit{ std::chrono::seconds( 5 ) };
176 
177  std::chrono::steady_clock::duration
178  m_handle_request_timeout{ std::chrono::seconds( 10 ) };
179 
181 
182  const std::unique_ptr< logger_t > m_logger;
184 
186  auto
188  {
189  return m_timer_manager->create_timer_guard();
190  }
191 
192 private:
195 };
196 
197 template < typename Traits >
199  std::shared_ptr< connection_settings_t< Traits > >;
200 
201 } /* namespace impl */
202 
203 } /* namespace restinio */
204 
restinio::impl::connection_settings_t::m_logger
const std::unique_ptr< logger_t > m_logger
Definition: connection_settings.hpp:182
nonstd::optional_lite::std11::move
T & move(T &t)
Definition: optional.hpp:421
restinio::impl::connection_settings_t::m_write_http_response_timelimit
std::chrono::steady_clock::duration m_write_http_response_timelimit
Definition: connection_settings.hpp:175
restinio::impl::connection_settings_t::connection_settings_t
connection_settings_t(const connection_settings_t &&)=delete
restinio::impl::connection_settings_details::state_listener_holder_t::call_state_listener
void call_state_listener(Lambda &&lambda) const
Definition: connection_settings.hpp:52
connection_state_listener.hpp
Stuff related to connection state listeners.
restinio::utils::suppress_exceptions_quietly
void suppress_exceptions_quietly(Lambda &&lambda) noexcept
Helper function for execution a block of code with suppression of any exceptions raised inside that b...
Definition: suppress_exceptions.hpp:133
restinio::impl::connection_settings_t::m_parser_settings
const http_parser_settings m_parser_settings
Parser settings.
Definition: connection_settings.hpp:160
restinio::impl::connection_settings_t::m_timer_manager
timer_manager_handle_t m_timer_manager
Timer factory for timout guards.
Definition: connection_settings.hpp:194
restinio::incoming_http_msg_limits_t
A type of holder of limits related to an incoming HTTP message.
Definition: incoming_http_msg_limits.hpp:69
restinio::impl::connection_settings_details::state_listener_holder_t::call_state_listener_suppressing_exceptions
void call_state_listener_suppressing_exceptions(Lambda &&lambda) const noexcept
Definition: connection_settings.hpp:59
restinio::impl::connection_settings_details::state_listener_holder_t
A class for holding actual state listener.
Definition: connection_settings.hpp:41
incoming_http_msg_limits.hpp
Stuff related to limits of an incoming HTTP message.
restinio::impl::connection_settings_t::m_max_pipelined_requests
std::size_t m_max_pipelined_requests
Definition: connection_settings.hpp:180
restinio::impl::connection_settings_handle_t
std::shared_ptr< connection_settings_t< Traits > > connection_settings_handle_t
Definition: connection_settings.hpp:199
restinio::impl::connection_settings_t::m_request_handler
std::unique_ptr< request_handler_t > m_request_handler
Request handler factory.
Definition: connection_settings.hpp:154
restinio::impl::connection_settings_details::state_listener_holder_t< connection_state::noop_listener_t >::call_state_listener_suppressing_exceptions
void call_state_listener_suppressing_exceptions(Lambda &&) const noexcept
Definition: connection_settings.hpp:91
restinio::impl::connection_settings_t::m_read_next_http_message_timelimit
std::chrono::steady_clock::duration m_read_next_http_message_timelimit
Definition: connection_settings.hpp:172
restinio::impl::connection_settings_t::timer_manager_t
typename Traits::timer_manager_t timer_manager_t
Definition: connection_settings.hpp:115
restinio::impl::connection_settings_t::timer_manager_handle_t
std::shared_ptr< timer_manager_t > timer_manager_handle_t
Definition: connection_settings.hpp:116
suppress_exceptions.hpp
Utilities for suppressing exceptions from some code block.
restinio
Definition: asio_include.hpp:21
restinio::impl::connection_settings_details::state_listener_holder_t::m_connection_state_listener
std::shared_ptr< Listener > m_connection_state_listener
Definition: connection_settings.hpp:42
restinio::impl::connection_settings_t::connection_settings_t
connection_settings_t(Settings &&settings, http_parser_settings parser_settings, timer_manager_handle_t timer_manager)
Definition: connection_settings.hpp:130
restinio::impl::connection_settings_details::state_listener_holder_t::state_listener_holder_t
state_listener_holder_t(const Settings &settings)
Definition: connection_settings.hpp:45
restinio::impl::connection_settings_t
Parameters shared between connections.
Definition: connection_settings.hpp:114
restinio::impl::connection_settings_t::request_handler_t
typename Traits::request_handler_t request_handler_t
Definition: connection_settings.hpp:117
restinio::impl::connection_settings_t::m_handle_request_timeout
std::chrono::steady_clock::duration m_handle_request_timeout
Definition: connection_settings.hpp:178
restinio::impl::connection_settings_details::state_listener_holder_t< connection_state::noop_listener_t >::state_listener_holder_t
state_listener_holder_t(const Settings &)
Definition: connection_settings.hpp:80
restinio::impl::connection_settings_t::m_incoming_http_msg_limits
const incoming_http_msg_limits_t m_incoming_http_msg_limits
Definition: connection_settings.hpp:169
restinio::impl::connection_settings_t::m_buffer_size
std::size_t m_buffer_size
Params from server_settings_t.
Definition: connection_settings.hpp:164
restinio::impl::connection_settings_t::connection_settings_t
connection_settings_t(const connection_settings_t &)=delete
restinio::impl::connection_settings_details::state_listener_holder_t< connection_state::noop_listener_t >::call_state_listener
void call_state_listener(Lambda &&) const noexcept
Definition: connection_settings.hpp:84
restinio::impl::connection_settings_t::create_timer_guard
auto create_timer_guard()
Create new timer guard.
Definition: connection_settings.hpp:187
restinio::impl::connection_settings_t::logger_t
typename Traits::logger_t logger_t
Definition: connection_settings.hpp:118
const
#define const
Definition: zconf.h:230
restinio::impl::connection_settings_t::operator=
connection_settings_t & operator=(const connection_settings_t &)=delete