11 #include <restinio/traits.hpp> 12 #include <restinio/impl/tls_socket.hpp> 91 return m_tls_socket.asio_ssl_stream().native_handle();
99 template<
typename Lambda >
107 template<
typename Lambda >
112 throw exception_t{
"an attempt to call inspect_tls for " 113 "non-TLS-connection" };
118 template<
typename Lambda,
typename T >
160 template <
typename Connection,
typename Start_Read_CB,
typename Failed_CB >
163 tls_socket_t & socket,
165 Start_Read_CB start_read_cb,
166 Failed_CB failed_cb )
188 template <
typename Settings >
189 class socket_type_dependent_settings_t< Settings, tls_socket_t >
197 socket_type_dependent_settings_t && ) =
default;
202 asio_ns::ssl::context context ) &
204 m_tls_context = std::make_shared< asio_ns::ssl::context >(
205 std::move( context ) );
206 return upcast_reference();
212 asio_ns::ssl::context context ) &&
214 return std::move(
this->tls_context( std::move( context ) ) );
248 std::shared_ptr< asio_ns::ssl::context > shared_context ) &
250 m_tls_context = std::move( shared_context );
251 return upcast_reference();
289 std::shared_ptr< asio_ns::ssl::context > shared_context ) &&
291 return std::move(
this->tls_context( std::move(shared_context) ) );
304 return std::move(m_tls_context);
311 return static_cast< Settings & >( *
this );
315 std::make_shared< asio_ns::ssl::context >(
316 asio_ns::ssl::context::sslv23 )
337 class socket_supplier_t< tls_socket_t >
340 template <
typename Settings >
343 asio_ns::io_context & io_context )
344 : m_tls_context{ settings.giveaway_tls_context() }
345 , m_io_context{ io_context }
347 m_sockets.reserve( settings.concurrent_accepts_count() );
349 while( m_sockets.size() < settings.concurrent_accepts_count() )
351 m_sockets.emplace_back( m_io_context, m_tls_context );
362 return m_sockets.at( idx );
370 tls_socket_t res{ m_io_context, m_tls_context };
371 std::swap( res, m_sockets.at( idx ) );
380 return m_sockets.size();
std::shared_ptr< asio_ns::ssl::context > m_tls_context
tls_socket_t & m_tls_socket
std::shared_ptr< asio_ns::ssl::context > giveaway_tls_context()
Get away the TLS-context from settings.
tls_socket_t & socket(std::size_t idx)
Settings & upcast_reference()
tls_socket_t * make_tls_socket_pointer_for_state_listener(tls_socket_t &socket) noexcept
Accessor to TLS-specific information related to a connection.
socket_type_dependent_settings_t()=default
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, std::optional< Value_Type > >::type opt_value(const Parameter_Container ¶ms, string_view_t key)
Gets the value of a parameter specified by key wrapped in std::optional<Value_Type> if parameter exis...
Settings & tls_context(std::shared_ptr< asio_ns::ssl::context > shared_context) &
Setup a shared TLS-context for server's settings.
Settings && tls_context(std::shared_ptr< asio_ns::ssl::context > shared_context) &&
Setup a shared TLS-context for server's settings.
socket_type_dependent_settings_t(socket_type_dependent_settings_t &&)=default
void prepare_connection_and_start_read(tls_socket_t &socket, Connection &con, Start_Read_CB start_read_cb, Failed_CB failed_cb)
Customizes connection init routine with an additional step: perform handshake and only then start rea...
~socket_type_dependent_settings_t()=default
socket_supplier_t(Settings &settings, asio_ns::io_context &io_context)
tls_accessor_t(tls_socket_t &tls_socket)
auto concurrent_accept_sockets_count() const
The number of sockets that can be used for cuncurrent accept operations.
std::vector< tls_socket_t > m_sockets
auto native_handle() const noexcept
Get the access to native handle behind Asio's ssl_stream.
asio_ns::io_context & m_io_context
std::shared_ptr< asio_ns::ssl::context > m_tls_context
auto move_socket(std::size_t idx)
virtual ~socket_supplier_t()=default