Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement experimental websocket client #2552

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -777,6 +777,7 @@ add_library (seastar
src/util/read_first_line.cc
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Patch comment is missing

src/util/tmp_file.cc
src/util/short_streams.cc
src/websocket/common.cc
src/websocket/server.cc
)

Expand Down
21 changes: 1 addition & 20 deletions include/seastar/http/client.hh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <boost/intrusive/list.hpp>
#endif
#include <seastar/net/api.hh>
#include <seastar/http/connection_factory.hh>
#include <seastar/http/reply.hh>
#include <seastar/core/condition-variable.hh>
#include <seastar/core/iostream.hh>
Expand Down Expand Up @@ -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<connected_socket> make(abort_source*) = 0;
virtual ~connection_factory() {}
};

/**
* \brief Class client wraps communications using HTTP protocol
*
Expand Down
74 changes: 74 additions & 0 deletions include/seastar/http/connection_factory.hh
Original file line number Diff line number Diff line change
@@ -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 <seastar/core/seastar.hh>
#include <seastar/net/api.hh>
#include <seastar/net/tls.hh>

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<connected_socket> 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<connected_socket> make(abort_source* as) override {
return seastar::connect(_addr, {}, transport::TCP);
}
};

class tls_connection_factory : public connection_factory {
socket_address _addr;
shared_ptr<tls::certificate_credentials> _creds;
sstring _host;
public:
tls_connection_factory(socket_address addr, shared_ptr<tls::certificate_credentials> creds, sstring host)
: _addr(std::move(addr))
, _creds(std::move(creds))
, _host(std::move(host))
{
}
virtual future<connected_socket> make(abort_source* as) override {
return tls::connect(_creds, _addr, tls::tls_options{.server_name = _host});
}
};

}
Loading