26#ifndef ROUTER_CONNECTION_POOL_CONNECTION_BASE_INCLUDED 
   27#define ROUTER_CONNECTION_POOL_CONNECTION_BASE_INCLUDED 
   32#include <system_error>   
   42#include <openssl/ssl.h>   
   60      std::vector<uint8_t, default_init_allocator<uint8_t>>;
 
   66      std::function<
void(std::error_code ec, 
size_t transferred)>) = 0;
 
   70      std::function<
void(std::error_code ec, 
size_t transferred)>) = 0;
 
   76  [[nodiscard]] 
virtual bool is_open() 
const = 0;
 
   85  [[nodiscard]] 
virtual std::string 
endpoint() 
const = 0;
 
   95template <
class Protocol>
 
   98#ifdef NET_TS_HAS_UNIX_SOCKET 
  113template <
class Protocol>
 
  132    return sock_.release().and_then(
 
  138          if (!assign_res) 
return assign_res;
 
  147                  std::function<
void(std::error_code ec, 
size_t transferred)>
 
  148                      completion)
 override {
 
  150                    std::move(completion));
 
  154                  std::function<
void(std::error_code ec, 
size_t transferred)>
 
  155                      completion)
 override {
 
  156    if (
sock_.native_non_blocking()) {
 
  163                                          transferred = *write_res]() {
 
  164          completion({}, transferred);
 
  169      const auto ec = write_res.error();
 
  175                                          ec]() { completion(ec, 0); });
 
  183                     std::move(completion));
 
  187      std::function<
void(std::error_code ec)> completion)
 override {
 
  192      std::function<
void(std::error_code ec)> completion)
 override {
 
  197      std::function<
void(std::error_code ec)> completion)
 override {
 
  201  [[nodiscard]] 
bool is_open()
 const override { 
return sock_.is_open(); }
 
  205    return sock_.native_handle();
 
  209    return sock_.close();
 
  213    return sock_.cancel();
 
  218    return sock_.shutdown(st);
 
  221  [[nodiscard]] std::string 
endpoint()
 const override {
 
  229  template <
class GettableSocketOption>
 
  231      GettableSocketOption &opt)
 const {
 
  232    return sock_.get_option(opt);
 
  250#ifdef NET_TS_HAS_UNIX_SOCKET 
  298    conn_ = std::move(conn);
 
  303      SSL_set_info_callback(
ssl, 
nullptr);
 
  304      SSL_set_msg_callback_arg(
ssl, 
nullptr);
 
  317  template <
class Func>
 
  325                      [
this, func = std::forward<Func>(func)](
 
  326                          std::error_code ec, 
size_t transferred) {
 
  327                        if (ec == std::error_code()) {
 
  328                          channel_.view_sync_raw();
 
  331                        func(ec, transferred);
 
  340  template <
class Func>
 
  342    conn_->async_send(channel_.send_buffer(), std::forward<Func>(func));
 
  350  template <
class Func>
 
  352    conn_->async_wait_send(std::forward<Func>(func));
 
  355  template <
class Func>
 
  357    conn_->async_wait_error(std::forward<Func>(func));
 
  366  [[nodiscard]] 
bool is_open()
 const { 
return conn_ && conn_->is_open(); }
 
  369    return conn_->native_handle();
 
  376    return conn_->close();
 
  384    return conn_->shutdown(st);
 
  388    if (!is_open()) 
return "";
 
  390    return conn_->endpoint();
 
  394    if (!conn_) 
return {};
 
  396    return conn_->cancel();
 
  405  std::unique_ptr<ConnectionBase> &
connection() { 
return conn_; }
 
  407  const std::unique_ptr<ConnectionBase> &
connection()
 const { 
return conn_; }
 
  416    return conn_->is_secure_transport() || (channel_.ssl() != 
nullptr);
 
  421  std::unique_ptr<ConnectionBase> 
conn_;
 
basic connection which wraps a net-ts Protocol.
Definition: connection_base.h:114
 
stdx::expected< void, std::error_code > set_io_context(net::io_context &new_ctx) override
Definition: connection_base.h:127
 
stdx::expected< void, std::error_code > get_option(GettableSocketOption &opt) const
Definition: connection_base.h:230
 
stdx::expected< void, std::error_code > close() override
Definition: connection_base.h:208
 
void async_wait_error(std::function< void(std::error_code ec)> completion) override
Definition: connection_base.h:196
 
std::string endpoint() const override
Definition: connection_base.h:221
 
void async_wait_recv(std::function< void(std::error_code ec)> completion) override
Definition: connection_base.h:191
 
net::impl::socket::native_handle_type native_handle() const override
Definition: connection_base.h:203
 
void async_recv(recv_buffer_type &buf, std::function< void(std::error_code ec, size_t transferred)> completion) override
Definition: connection_base.h:146
 
stdx::expected< void, std::error_code > cancel() override
Definition: connection_base.h:212
 
bool is_open() const override
Definition: connection_base.h:201
 
socket_type sock_
Definition: connection_base.h:245
 
typename protocol_type::socket socket_type
Definition: connection_base.h:117
 
BasicConnection(socket_type sock, endpoint_type ep)
Definition: connection_base.h:122
 
bool is_secure_transport() const override
check if the underlying transport is secure.
Definition: connection_base.h:240
 
net::io_context & io_ctx() override
Definition: connection_base.h:125
 
endpoint_type ep_
Definition: connection_base.h:246
 
stdx::expected< void, std::error_code > shutdown(net::socket_base::shutdown_type st) override
Definition: connection_base.h:216
 
void async_send(recv_buffer_type &buf, std::function< void(std::error_code ec, size_t transferred)> completion) override
Definition: connection_base.h:153
 
void async_wait_send(std::function< void(std::error_code ec)> completion) override
Definition: connection_base.h:186
 
typename protocol_type::endpoint endpoint_type
Definition: connection_base.h:118
 
SSL aware socket buffers.
Definition: channel.h:65
 
void view_discard_raw()
Definition: channel.cc:313
 
void clear()
clears all buffers.
Definition: channel.h:79
 
SSL * ssl() const
get access to the raw SSL handle.
Definition: channel.h:324
 
recv_buffer_type & recv_buffer()
buffer of data that was received from the socket.
Definition: channel.h:240
 
virtual base-class of BasicConnection.
Definition: connection_base.h:55
 
virtual void async_send(recv_buffer_type &, std::function< void(std::error_code ec, size_t transferred)>)=0
 
std::vector< uint8_t, default_init_allocator< uint8_t > > recv_buffer_type
Definition: connection_base.h:60
 
virtual void async_wait_recv(std::function< void(std::error_code ec)>)=0
 
virtual stdx::expected< void, std::error_code > close()=0
 
virtual void async_recv(recv_buffer_type &, std::function< void(std::error_code ec, size_t transferred)>)=0
 
virtual void async_wait_send(std::function< void(std::error_code ec)>)=0
 
virtual bool is_secure_transport() const =0
 
virtual net::impl::socket::native_handle_type native_handle() const =0
 
virtual net::io_context & io_ctx()=0
 
virtual std::string endpoint() const =0
 
virtual bool is_open() const =0
 
virtual stdx::expected< void, std::error_code > shutdown(net::socket_base::shutdown_type st)=0
 
virtual stdx::expected< void, std::error_code > cancel()=0
 
virtual stdx::expected< void, std::error_code > set_io_context(net::io_context &new_ctx)=0
 
virtual void async_wait_error(std::function< void(std::error_code ec)>)=0
 
virtual ~ConnectionBase()=default
 
Definition: protocol.h:33
 
a Connection that can be switched to TLS.
Definition: connection_base.h:265
 
void prepare_for_pool()
Definition: connection_base.h:301
 
SslMode ssl_mode_
Definition: connection_base.h:423
 
Channel & channel()
Definition: connection_base.h:360
 
std::unique_ptr< ConnectionBase > conn_
Definition: connection_base.h:421
 
T protocol_state_type
Definition: connection_base.h:273
 
bool is_secure_transport() const
check if the channel is secure.
Definition: connection_base.h:415
 
void async_wait_send(Func &&func)
async wait until connection allows to send data.
Definition: connection_base.h:351
 
std::string endpoint() const
Definition: connection_base.h:387
 
protocol_state_type protocol_
Definition: connection_base.h:429
 
protocol_state_type & protocol()
Definition: connection_base.h:399
 
const protocol_state_type & protocol() const
Definition: connection_base.h:401
 
const std::unique_ptr< ConnectionBase > & connection() const
Definition: connection_base.h:407
 
bool is_open() const
Definition: connection_base.h:366
 
void async_send(Func &&func)
async send data from the channel's send buffer to the connection.
Definition: connection_base.h:341
 
std::unique_ptr< ConnectionBase > & connection()
Definition: connection_base.h:405
 
TlsSwitchableConnection(std::unique_ptr< ConnectionBase > conn, SslMode ssl_mode, protocol_state_type state)
Definition: connection_base.h:275
 
void async_recv(Func &&func)
async receive data from connection into the channel's receive buffer.
Definition: connection_base.h:318
 
net::impl::socket::native_handle_type native_handle() const
Definition: connection_base.h:368
 
stdx::expected< void, std::error_code > cancel()
Definition: connection_base.h:393
 
void assign_connection(std::unique_ptr< ConnectionBase > conn)
assign a low-level connection.
Definition: connection_base.h:297
 
void async_wait_error(Func &&func)
Definition: connection_base.h:356
 
Channel channel_
Definition: connection_base.h:426
 
stdx::expected< void, std::error_code > shutdown(net::socket_base::shutdown_type st) const
Definition: connection_base.h:379
 
stdx::expected< void, std::error_code > close() const
Definition: connection_base.h:372
 
const Channel & channel() const
Definition: connection_base.h:362
 
static constexpr size_t kRecvBufferSize
Definition: connection_base.h:272
 
SslMode ssl_mode() const
Definition: connection_base.h:364
 
TlsSwitchableConnection(std::unique_ptr< ConnectionBase > conn, SslMode ssl_mode, Channel channel, protocol_state_type state)
Definition: connection_base.h:284
 
Definition: io_context.h:61
 
executor_type get_executor() noexcept
Definition: io_context.h:1094
 
static constexpr wait_type wait_read
Definition: socket.h:168
 
shutdown_type
Definition: socket.h:172
 
static constexpr wait_type wait_write
Definition: socket.h:169
 
static constexpr wait_type wait_error
Definition: socket.h:170
 
Definition: expected.h:286
 
#define harness_assert(COND)
Improved assert()
Definition: harness_assert.h:37
 
#define T
Definition: jit_executor_value.cc:373
 
static MYSQL * sock
Definition: mysqlcheck.cc:57
 
Definition: buf0block_hint.cc:30
 
constexpr value_type ssl
Definition: classic_protocol_constants.h:49
 
Protocol
Definition: protocol.h:35
 
std::error_code make_error_code(DynamicLoaderErrc ec)
make error_code from a DynamicLoaderErrc.
Definition: dynamic_loader.cc:97
 
stdx::expected< native_handle_type, error_type > socket(int family, int sock_type, int protocol)
Definition: socket.h:63
 
int native_handle_type
Definition: socket_constants.h:51
 
void async_read(AsyncReadStream &stream, DynamicBuffer &&b, CompletionCondition completion_condition, CompletionToken &&token)
Definition: buffer.h:933
 
stdx::expected< size_t, std::error_code > write(SyncWriteStream &stream, const ConstBufferSequence &buffers)
Definition: buffer.h:977
 
dynamic_vector_buffer< T, Allocator > dynamic_buffer(std::vector< T, Allocator > &vec) noexcept
Definition: buffer.h:661
 
auto defer(CompletionToken &&token)
Definition: executor.h:779
 
void async_write(AsyncWriteStream &stream, const ConstBufferSequence &buffers, CompletionCondition cond, CompletionToken &&token)
Definition: buffer.h:1066
 
std::error_condition make_error_condition(net::stream_errc e) noexcept
Definition: buffer.h:107
 
Definition: gcs_xcom_synode.h:64
 
unexpected(E) -> unexpected< E >
 
std::basic_ostringstream< char, std::char_traits< char >, ut::allocator< char > > ostringstream
Specialization of basic_ostringstream which uses ut::allocator.
Definition: ut0new.h:2876
 
static void swap(String &a, String &b) noexcept
Definition: sql_string.h:650
 
SslMode
Definition: ssl_mode.h:29
 
Definition: connection_base.h:96