15 #include <restinio/asio_include.hpp> 17 #include <restinio/exception.hpp> 18 #include <restinio/request_handler.hpp> 19 #include <restinio/traits.hpp> 28 template <
typename Object >
32 return std::unique_ptr< Object >{};
35 template <
typename Object >
39 return std::make_unique< Object >();
43 template <
typename Object >
47 return std::shared_ptr< Object >{};
50 template <
typename Object >
54 return std::make_shared< Object >();
64 template <
typename Object>
68 typename std::is_default_constructible< Object >::type tag;
69 return details::create_default_unique_object_instance< Object >( tag );
86 template <
typename Object>
108 template <
typename Object >
128 template <
typename Object >
189 template<
typename Option >
196 template<
typename Option >
198 set_option(
const Option & option, asio_ns::error_code & ec )
203 template<
typename Option >
210 template<
typename Option >
255 template<
typename Option >
262 template<
typename Option >
269 template<
typename Option >
276 template<
typename Option >
318 template<
typename Listener >
324 "Listener::state_changed() method should be noexcept" );
338 throw exception_t{
"connection state listener is not specified" };
374 template<
typename Ip_Blocker >
380 "Ip_Blocker::inspect() method should be noexcept" );
387 "Ip_Blocker::inspect() should return " 388 "restinio::ip_blocker::inspection_result_t" );
402 throw exception_t{
"IP-blocker is not specified" };
441 template<
typename Derived,
typename Traits>
453 typename Traits::connection_state_listener_t
454 >::has_actual_connection_state_listener;
458 has_actual_ip_blocker;
462 std::uint16_t port = 8080,
651 using request_handler_t =
typename Traits::request_handler_t;
660 template<
typename... Params >
670 template<
typename... Params >
682 "request handler must be set" );
689 using timer_manager_t =
typename Traits::timer_manager_t;
690 using timer_factory_t =
typename timer_manager_t::factory_t;
692 template<
typename... Params >
701 template<
typename... Params >
713 "timer manager is not set" );
719 using logger_t =
typename Traits::logger_t;
721 template<
typename... Params >
730 template<
typename... Params >
742 "logger must be set" );
752 throw exception_t{
"acceptor options setter cannot be empty" };
770 "acceptor options setter must be set" );
780 throw exception_t{
"socket options setter cannot be empty" };
798 "socket options setter must be set" );
811 if( 0 ==
n || 1024 <
n )
814 "invalid value for number of cuncurrent connects: {}",
866 template<
typename Func >
874 template<
typename Func >
920 std::shared_ptr<
typename Traits::connection_state_listener_t > listener ) &
924 "connection_state_listener(listener) can't be used " 925 "for the default connection_state::noop_listener_t" );
964 std::shared_ptr<
typename Traits::connection_state_listener_t > listener ) &&
983 "connection_state_listener() can't be used " 984 "for the default connection_state::noop_listener_t" );
1037 std::shared_ptr<
typename Traits::ip_blocker_t > blocker ) &
1041 "ip_blocker(blocker) can't be used " 1042 "for the default ip_blocker::noop_ip_blocker_t" );
1082 std::shared_ptr<
typename Traits::ip_blocker_t > blocker ) &&
1100 "ip_blocker() can't be used " 1101 "for the default ip_blocker::noop_ip_blocker_t" );
1124 return static_cast<
Derived &>(*
this);
1127 template<
typename Target,
typename... Params >
1138 template<
typename Target,
typename... Params >
1210 using base_type_t::base_type_t;
1213 template <
typename Traits,
typename Configurator >
1219 configurator( result );
std::unique_ptr< logger_t > logger()
Derived && timer_manager(Params &&... params) &&
Derived & buffer_size(std::size_t s) &
Size of buffer for io operations.
static constexpr bool has_actual_ip_blocker
Basic container for http_server settings.
auto create_default_unique_object_instance(std::true_type)
Derived & write_http_response_timelimit(std::chrono::steady_clock::duration d) &
A period of time wait for response to be written to socket.
std::size_t concurrent_accepts_count() const
Derived && write_http_response_timelimit(std::chrono::steady_clock::duration d) &&
std::unique_ptr< logger_t > m_logger
Logger.
std::unique_ptr< request_handler_t > m_request_handler
Request handler.
static constexpr bool has_actual_connection_state_listener
void get_option(Option &option, asio_ns::error_code &ec)
std::unique_ptr< acceptor_options_setter_t > m_acceptor_options_setter
Acceptor options setter.
Derived & ip_blocker(std::shared_ptr< typename Traits::ip_blocker_t > blocker) &
Setter for IP-blocker.
Derived && concurrent_accepts_count(std::size_t n) &&
void set_option(const Option &option, asio_ns::error_code &ec)
void check_valid_ip_blocker_pointer() const
Checks that pointer to IP-blocker is not null.
void check_valid_connection_state_listener_pointer() const
Checks that pointer to state listener is not null.
Derived & request_handler(std::unique_ptr< request_handler_t > handler) &
Derived && separate_accept_and_create_connect(bool do_separate) &&
Derived && address(std::string addr) &&
Derived & logger(Params &&... params) &
std::size_t m_concurrent_accepts_count
Derived & concurrent_accepts_count(std::size_t n) &
Max number of running concurrent accepts.
acceptor_options_t(asio_ns::ip::tcp::acceptor &acceptor)
static constexpr bool has_actual_connection_state_listener
Derived && cleanup_func(Func &&func) &&
std::size_t max_pipelined_requests() const
std::unique_ptr< request_handler_t > request_handler()
std::unique_ptr< timer_factory_t > timer_factory()
auto create_default_unique_object_instance()
Default instantiation for a specific type.
std::shared_ptr< Ip_Blocker > m_ip_blocker
Derived && acceptor_options_setter(acceptor_options_setter_t aos) &&
std::size_t buffer_size() const
std::uint16_t m_port
Server endpoint.
Derived & cleanup_func(Func &&func) &
Cleanup function.
Derived & acceptor_options_setter(acceptor_options_setter_t aos) &
Acceptor options setter.
std::size_t m_buffer_size
Size of buffer for io operations.
auto create_default_shared_object_instance(std::true_type)
Derived && connection_state_listener(std::shared_ptr< typename Traits::connection_state_listener_t > listener) &&
Setter for connection state listener.
std::unique_ptr< socket_options_setter_t > m_socket_options_setter
Socket options setter.
Derived & set_shared_instance(std::shared_ptr< Target > &t, Params &&... params)
Derived && read_next_http_message_timelimit(std::chrono::steady_clock::duration d) &&
A fluent style interface for setting http server params.
std::chrono::steady_clock::duration m_write_http_response_timelimit
Derived & separate_accept_and_create_connect(bool do_separate) &
Do separate an accept operation and connection instantiation.
bool separate_accept_and_create_connect() const
const std::string & address() const
Derived & protocol(asio_ns::ip::tcp p) &
const std::shared_ptr< typename Traits::ip_blocker_t > & ip_blocker() const noexcept
Get reference to IP-blocker.
Derived & timer_manager(Params &&... params) &
Derived && max_pipelined_requests(std::size_t mpr) &&
void ensure_valid_connection_state_listener()
Internal method for checking presence of state listener object.
Derived && protocol(asio_ns::ip::tcp p) &&
void ensure_valid_ip_blocker()
Internal method for checking presence of IP-blocker object.
Derived & set_unique_instance(std::unique_ptr< Target > &t, Params &&... params)
Derived & socket_options_setter(socket_options_setter_t sos) &
Socket options setter.
Derived & reference_to_derived()
std::chrono::steady_clock::duration write_http_response_timelimit() const
basic_server_settings_t(std::uint16_t port=8080, asio_ns::ip::tcp protocol=asio_ns::ip::tcp::v4())
Derived && logger(Params &&... params) &&
cleanup_functor_t giveaway_cleanup_func()
void set_option(const Option &option)
API for setting/getting options.
A special class for holding actual connection state listener.
std::uint16_t port() const
Derived & read_next_http_message_timelimit(std::chrono::steady_clock::duration d) &
}
std::chrono::steady_clock::duration m_read_next_http_message_timelimit
Operations timeouts.
auto exec_configurator(Configurator &&configurator)
A special class for holding actual IP-blocker object.
std::size_t m_max_pipelined_requests
Max pipelined requests to receive on single connection.
Derived & handle_request_timeout(std::chrono::steady_clock::duration d) &
A period of time that is given for a handler to create response.
An adapter for setting acceptor options before running server.
std::unique_ptr< socket_options_setter_t > socket_options_setter()
Derived && socket_options_setter(socket_options_setter_t sos) &&
const std::shared_ptr< typename Traits::connection_state_listener_t > & connection_state_listener() const noexcept
Get reference to connection state listener.
Derived && buffer_size(std::size_t s) &&
std::chrono::steady_clock::duration m_handle_request_timeout
Derived & port(std::uint16_t p) &
Server endpoint.
cleanup_functor_t m_cleanup_functor
Optional cleanup functor.
Derived & request_handler(Params &&... params) &
Derived && request_handler(Params &&... params) &&
static constexpr bool has_actual_ip_blocker
Derived && port(std::uint16_t p) &&
asio_ns::ip::tcp m_protocol
bool m_separate_accept_and_create_connect
Do separate an accept operation and connection instantiation.
Derived && ip_blocker(std::shared_ptr< typename Traits::ip_blocker_t > blocker) &&
Setter for IP-blocker.
Derived & max_pipelined_requests(std::size_t mpr) &
Max pipelined requests able to receive on single connection.
std::unique_ptr< acceptor_options_setter_t > acceptor_options_setter()
Derived && handle_request_timeout(std::chrono::steady_clock::duration d) &&
asio_ns::ip::tcp protocol() const
Derived & address(std::string addr) &
asio_ns::ip::tcp::acceptor & m_acceptor
Derived & connection_state_listener(std::shared_ptr< typename Traits::connection_state_listener_t > listener) &
Setter for connection state listener.
std::shared_ptr< Listener > m_connection_state_listener
std::chrono::steady_clock::duration read_next_http_message_timelimit() const
std::unique_ptr< timer_factory_t > m_timer_factory
Timers factory.
void get_option(Option &option)
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 ¶ms, string_view_t key)
Gets the value of a parameter specified by key wrapped in optional_t<Value_Type> if parameter exists ...
std::chrono::steady_clock::duration handle_request_timeout() const