11 #include <restinio/traits.hpp> 12 #include <restinio/impl/tls_socket.hpp> 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 asio_ns::ssl::context result{ std::move( *m_tls_context ) };
305 m_tls_context.reset();
320 return std::move(m_tls_context);
327 return static_cast< Settings & >( *
this );
331 std::make_shared< asio_ns::ssl::context >(
332 asio_ns::ssl::context::sslv23 )
353 class socket_supplier_t< tls_socket_t >
356 template <
typename Settings >
359 asio_ns::io_context & io_context )
360 : m_tls_context{ settings.giveaway_tls_context() }
361 , m_io_context{ io_context }
363 m_sockets.reserve( settings.concurrent_accepts_count() );
365 while( m_sockets.size() < settings.concurrent_accepts_count() )
367 m_sockets.emplace_back( m_io_context, m_tls_context );
378 return m_sockets.at( idx );
386 tls_socket_t res{ m_io_context, m_tls_context };
387 std::swap( res, m_sockets.at( idx ) );
396 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()
asio_ns::ssl::context tls_context()
tls_socket_t * make_tls_socket_pointer_for_state_listener(tls_socket_t &socket) noexcept
RESTINIO_NODISCARD auto native_handle() const noexcept
Get the access to native handle behind Asio's ssl_stream.
socket_type_dependent_settings_t()=default
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
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
RESTINIO_NODISCARD char to_lower_case(unsigned char ch)
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 ...