2 #ifndef ASIO_STANDALONE
3 #define ASIO_STANDALONE
7 #include <asio/ssl.hpp>
9 #include "crow/settings.h"
10 #include <asio/version.hpp>
11 #if ASIO_VERSION >= 101300
12 #define GET_IO_SERVICE(s) ((asio::io_context&)(s).get_executor().context())
14 #define GET_IO_SERVICE(s) ((s).get_io_service())
18 using tcp = asio::ip::tcp;
28 asio::io_service& get_io_service()
30 return GET_IO_SERVICE(socket_);
45 tcp::endpoint remote_endpoint()
47 return socket_.remote_endpoint();
52 return socket_.is_open();
61 void shutdown_readwrite()
64 socket_.shutdown(asio::socket_base::shutdown_type::shutdown_both, ec);
70 socket_.shutdown(asio::socket_base::shutdown_type::shutdown_send, ec);
76 socket_.shutdown(asio::socket_base::shutdown_type::shutdown_receive, ec);
82 f(asio::error_code());
88 #ifdef CROW_ENABLE_SSL
91 using context = asio::ssl::context;
92 using ssl_socket_t = asio::ssl::stream<tcp::socket>;
93 SSLAdaptor(asio::io_service& io_service, context* ctx):
94 ssl_socket_(
new ssl_socket_t(io_service, *ctx))
97 asio::ssl::stream<tcp::socket>& socket()
102 tcp::socket::lowest_layer_type&
105 return ssl_socket_->lowest_layer();
108 tcp::endpoint remote_endpoint()
110 return raw_socket().remote_endpoint();
115 return ssl_socket_ ? raw_socket().is_open() :
false;
123 raw_socket().close(ec);
127 void shutdown_readwrite()
132 raw_socket().shutdown(asio::socket_base::shutdown_type::shutdown_both, ec);
136 void shutdown_write()
141 raw_socket().shutdown(asio::socket_base::shutdown_type::shutdown_send, ec);
150 raw_socket().shutdown(asio::socket_base::shutdown_type::shutdown_receive, ec);
154 asio::io_service& get_io_service()
156 return GET_IO_SERVICE(raw_socket());
162 ssl_socket_->async_handshake(asio::ssl::stream_base::server,
163 [f](
const asio::error_code& ec) {
168 std::unique_ptr<asio::ssl::stream<tcp::socket>> ssl_socket_;
Definition: socket_adaptors.h:90
A wrapper for the asio::ip::tcp::socket and asio::ssl::stream.
Definition: socket_adaptors.h:22
tcp::socket & raw_socket()
Get the TCP socket handling data trasfers, regardless of what layer is handling transfers on top of t...
Definition: socket_adaptors.h:34
tcp::socket & socket()
Get the object handling data transfers, this can be either a TCP socket or an SSL stream (if SSL is e...
Definition: socket_adaptors.h:40