RESTinio
Loading...
Searching...
No Matches
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 <llhttp.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
21namespace restinio
22{
23
24namespace 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 */
39template< 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 {
62 restinio::utils::suppress_exceptions_quietly( [&] {
63 m_connection_state_listener->state_changed( lambda() );
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 */
76template<>
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*/
109template < 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
119
120 using logger_t = typename Traits::logger_t;
121
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 */
132 std::shared_ptr< typename Traits::extra_data_factory_t >;
133
138
139 template < typename Settings >
141 Settings && settings,
142 llhttp_settings_t parser_settings,
143 timer_manager_handle_t timer_manager )
146 , m_parser_settings{ parser_settings }
147 , m_buffer_size{ settings.buffer_size() }
148 , m_incoming_http_msg_limits{ settings.incoming_http_msg_limits() }
155 , m_max_pipelined_requests{ settings.max_pipelined_requests() }
157 , m_timer_manager{ std::move( timer_manager ) }
158 , m_extra_data_factory{ settings.giveaway_extra_data_factory() }
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 */
174 const llhttp_settings_t m_parser_settings;
175
176 //! Params from server_settings_t.
177 //! \{
178 std::size_t m_buffer_size;
179
180 /*!
181 * @since v.0.6.12
182 */
184
185 std::chrono::steady_clock::duration
187
188 std::chrono::steady_clock::duration
190
191 std::chrono::steady_clock::duration
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 */
211 [[nodiscard]]
212 auto &
213 extra_data_factory() const noexcept
214 {
215 return *m_extra_data_factory;
216 }
217
218private:
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
233template < typename Traits >
235 std::shared_ptr< connection_settings_t< Traits > >;
236
237} /* namespace impl */
238
239} /* namespace restinio */
A type of holder of limits related to an incoming HTTP message.
std::shared_ptr< connection_settings_t< Traits > > connection_settings_handle_t
std::shared_ptr< typename Traits::extra_data_factory_t > extra_data_factory_handle_t
An alias for shared-pointer to extra-data-factory.
std::size_t m_buffer_size
Params from server_settings_t.
const llhttp_settings_t m_parser_settings
Parser settings.
connection_settings_details::state_listener_holder_t< typename Traits::connection_state_listener_t > connection_state_listener_holder_t
request_handler_type_from_traits_t< Traits > request_handler_t
connection_settings_t & operator=(const connection_settings_t &)=delete
timer_manager_handle_t m_timer_manager
Timer factory for timout guards.
std::chrono::steady_clock::duration m_handle_request_timeout
connection_settings_t(Settings &&settings, llhttp_settings_t parser_settings, timer_manager_handle_t timer_manager)
std::shared_ptr< timer_manager_t > timer_manager_handle_t
std::unique_ptr< request_handler_t > m_request_handler
Request handler factory.
connection_settings_t & operator=(connection_settings_t &&)=delete
connection_settings_t(const connection_settings_t &)=delete
auto & extra_data_factory() const noexcept
Get a reference to extra-data-factory object.
const std::unique_ptr< logger_t > m_logger
connection_settings_t(const connection_settings_t &&)=delete
typename Traits::timer_manager_t timer_manager_t
extra_data_factory_handle_t m_extra_data_factory
A factory for instances of extra-data incorporated into a request.
std::chrono::steady_clock::duration m_write_http_response_timelimit
const incoming_http_msg_limits_t m_incoming_http_msg_limits
std::chrono::steady_clock::duration m_read_next_http_message_timelimit
auto create_timer_guard()
Create new timer guard.