diff --git a/include/seastar/http/client.hh b/include/seastar/http/client.hh index 853d466ab9..660dd95d14 100644 --- a/include/seastar/http/client.hh +++ b/include/seastar/http/client.hh @@ -25,6 +25,7 @@ #include #endif #include +#include #include #include #include @@ -136,26 +137,6 @@ private: void shutdown() noexcept; }; -/** - * \brief Factory that provides transport for \ref client - * - * This customization point allows callers provide its own transport for client. The - * client code calls factory when it needs more connections to the server and maintains - * the pool of re-usable sockets internally - */ - -class connection_factory { -public: - /** - * \brief Make a \ref connected_socket - * - * The implementations of this method should return ready-to-use socket that will - * be used by \ref client as transport for its http connections - */ - virtual future make(abort_source*) = 0; - virtual ~connection_factory() {} -}; - /** * \brief Class client wraps communications using HTTP protocol * diff --git a/include/seastar/http/connection_factory.hh b/include/seastar/http/connection_factory.hh new file mode 100644 index 0000000000..7b1b1a2af0 --- /dev/null +++ b/include/seastar/http/connection_factory.hh @@ -0,0 +1,74 @@ +/* + * This file is open source software, licensed to you under the terms + * of the Apache License, Version 2.0 (the "License"). See the NOTICE file + * distributed with this work for additional information regarding copyright + * ownership. You may not use this file except in compliance with the License. + * + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#pragma once + +#include +#include +#include + +namespace seastar::http::experimental { + +/** + * \brief Factory that provides transport for \ref client + * + * This customization point allows callers provide its own transport for client. The + * client code calls factory when it needs more connections to the server. + */ + +class connection_factory { +public: + /** + * \brief Make a \ref connected_socket + * + * The implementations of this method should return ready-to-use socket that will + * be used by \ref client as transport for its http connections + */ + virtual future make(abort_source*) = 0; + virtual ~connection_factory() {} +}; + +class basic_connection_factory : public connection_factory { + socket_address _addr; +public: + explicit basic_connection_factory(socket_address addr) + : _addr(std::move(addr)) + { + } + virtual future make(abort_source* as) override { + return seastar::connect(_addr, {}, transport::TCP); + } +}; + +class tls_connection_factory : public connection_factory { + socket_address _addr; + shared_ptr _creds; + sstring _host; +public: + tls_connection_factory(socket_address addr, shared_ptr creds, sstring host) + : _addr(std::move(addr)) + , _creds(std::move(creds)) + , _host(std::move(host)) + { + } + virtual future make(abort_source* as) override { + return tls::connect(_creds, _addr, tls::tls_options{.server_name = _host}); + } +}; + +} diff --git a/include/seastar/http/request.hh b/include/seastar/http/request.hh index d222fb7472..d27604b6a0 100644 --- a/include/seastar/http/request.hh +++ b/include/seastar/http/request.hh @@ -313,10 +313,10 @@ struct request { */ static request make(httpd::operation_type type, sstring host, sstring path); -private: - void add_query_param(std::string_view param); sstring request_line() const; future<> write_request_headers(output_stream& out) const; +private: + void add_query_param(std::string_view param); friend class experimental::connection; }; diff --git a/src/http/client.cc b/src/http/client.cc index 499e45bd62..4053f77c31 100644 --- a/src/http/client.cc +++ b/src/http/client.cc @@ -35,7 +35,6 @@ module seastar; #include #include #include -#include #include #include #include @@ -203,39 +202,11 @@ future<> connection::close() { }); } -class basic_connection_factory : public connection_factory { - socket_address _addr; -public: - explicit basic_connection_factory(socket_address addr) - : _addr(std::move(addr)) - { - } - virtual future make(abort_source* as) override { - return seastar::connect(_addr, {}, transport::TCP); - } -}; - client::client(socket_address addr) : client(std::make_unique(std::move(addr))) { } -class tls_connection_factory : public connection_factory { - socket_address _addr; - shared_ptr _creds; - sstring _host; -public: - tls_connection_factory(socket_address addr, shared_ptr creds, sstring host) - : _addr(std::move(addr)) - , _creds(std::move(creds)) - , _host(std::move(host)) - { - } - virtual future make(abort_source* as) override { - return tls::connect(_creds, _addr, tls::tls_options{.server_name = _host}); - } -}; - client::client(socket_address addr, shared_ptr creds, sstring host) : client(std::make_unique(std::move(addr), std::move(creds), std::move(host))) {