From 03b792faac17f9a46284d55d997e1b52a49aa20c Mon Sep 17 00:00:00 2001 From: Mohammad Nejati Date: Thu, 30 May 2024 08:15:35 +0000 Subject: [PATCH] net::ssl::stream is canonical in examples We no longer need to use beast::ssl_stream to improve write performance, as Asio now linearizes scatter/gather I/O in ssl::stream: https://github.com/chriskohlhoff/asio/commit/17637a48ccbfa2f63941d8393a7c8316a8df4a79 --- .../advanced_server_flex_awaitable.cpp | 27 +++++++++---------- .../server-flex/advanced_server_flex.cpp | 21 +++++++-------- .../http_client_async_ssl_system_executor.cpp | 6 ++--- .../async-ssl/http_client_async_ssl.cpp | 6 ++--- .../http_client_awaitable_ssl.cpp | 5 ++-- .../client/coro-ssl/http_client_coro_ssl.cpp | 4 +-- .../client/sync-ssl/http_client_sync_ssl.cpp | 7 ++--- .../async-ssl/http_server_async_ssl.cpp | 5 ++-- .../server/coro-ssl/http_server_coro_ssl.cpp | 6 ++--- example/http/server/flex/http_server_flex.cpp | 7 +++-- .../http_server_stackless_ssl.cpp | 4 +-- .../server/sync-ssl/http_server_sync_ssl.cpp | 4 +-- ...ocket_client_async_ssl_system_executor.cpp | 6 ++--- .../async-ssl/websocket_client_async_ssl.cpp | 6 ++--- .../coro-ssl/websocket_client_coro_ssl.cpp | 5 ++-- .../sync-ssl/websocket_client_sync_ssl.cpp | 7 +++-- .../async-ssl/websocket_server_async_ssl.cpp | 8 +++--- .../coro-ssl/websocket_server_coro_ssl.cpp | 8 +++--- .../websocket_server_stackless_ssl.cpp | 6 ++--- .../sync-ssl/websocket_server_sync_ssl.cpp | 5 ++-- 20 files changed, 63 insertions(+), 90 deletions(-) diff --git a/example/advanced/server-flex-awaitable/advanced_server_flex_awaitable.cpp b/example/advanced/server-flex-awaitable/advanced_server_flex_awaitable.cpp index e27e3aa4..6e1c5b90 100644 --- a/example/advanced/server-flex-awaitable/advanced_server_flex_awaitable.cpp +++ b/example/advanced/server-flex-awaitable/advanced_server_flex_awaitable.cpp @@ -17,26 +17,26 @@ #include #include -#include #include +#include #include #include #include -#include #include +#include #include #include #include #include #include #include +#include #include #include #include #include #include #include -#include #include #include #include @@ -438,21 +438,18 @@ class ssl_websocket_session : public websocket_session , public std::enable_shared_from_this { - websocket::stream< - beast::ssl_stream> ws_; + websocket::stream> ws_; public: // Create the ssl_websocket_session explicit - ssl_websocket_session( - beast::ssl_stream&& stream) + ssl_websocket_session(ssl::stream&& stream) : ws_(std::move(stream)) { } // Called by the base class - websocket::stream< - beast::ssl_stream>& + websocket::stream>& ws() { return ws_; @@ -474,7 +471,7 @@ make_websocket_session( template void make_websocket_session( - beast::ssl_stream stream, + ssl::stream stream, http::request> req) { std::make_shared( @@ -697,7 +694,7 @@ class ssl_http_session : public http_session , public std::enable_shared_from_this { - beast::ssl_stream stream_; + ssl::stream stream_; public: // Create the http_session @@ -731,14 +728,14 @@ public: } // Called by the base class - beast::ssl_stream& + ssl::stream& stream() { return stream_; } // Called by the base class - beast::ssl_stream + ssl::stream release_stream() { return std::move(stream_); @@ -869,7 +866,7 @@ net::awaitable do_eof(Stream & stream) template BOOST_ASIO_NODISCARD net::awaitable -do_eof(beast::ssl_stream & stream) +do_eof(ssl::stream & stream) { co_await stream.async_shutdown(); } @@ -1023,7 +1020,7 @@ detect_session(typename beast::tcp_stream::rebind_executor::other; - beast::ssl_stream ssl_stream{std::move(stream), ctx}; + ssl::stream ssl_stream{std::move(stream), ctx}; auto [ec, bytes_used] = co_await ssl_stream.async_handshake(net::ssl::stream_base::server, buffer.data()); if(ec) diff --git a/example/advanced/server-flex/advanced_server_flex.cpp b/example/advanced/server-flex/advanced_server_flex.cpp index 58b98167..c04c91d1 100644 --- a/example/advanced/server-flex/advanced_server_flex.cpp +++ b/example/advanced/server-flex/advanced_server_flex.cpp @@ -17,18 +17,18 @@ #include #include -#include #include +#include #include #include #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -391,21 +391,18 @@ class ssl_websocket_session : public websocket_session , public std::enable_shared_from_this { - websocket::stream< - beast::ssl_stream> ws_; + websocket::stream> ws_; public: // Create the ssl_websocket_session explicit - ssl_websocket_session( - beast::ssl_stream&& stream) + ssl_websocket_session(ssl::stream&& stream) : ws_(std::move(stream)) { } // Called by the base class - websocket::stream< - beast::ssl_stream>& + websocket::stream>& ws() { return ws_; @@ -427,7 +424,7 @@ make_websocket_session( template void make_websocket_session( - beast::ssl_stream stream, + ssl::stream stream, http::request> req) { std::make_shared( @@ -650,7 +647,7 @@ class ssl_http_session : public http_session , public std::enable_shared_from_this { - beast::ssl_stream stream_; + ssl::stream stream_; public: // Create the http_session @@ -684,14 +681,14 @@ public: } // Called by the base class - beast::ssl_stream& + ssl::stream& stream() { return stream_; } // Called by the base class - beast::ssl_stream + ssl::stream release_stream() { return std::move(stream_); diff --git a/example/http/client/async-ssl-system-executor/http_client_async_ssl_system_executor.cpp b/example/http/client/async-ssl-system-executor/http_client_async_ssl_system_executor.cpp index 74af2bf5..48b7cbab 100644 --- a/example/http/client/async-ssl-system-executor/http_client_async_ssl_system_executor.cpp +++ b/example/http/client/async-ssl-system-executor/http_client_async_ssl_system_executor.cpp @@ -17,15 +17,13 @@ #include #include -#include #include +#include #include #include #include -#include #include #include -#include namespace beast = boost::beast; // from namespace http = beast::http; // from @@ -46,7 +44,7 @@ fail(beast::error_code ec, char const* what) class session : public std::enable_shared_from_this { tcp::resolver resolver_; - beast::ssl_stream stream_; + ssl::stream stream_; beast::flat_buffer buffer_; // (Must persist between reads) http::request req_; http::response res_; diff --git a/example/http/client/async-ssl/http_client_async_ssl.cpp b/example/http/client/async-ssl/http_client_async_ssl.cpp index 3c0d6ce2..61d10bd9 100644 --- a/example/http/client/async-ssl/http_client_async_ssl.cpp +++ b/example/http/client/async-ssl/http_client_async_ssl.cpp @@ -17,14 +17,12 @@ #include #include -#include #include +#include #include #include -#include #include #include -#include namespace beast = boost::beast; // from namespace http = beast::http; // from @@ -45,7 +43,7 @@ fail(beast::error_code ec, char const* what) class session : public std::enable_shared_from_this { tcp::resolver resolver_; - beast::ssl_stream stream_; + ssl::stream stream_; beast::flat_buffer buffer_; // (Must persist between reads) http::request req_; http::response res_; diff --git a/example/http/client/awaitable-ssl/http_client_awaitable_ssl.cpp b/example/http/client/awaitable-ssl/http_client_awaitable_ssl.cpp index 5c1d9fb8..e30d996b 100644 --- a/example/http/client/awaitable-ssl/http_client_awaitable_ssl.cpp +++ b/example/http/client/awaitable-ssl/http_client_awaitable_ssl.cpp @@ -15,18 +15,17 @@ #include #include -#include #include #include #include #include #include +#include #include #if defined(BOOST_ASIO_HAS_CO_AWAIT) #include -#include #include #include #include "example/common/root_certificates.hpp" @@ -58,7 +57,7 @@ do_session( using tcp_stream = typename beast::tcp_stream::rebind_executor::other; // We construct the ssl stream from the already rebound tcp_stream. - beast::ssl_stream stream{ + ssl::stream stream{ net::use_awaitable.as_default_on(beast::tcp_stream(co_await net::this_coro::executor)), ctx}; diff --git a/example/http/client/coro-ssl/http_client_coro_ssl.cpp b/example/http/client/coro-ssl/http_client_coro_ssl.cpp index 29b6e9e5..0ce2a79e 100644 --- a/example/http/client/coro-ssl/http_client_coro_ssl.cpp +++ b/example/http/client/coro-ssl/http_client_coro_ssl.cpp @@ -17,9 +17,9 @@ #include #include -#include #include #include +#include #include #include #include @@ -55,7 +55,7 @@ do_session( // These objects perform our I/O tcp::resolver resolver(ioc); - beast::ssl_stream stream(ioc, ctx); + ssl::stream stream(ioc, ctx); // Set SNI Hostname (many hosts need this to handshake successfully) if(! SSL_set_tlsext_host_name(stream.native_handle(), host.c_str())) diff --git a/example/http/client/sync-ssl/http_client_sync_ssl.cpp b/example/http/client/sync-ssl/http_client_sync_ssl.cpp index 95e99794..8b0e0bb1 100644 --- a/example/http/client/sync-ssl/http_client_sync_ssl.cpp +++ b/example/http/client/sync-ssl/http_client_sync_ssl.cpp @@ -17,15 +17,12 @@ #include #include -#include #include #include #include -#include -#include +#include #include #include -#include namespace beast = boost::beast; // from namespace http = beast::http; // from @@ -67,7 +64,7 @@ int main(int argc, char** argv) // These objects perform our I/O tcp::resolver resolver(ioc); - beast::ssl_stream stream(ioc, ctx); + ssl::stream stream(ioc, ctx); // Set SNI Hostname (many hosts need this to handshake successfully) if(! SSL_set_tlsext_host_name(stream.native_handle(), host)) diff --git a/example/http/server/async-ssl/http_server_async_ssl.cpp b/example/http/server/async-ssl/http_server_async_ssl.cpp index 01d7e8dc..b6498d3a 100644 --- a/example/http/server/async-ssl/http_server_async_ssl.cpp +++ b/example/http/server/async-ssl/http_server_async_ssl.cpp @@ -17,14 +17,13 @@ #include #include -#include #include #include +#include #include #include #include #include -#include #include #include #include @@ -236,7 +235,7 @@ fail(beast::error_code ec, char const* what) // Handles an HTTP server connection class session : public std::enable_shared_from_this { - beast::ssl_stream stream_; + ssl::stream stream_; beast::flat_buffer buffer_; std::shared_ptr doc_root_; http::request req_; diff --git a/example/http/server/coro-ssl/http_server_coro_ssl.cpp b/example/http/server/coro-ssl/http_server_coro_ssl.cpp index 7f24addc..93e3b2f3 100644 --- a/example/http/server/coro-ssl/http_server_coro_ssl.cpp +++ b/example/http/server/coro-ssl/http_server_coro_ssl.cpp @@ -17,10 +17,10 @@ #include #include -#include #include #include #include +#include #include #include #include @@ -235,7 +235,7 @@ fail(beast::error_code ec, char const* what) // Handles an HTTP server connection void do_session( - beast::ssl_stream& stream, + ssl::stream& stream, std::shared_ptr const& doc_root, net::yield_context yield) { @@ -342,7 +342,7 @@ do_listen( acceptor.get_executor(), std::bind( &do_session, - beast::ssl_stream( + ssl::stream( std::move(socket), ctx), doc_root, std::placeholders::_1), diff --git a/example/http/server/flex/http_server_flex.cpp b/example/http/server/flex/http_server_flex.cpp index c3642d8b..b586fb7f 100644 --- a/example/http/server/flex/http_server_flex.cpp +++ b/example/http/server/flex/http_server_flex.cpp @@ -17,14 +17,13 @@ #include #include -#include #include #include +#include #include #include #include #include -#include #include #include #include @@ -393,7 +392,7 @@ class ssl_session : public session , public std::enable_shared_from_this { - beast::ssl_stream stream_; + ssl::stream stream_; public: // Create the session @@ -410,7 +409,7 @@ public: } // Called by the base class - beast::ssl_stream& + ssl::stream& stream() { return stream_; diff --git a/example/http/server/stackless-ssl/http_server_stackless_ssl.cpp b/example/http/server/stackless-ssl/http_server_stackless_ssl.cpp index f9ebda3f..85730225 100644 --- a/example/http/server/stackless-ssl/http_server_stackless_ssl.cpp +++ b/example/http/server/stackless-ssl/http_server_stackless_ssl.cpp @@ -17,10 +17,10 @@ #include #include -#include #include #include #include +#include #include #include #include @@ -239,7 +239,7 @@ class session : public boost::asio::coroutine , public std::enable_shared_from_this { - beast::ssl_stream stream_; + ssl::stream stream_; beast::flat_buffer buffer_; std::shared_ptr doc_root_; http::request req_; diff --git a/example/http/server/sync-ssl/http_server_sync_ssl.cpp b/example/http/server/sync-ssl/http_server_sync_ssl.cpp index 57bf76b7..3571638e 100644 --- a/example/http/server/sync-ssl/http_server_sync_ssl.cpp +++ b/example/http/server/sync-ssl/http_server_sync_ssl.cpp @@ -17,9 +17,9 @@ #include #include -#include #include #include +#include #include #include #include @@ -220,7 +220,7 @@ do_session( beast::error_code ec; // Construct the stream around the socket - beast::ssl_stream stream{socket, ctx}; + ssl::stream stream{socket, ctx}; // Perform the SSL handshake stream.handshake(ssl::stream_base::server, ec); diff --git a/example/websocket/client/async-ssl-system-executor/websocket_client_async_ssl_system_executor.cpp b/example/websocket/client/async-ssl-system-executor/websocket_client_async_ssl_system_executor.cpp index f6af28d2..eede770e 100644 --- a/example/websocket/client/async-ssl-system-executor/websocket_client_async_ssl_system_executor.cpp +++ b/example/websocket/client/async-ssl-system-executor/websocket_client_async_ssl_system_executor.cpp @@ -16,13 +16,12 @@ #include "example/common/root_certificates.hpp" #include -#include #include #include +#include #include #include #include -#include #include #include #include @@ -47,8 +46,7 @@ fail(beast::error_code ec, char const* what) class session : public std::enable_shared_from_this { tcp::resolver resolver_; - websocket::stream< - beast::ssl_stream> ws_; + websocket::stream> ws_; beast::flat_buffer buffer_; std::string host_; std::string text_; diff --git a/example/websocket/client/async-ssl/websocket_client_async_ssl.cpp b/example/websocket/client/async-ssl/websocket_client_async_ssl.cpp index 5112a7f9..b4af2c62 100644 --- a/example/websocket/client/async-ssl/websocket_client_async_ssl.cpp +++ b/example/websocket/client/async-ssl/websocket_client_async_ssl.cpp @@ -16,12 +16,11 @@ #include "example/common/root_certificates.hpp" #include -#include #include #include +#include #include #include -#include #include #include #include @@ -46,8 +45,7 @@ fail(beast::error_code ec, char const* what) class session : public std::enable_shared_from_this { tcp::resolver resolver_; - websocket::stream< - beast::ssl_stream> ws_; + websocket::stream> ws_; beast::flat_buffer buffer_; std::string host_; std::string text_; diff --git a/example/websocket/client/coro-ssl/websocket_client_coro_ssl.cpp b/example/websocket/client/coro-ssl/websocket_client_coro_ssl.cpp index 8acd0334..a658f8d2 100644 --- a/example/websocket/client/coro-ssl/websocket_client_coro_ssl.cpp +++ b/example/websocket/client/coro-ssl/websocket_client_coro_ssl.cpp @@ -16,10 +16,10 @@ #include "example/common/root_certificates.hpp" #include -#include #include #include #include +#include #include #include #include @@ -55,8 +55,7 @@ do_session( // These objects perform our I/O tcp::resolver resolver(ioc); - websocket::stream< - beast::ssl_stream> ws(ioc, ctx); + websocket::stream> ws(ioc, ctx); // Look up the domain name auto const results = resolver.async_resolve(host, port, yield[ec]); diff --git a/example/websocket/client/sync-ssl/websocket_client_sync_ssl.cpp b/example/websocket/client/sync-ssl/websocket_client_sync_ssl.cpp index 7118f0f6..429b5da0 100644 --- a/example/websocket/client/sync-ssl/websocket_client_sync_ssl.cpp +++ b/example/websocket/client/sync-ssl/websocket_client_sync_ssl.cpp @@ -16,12 +16,11 @@ #include "example/common/root_certificates.hpp" #include -#include #include #include #include #include -#include +#include #include #include #include @@ -62,13 +61,13 @@ int main(int argc, char** argv) // These objects perform our I/O tcp::resolver resolver{ioc}; - websocket::stream> ws{ioc, ctx}; + websocket::stream> ws{ioc, ctx}; // Look up the domain name auto const results = resolver.resolve(host, port); // Make the connection on the IP address we get from a lookup - auto ep = net::connect(get_lowest_layer(ws), results); + auto ep = net::connect(beast::get_lowest_layer(ws), results); // Set SNI Hostname (many hosts need this to handshake successfully) if(! SSL_set_tlsext_host_name(ws.next_layer().native_handle(), host.c_str())) diff --git a/example/websocket/server/async-ssl/websocket_server_async_ssl.cpp b/example/websocket/server/async-ssl/websocket_server_async_ssl.cpp index b79abbbf..b55315b9 100644 --- a/example/websocket/server/async-ssl/websocket_server_async_ssl.cpp +++ b/example/websocket/server/async-ssl/websocket_server_async_ssl.cpp @@ -16,14 +16,13 @@ #include "example/common/server_certificate.hpp" #include -#include #include #include -#include #include +#include +#include #include #include -#include #include #include #include @@ -49,8 +48,7 @@ fail(beast::error_code ec, char const* what) // Echoes back all received WebSocket messages class session : public std::enable_shared_from_this { - websocket::stream< - beast::ssl_stream> ws_; + websocket::stream> ws_; beast::flat_buffer buffer_; public: diff --git a/example/websocket/server/coro-ssl/websocket_server_coro_ssl.cpp b/example/websocket/server/coro-ssl/websocket_server_coro_ssl.cpp index 1d3afc88..ae988a0a 100644 --- a/example/websocket/server/coro-ssl/websocket_server_coro_ssl.cpp +++ b/example/websocket/server/coro-ssl/websocket_server_coro_ssl.cpp @@ -16,16 +16,15 @@ #include "example/common/server_certificate.hpp" #include -#include #include #include #include #include +#include #include #include #include #include -#include #include #include #include @@ -49,8 +48,7 @@ fail(beast::error_code ec, char const* what) // Echoes back all received WebSocket messages void do_session( - websocket::stream< - beast::ssl_stream>& ws, + websocket::stream>& ws, net::yield_context yield) { beast::error_code ec; @@ -153,7 +151,7 @@ do_listen( acceptor.get_executor(), std::bind( &do_session, - websocket::stream>(std::move(socket), ctx), std::placeholders::_1), // we ignore the result of the session, diff --git a/example/websocket/server/stackless-ssl/websocket_server_stackless_ssl.cpp b/example/websocket/server/stackless-ssl/websocket_server_stackless_ssl.cpp index c6eaec60..23a4fdcf 100644 --- a/example/websocket/server/stackless-ssl/websocket_server_stackless_ssl.cpp +++ b/example/websocket/server/stackless-ssl/websocket_server_stackless_ssl.cpp @@ -16,12 +16,12 @@ #include "example/common/server_certificate.hpp" #include -#include #include #include #include -#include #include +#include +#include #include #include #include @@ -52,7 +52,7 @@ class session : public boost::asio::coroutine , public std::enable_shared_from_this { - websocket::stream> ws_; + websocket::stream> ws_; beast::flat_buffer buffer_; public: diff --git a/example/websocket/server/sync-ssl/websocket_server_sync_ssl.cpp b/example/websocket/server/sync-ssl/websocket_server_sync_ssl.cpp index 789b1406..64ef233d 100644 --- a/example/websocket/server/sync-ssl/websocket_server_sync_ssl.cpp +++ b/example/websocket/server/sync-ssl/websocket_server_sync_ssl.cpp @@ -16,11 +16,10 @@ #include "example/common/server_certificate.hpp" #include -#include #include #include #include -#include +#include #include #include #include @@ -43,7 +42,7 @@ do_session(tcp::socket socket, ssl::context& ctx) try { // Construct the websocket stream around the socket - websocket::stream> ws{socket, ctx}; + websocket::stream> ws{socket, ctx}; // Perform the SSL handshake ws.next_layer().handshake(ssl::stream_base::server);