From 93069e1bdd6aaf7709622588f6c796801746a003 Mon Sep 17 00:00:00 2001 From: pacevedom Date: Sun, 3 Mar 2019 22:03:17 +0100 Subject: [PATCH] Add asio client session callbacks to constructors --- src/asio_client_session.cc | 72 +++++++++++++++++++++++- src/includes/nghttp2/asio_http2_client.h | 72 +++++++++++++++++++----- 2 files changed, 126 insertions(+), 18 deletions(-) diff --git a/src/asio_client_session.cc b/src/asio_client_session.cc index a5acffc7..42905aab 100644 --- a/src/asio_client_session.cc +++ b/src/asio_client_session.cc @@ -53,6 +53,27 @@ session::session(boost::asio::io_service &io_service, impl_->start_resolve(host, service); } +session::session(boost::asio::io_service &io_service, const std::string &host, + const std::string &service, connect_cb ccb, error_cb ecb) + : impl_(std::make_shared( + io_service, host, service, boost::posix_time::seconds(60))) { + impl_->on_connect(ccb); + impl_->on_error(ecb); + impl_->start_resolve(host, service); +} + +session::session(boost::asio::io_service &io_service, + const boost::asio::ip::tcp::endpoint &local_endpoint, + const std::string &host, const std::string &service, + connect_cb ccb, error_cb ecb) + : impl_(std::make_shared( + io_service, local_endpoint, host, service, + boost::posix_time::seconds(60))) { + impl_->on_connect(ccb); + impl_->on_error(ecb); + impl_->start_resolve(host, service); +} + session::session(boost::asio::io_service &io_service, const std::string &host, const std::string &service, const boost::posix_time::time_duration &connect_timeout) @@ -70,6 +91,29 @@ session::session(boost::asio::io_service &io_service, impl_->start_resolve(host, service); } +session::session(boost::asio::io_service &io_service, const std::string &host, + const std::string &service, + const boost::posix_time::time_duration &connect_timeout, + connect_cb ccb, error_cb ecb) + : impl_(std::make_shared(io_service, host, service, + connect_timeout)) { + impl_->on_connect(ccb); + impl_->on_error(ecb); + impl_->start_resolve(host, service); +} + +session::session(boost::asio::io_service &io_service, + const boost::asio::ip::tcp::endpoint &local_endpoint, + const std::string &host, const std::string &service, + const boost::posix_time::time_duration &connect_timeout, + connect_cb ccb, error_cb ecb) + : impl_(std::make_shared(io_service, local_endpoint, host, + service, connect_timeout)) { + impl_->on_connect(ccb); + impl_->on_error(ecb); + impl_->start_resolve(host, service); +} + session::session(boost::asio::io_service &io_service, boost::asio::ssl::context &tls_ctx, const std::string &host, const std::string &service) @@ -78,6 +122,16 @@ session::session(boost::asio::io_service &io_service, impl_->start_resolve(host, service); } +session::session(boost::asio::io_service &io_service, + boost::asio::ssl::context &tls_ctx, const std::string &host, + const std::string &service, connect_cb ccb, error_cb ecb) + : impl_(std::make_shared( + io_service, tls_ctx, host, service, boost::posix_time::seconds(60))) { + impl_->on_connect(ccb); + impl_->on_error(ecb); + impl_->start_resolve(host, service); +} + session::session(boost::asio::io_service &io_service, boost::asio::ssl::context &tls_ctx, const std::string &host, const std::string &service, @@ -87,6 +141,18 @@ session::session(boost::asio::io_service &io_service, impl_->start_resolve(host, service); } +session::session(boost::asio::io_service &io_service, + boost::asio::ssl::context &tls_ctx, const std::string &host, + const std::string &service, + const boost::posix_time::time_duration &connect_timeout, + connect_cb ccb, error_cb ecb) + : impl_(std::make_shared(io_service, tls_ctx, host, + service, connect_timeout)) { + impl_->on_connect(ccb); + impl_->on_error(ecb); + impl_->start_resolve(host, service); +} + session::~session() {} session::session(session &&other) noexcept : impl_(std::move(other.impl_)) {} @@ -156,6 +222,6 @@ const nghttp2_priority_spec *priority_spec::get() const { const bool priority_spec::valid() const { return valid_; } -} // namespace client -} // namespace asio_http2 -} // namespace nghttp2 +} // namespace client +} // namespace asio_http2 +} // namespace nghttp2 diff --git a/src/includes/nghttp2/asio_http2_client.h b/src/includes/nghttp2/asio_http2_client.h index 7b256a76..2f005bf6 100644 --- a/src/includes/nghttp2/asio_http2_client.h +++ b/src/includes/nghttp2/asio_http2_client.h @@ -36,7 +36,7 @@ namespace client { class response_impl; class response { -public: + public: // Application must not call this directly. response(); ~response(); @@ -58,7 +58,7 @@ public: // Application must not call this directly. response_impl &impl() const; -private: + private: std::unique_ptr impl_; }; @@ -72,7 +72,7 @@ using connect_cb = class request_impl; class request { -public: + public: // Application must not call this directly. request(); ~request(); @@ -114,13 +114,13 @@ public: // Application must not call this directly. request_impl &impl() const; -private: + private: std::unique_ptr impl_; }; // Wrapper around an nghttp2_priority_spec. class priority_spec { -public: + public: // The default ctor is used only by sentinel values. priority_spec() = default; @@ -135,7 +135,7 @@ public: // values). const bool valid() const; -private: + private: nghttp2_priority_spec spec_; bool valid_ = false; }; @@ -143,7 +143,7 @@ private: class session_impl; class session { -public: + public: // Starts HTTP/2 session by connecting to |host| and |service| // (e.g., "80") using clear text TCP connection with connect timeout // 60 seconds. @@ -155,6 +155,18 @@ public: const boost::asio::ip::tcp::endpoint &local_endpoint, const std::string &host, const std::string &service); + // Starts HTTP/2 session by connecting to |host| and |service| + // (e.g., "80") using clear text TCP connection with connect timeout + // 60 seconds and given connect/error callbacks. + session(boost::asio::io_service &io_service, const std::string &host, + const std::string &service, connect_cb ccb, error_cb ecb); + + // Same as previous but with pegged local endpoint + session(boost::asio::io_service &io_service, + const boost::asio::ip::tcp::endpoint &local_endpoint, + const std::string &host, const std::string &service, connect_cb ccb, + error_cb ecb); + // Starts HTTP/2 session by connecting to |host| and |service| // (e.g., "80") using clear text TCP connection with given connect // timeout. @@ -168,6 +180,21 @@ public: const std::string &host, const std::string &service, const boost::posix_time::time_duration &connect_timeout); + // Starts HTTP/2 session by connecting to |host| and |service| + // (e.g., "80") using clear text TCP connection with given connect + // timeout and connect/error callbacks. + session(boost::asio::io_service &io_service, const std::string &host, + const std::string &service, + const boost::posix_time::time_duration &connect_timeout, + connect_cb ccb, error_cb ecb); + + // Same as previous but with pegged local endpoint + session(boost::asio::io_service &io_service, + const boost::asio::ip::tcp::endpoint &local_endpoint, + const std::string &host, const std::string &service, + const boost::posix_time::time_duration &connect_timeout, + connect_cb ccb, error_cb ecb); + // Starts HTTP/2 session by connecting to |host| and |service| // (e.g., "443") using encrypted SSL/TLS connection with connect // timeout 60 seconds. @@ -175,6 +202,13 @@ public: boost::asio::ssl::context &tls_context, const std::string &host, const std::string &service); + // Starts HTTP/2 session by connecting to |host| and |service| + // (e.g., "443") using encrypted SSL/TLS connection with connect + // timeout 60 seconds and connect/error callbacks. + session(boost::asio::io_service &io_service, + boost::asio::ssl::context &tls_context, const std::string &host, + const std::string &service, connect_cb ccb, error_cb ecb); + // Starts HTTP/2 session by connecting to |host| and |service| // (e.g., "443") using encrypted SSL/TLS connection with given // connect timeout. @@ -183,6 +217,15 @@ public: const std::string &service, const boost::posix_time::time_duration &connect_timeout); + // Starts HTTP/2 session by connecting to |host| and |service| + // (e.g., "443") using encrypted SSL/TLS connection with given + // connect timeout and connect/error callbacks. + session(boost::asio::io_service &io_service, + boost::asio::ssl::context &tls_context, const std::string &host, + const std::string &service, + const boost::posix_time::time_duration &connect_timeout, + connect_cb ccb, error_cb ecb); + ~session(); session(session &&other) noexcept; @@ -233,20 +276,19 @@ public: generator_cb cb, header_map h = header_map{}, priority_spec prio = priority_spec()) const; -private: + private: std::shared_ptr impl_; }; // configure |tls_ctx| for client use. Currently, we just set NPN // callback for HTTP/2. -boost::system::error_code -configure_tls_context(boost::system::error_code &ec, - boost::asio::ssl::context &tls_ctx); +boost::system::error_code configure_tls_context( + boost::system::error_code &ec, boost::asio::ssl::context &tls_ctx); -} // namespace client +} // namespace client -} // namespace asio_http2 +} // namespace asio_http2 -} // namespace nghttp2 +} // namespace nghttp2 -#endif // ASIO_HTTP2_CLIENT_H +#endif // ASIO_HTTP2_CLIENT_H