26#ifndef MYSQL_ROUTER_CHANNEL_INCLUDED
27#define MYSQL_ROUTER_CHANNEL_INCLUDED
32#include <system_error>
43#include <openssl/ssl.h>
70 std::vector<uint8_t, default_init_allocator<uint8_t>>;
81 recv_plain_buffer_.clear();
83 send_plain_buffer_.clear();
85 payload_buffer_.clear();
95 ssl_.reset(SSL_new(ssl_ctx));
97 SSL_set_bio(ssl_.get(), BIO_new(BIO_s_mem()), BIO_new(BIO_s_mem()));
113 bool tls_init_is_finished();
127 template <
class DynamicBuffer>
128 typename std::enable_if<net::is_dynamic_buffer<DynamicBuffer>::value,
131 auto orig_size = dyn_buf.size();
132 size_t transferred{};
134 auto write_res = write_plain(dyn_buf.data(0, orig_size));
139 transferred += write_res.value();
140 dyn_buf.consume(write_res.value());
152 return write_plain(b);
161 template <
class DynamicBuffer>
164 auto orig_size = dyn_buf.size();
166 size_t transferred{};
168 dyn_buf.grow(grow_size);
170 const auto res_res = read_plain(dyn_buf.data(orig_size, grow_size));
172 dyn_buf.shrink(grow_size);
176 transferred += res_res.value();
177 dyn_buf.shrink(grow_size - res_res.value());
252 recv_buffer_type &send_plain_buffer();
263 const recv_view_type &recv_view()
const;
280 const recv_view_type &recv_plain_view()
const;
283 void consume_raw(
size_t count);
286 void consume_plain(
size_t count);
289 void view_discard_raw();
292 void view_discard_plain();
295 void view_sync_raw();
298 void view_sync_plain();
324 SSL *
ssl()
const {
return ssl_.get(); }
SSL aware socket buffers.
Definition: channel.h:65
stdx::expected< size_t, std::error_code > write(const net::const_buffer &b)
write unencrypted net::const_buffer to the channel.
Definition: channel.h:151
recv_buffer_type send_buffer_
Definition: channel.h:342
recv_buffer_type send_plain_buffer_
Definition: channel.h:341
const recv_buffer_type & recv_buffer() const
buffer of data that was received from the socket.
Definition: channel.h:258
void clear()
clears all buffers.
Definition: channel.h:79
size_t want_recv() const
bytes wanted.
Definition: channel.h:235
stdx::expected< size_t, std::error_code > read(DynamicBuffer &dyn_buf, size_t sz)
read unencrypted data from channel to a net::dynamic_buffer.
Definition: channel.h:162
const recv_buffer_type & send_buffer() const
buffer of data to be sent to the socket.
Definition: channel.h:268
void init_ssl(SSL_CTX *ssl_ctx)
initialize the SSL session.
Definition: channel.h:94
void is_tls(bool v)
mark channel as containing TLS data in the recv_buffer().
Definition: channel.h:307
void want_recv(size_t wanted)
bytes wanted.
Definition: channel.h:228
recv_buffer_type & payload_buffer()
Definition: channel.h:275
SSL * ssl() const
get access to the raw SSL handle.
Definition: channel.h:324
std::enable_if< net::is_dynamic_buffer< DynamicBuffer >::value, stdx::expected< size_t, std::error_code > >::type write(DynamicBuffer &dyn_buf)
write unencrypted net::dynamic_buffer to the channel.
Definition: channel.h:130
const recv_buffer_type & payload_buffer() const
payload buffer for
Definition: channel.h:273
Channel(Ssl ssl)
Definition: channel.h:74
recv_view_type recv_view_
Definition: channel.h:335
recv_buffer_type recv_buffer_
Definition: channel.h:334
std::span< typename recv_buffer_type::value_type > recv_view_type
Definition: channel.h:71
recv_view_type recv_plain_view_
Definition: channel.h:337
mysql_harness::Ssl Ssl
Definition: channel.h:72
recv_buffer_type & send_buffer()
buffer of data to be sent to the socket.
Definition: channel.h:247
std::vector< uint8_t, default_init_allocator< uint8_t > > recv_buffer_type
Definition: channel.h:70
bool is_tls() const
check if connection switched to TLS.
Definition: channel.h:312
recv_buffer_type & recv_buffer()
buffer of data that was received from the socket.
Definition: channel.h:240
recv_buffer_type payload_buffer_
Definition: channel.h:339
recv_buffer_type recv_plain_buffer_
Definition: channel.h:336
Definition: expected.h:284
static int count
Definition: myisam_ftdump.cc:45
constexpr value_type ssl
Definition: classic_protocol_constants.h:49
std::unique_ptr< SSL, mysql_harness::impl::Deleter_SSL > Ssl
Definition: tls_types.h:48
Definition: gcs_xcom_synode.h:64
unexpected(E) -> unexpected< E >
required string type
Definition: replication_group_member_actions.proto:34
#define ROUTING_CONNECTIONS_EXPORT
Definition: routing_connections_export.h:15