18#ifndef TRINITYCORE_SSL_STREAM_H
19#define TRINITYCORE_SSL_STREAM_H
22#include <boost/asio/ip/tcp.hpp>
23#include <boost/asio/ssl/stream.hpp>
24#include <boost/system/error_code.hpp>
28template <
typename SocketImpl>
35 _socket->underlying_stream().async_handshake(boost::asio::ssl::stream_base::server,
36 [socketRef =
_socket->weak_from_this(), self = this->shared_from_this()](boost::system::error_code
const& error)
38 std::shared_ptr<SocketImpl> socket = static_pointer_cast<SocketImpl>(socketRef.lock());
44 TC_LOG_ERROR(
"session",
"{} SSL Handshake failed {}", socket->GetClientInfo(), error.message());
45 socket->CloseSocket();
58template<
class WrappedStream = IoContextTcpSocket>
64 _sslSocket.set_verify_mode(boost::asio::ssl::verify_none);
67 explicit SslStream(boost::asio::io_context& context, boost::asio::ssl::context& sslContext) : _sslSocket(context, sslContext)
69 _sslSocket.set_verify_mode(boost::asio::ssl::verify_none);
73 void close(boost::system::error_code& error)
75 _sslSocket.next_layer().close(error);
78 void shutdown(boost::asio::socket_base::shutdown_type what, boost::system::error_code& shutdownError)
80 _sslSocket.shutdown(shutdownError);
81 _sslSocket.next_layer().shutdown(what, shutdownError);
84 template<
typename MutableBufferSequence,
typename ReadHandlerType>
85 void async_read_some(MutableBufferSequence
const& buffers, ReadHandlerType&& handler)
87 _sslSocket.async_read_some(buffers, std::forward<ReadHandlerType>(handler));
90 template<
typename ConstBufferSequence,
typename WriteHandlerType>
93 _sslSocket.async_write_some(buffers, std::forward<WriteHandlerType>(handler));
96 template<
typename ConstBufferSequence>
97 std::size_t
write_some(ConstBufferSequence
const& buffers, boost::system::error_code& error)
99 return _sslSocket.write_some(buffers, error);
102 template<
typename WaitHandlerType>
103 void async_wait(boost::asio::socket_base::wait_type type, WaitHandlerType&& handler)
105 _sslSocket.next_layer().async_wait(type, std::forward<WaitHandlerType>(handler));
108 template<
typename SettableSocketOption>
109 void set_option(SettableSocketOption
const& option, boost::system::error_code& error)
111 _sslSocket.next_layer().set_option(option, error);
116 return _sslSocket.next_layer().remote_endpoint();
120 template<
typename HandshakeHandlerType>
121 void async_handshake(boost::asio::ssl::stream_base::handshake_type type, HandshakeHandlerType&& handler)
123 _sslSocket.async_handshake(type, std::forward<HandshakeHandlerType>(handler));
if(posix_memalign(&__mallocedMemory, __align, __size)) return NULL
SslStream(IoContextTcpSocket &&socket, boost::asio::ssl::context &sslContext)
void async_read_some(MutableBufferSequence const &buffers, ReadHandlerType &&handler)
IoContextTcpSocket::endpoint_type remote_endpoint() const
void async_handshake(boost::asio::ssl::stream_base::handshake_type type, HandshakeHandlerType &&handler)
void async_wait(boost::asio::socket_base::wait_type type, WaitHandlerType &&handler)
SslStream(boost::asio::io_context &context, boost::asio::ssl::context &sslContext)
void set_option(SettableSocketOption const &option, boost::system::error_code &error)
void close(boost::system::error_code &error)
void async_write_some(ConstBufferSequence const &buffers, WriteHandlerType &&handler)
std::size_t write_some(ConstBufferSequence const &buffers, boost::system::error_code &error)
void shutdown(boost::asio::socket_base::shutdown_type what, boost::system::error_code &shutdownError)
boost::asio::ssl::stream< WrappedStream > _sslSocket
boost::asio::basic_stream_socket< boost::asio::ip::tcp, boost::asio::io_context::executor_type > IoContextTcpSocket
SslHandshakeConnectionInitializer(SocketImpl *socket)