25#ifndef MYSQLD_MOCK_STATEMENT_READER_INCLUDED
26#define MYSQLD_MOCK_STATEMENT_READER_INCLUDED
36#include <openssl/bio.h>
70 const std::vector<session_tracker_field> &trackers);
76 std::vector<classic_protocol::message::server::ColumnMeta>
columns;
77 std::vector<RowValueType>
rows;
109 ssl_ = std::move(rhs.ssl_);
134 template <
class CompletionToken>
141 auto write_ec = write_res.error();
147 [
this, compl_handler = std::move(
init.completion_handler)](
148 std::error_code ec)
mutable {
150 compl_handler(ec, {});
158 [compl_handler = std::move(
init.completion_handler),
159 ec = write_res.error()]() { compl_handler(ec, {}); });
165 [compl_handler = std::move(
init.completion_handler),
166 transferred = write_res.value()]() {
167 compl_handler({}, transferred);
171 return init.result.get();
174 template <
class CompletionToken>
177 async_send_tls(std::forward<CompletionToken>(token));
180 std::forward<CompletionToken>(token));
189 template <
class CompletionToken>
196 auto orig_size =
buf.size();
197 auto grow_size = 16 * 1024;
200 size_t transferred{};
201 auto read_res = read_ssl(
buf.data(orig_size, grow_size));
203 transferred = read_res.value();
206 buf.shrink(grow_size - transferred);
209 const auto read_ec = read_res.error();
211 client_socket_.async_wait(
214 [
this, compl_handler = std::move(
init.completion_handler)](
215 std::error_code ec)
mutable {
217 compl_handler(ec, {});
221 async_receive_tls(std::move(compl_handler));
228 client_socket_.get_executor(),
229 [compl_handler = std::move(
init.completion_handler),
230 ec = map_tls_error_code(read_ec)]() { compl_handler(ec, {}); });
235 [compl_handler = std::move(
init.completion_handler),
236 transferred]() { compl_handler({}, transferred); });
239 return init.result.get();
242 template <
class CompletionToken>
245 return async_receive_tls(std::forward<CompletionToken>(token));
248 std::forward<CompletionToken>(token));
252 template <
class CompletionToken>
257 auto res = tls_accept();
259 auto ec = res.error();
264 client_socket_.async_wait(
265 wt, [&, compl_handler = std::move(
init.completion_handler)](
266 std::error_code ec)
mutable {
273 async_tls_accept(std::move(compl_handler));
276 net::defer(client_socket_.get_executor().context(),
277 [ec, compl_handler = std::move(
init.completion_handler)]() {
282 net::defer(client_socket_.get_executor().context(),
283 [compl_handler = std::move(
init.completion_handler)]() {
288 return init.result.get();
291 const std::vector<uint8_t> &
send_buffer()
const {
return send_buffer_; }
300 auth_method_name_ = auth_method_name;
306 auth_method_data_ = auth_method_data;
311 static bool authenticate(
const std::string &auth_method_name,
312 const std::string &auth_method_data,
314 const std::vector<uint8_t> &auth_response);
320 const SSL *
ssl()
const {
return ssl_.get(); }
337 std::string username_{};
338 std::string auth_method_name_{};
339 std::string auth_method_data_{};
348 std::unique_ptr<SSL, SSL_Deleter>
ssl_;
361 bool cert_required{
false};
394 bool is_greeting) = 0;
static mysql_service_status_t init()
Component initialization.
Definition: audit_api_message_emit.cc:570
TLS Context for the server side.
Definition: tls_server_context.h:50
gtid changed.
Definition: classic_protocol_session_track.h:146
Definition: executor.h:71
Definition: socket.h:1089
io_context & context() const noexcept
Definition: io_context.h:1001
Definition: io_context.h:60
executor_type get_executor() noexcept
Definition: io_context.h:1079
TCP protocol.
Definition: internet.h:1154
basic_endpoint< tcp > endpoint
Definition: internet.h:1156
basic_stream_socket< tcp > socket
Definition: internet.h:1158
static constexpr wait_type wait_read
Definition: socket.h:167
static constexpr wait_type wait_write
Definition: socket.h:168
Definition: statement_reader.h:343
void operator()(SSL *v)
Definition: statement_reader.h:345
Definition: statement_reader.h:94
std::string username() const
Definition: statement_reader.h:297
virtual ~ProtocolBase()=default
net::steady_timer & exec_timer()
Definition: statement_reader.h:324
TlsServerContext & tls_ctx_
Definition: statement_reader.h:341
ProtocolBase(socket_type client_sock, endpoint_type client_ep, TlsServerContext &tls_ctx)
Definition: protocol_base.cc:35
stdx::expected< size_t, std::error_code > avail_ssl()
Definition: protocol_base.cc:73
const std::vector< uint8_t > & send_buffer() const
Definition: statement_reader.h:291
void async_send_tls(CompletionToken &&token)
Definition: statement_reader.h:135
socket_type client_socket_
Definition: statement_reader.h:333
const SSL * ssl() const
Definition: statement_reader.h:320
std::string auth_method_data() const
Definition: statement_reader.h:309
void auth_method_name(const std::string &auth_method_name)
Definition: statement_reader.h:299
ProtocolBase(ProtocolBase &&)=default
ProtocolBase & operator=(ProtocolBase &&rhs)
Definition: statement_reader.h:107
void async_tls_accept(CompletionToken &&token)
Definition: statement_reader.h:253
virtual void encode_resultset(const ResultsetResponse &response)=0
endpoint_type client_ep_
Definition: statement_reader.h:334
std::vector< uint8_t > recv_buffer_
Definition: statement_reader.h:350
const net::ip::tcp::socket & client_socket() const
Definition: statement_reader.h:293
void async_receive_tls(CompletionToken &&token)
Definition: statement_reader.h:190
void auth_method_data(const std::string &auth_method_data)
Definition: statement_reader.h:305
bool is_tls()
Definition: statement_reader.h:318
void async_receive(CompletionToken &&token)
Definition: statement_reader.h:243
typename protocol_type::endpoint endpoint_type
Definition: statement_reader.h:98
void async_send(CompletionToken &&token)
Definition: statement_reader.h:175
std::string auth_method_name() const
Definition: statement_reader.h:303
virtual void encode_error(const ErrorResponse &resp)=0
stdx::expected< size_t, std::error_code > read_ssl(const net::mutable_buffer &buf)
Definition: protocol_base.cc:58
static std::error_code map_tls_error_code(std::error_code ec)
Definition: statement_reader.h:185
void username(const std::string &username)
Definition: statement_reader.h:295
ProtocolBase & operator=(const ProtocolBase &)=delete
virtual void encode_ok(const OkResponse &resp)=0
typename protocol_type::socket socket_type
Definition: statement_reader.h:97
stdx::expected< size_t, std::error_code > write_ssl(const net::const_buffer &buf)
Definition: protocol_base.cc:47
std::vector< uint8_t > send_buffer_
Definition: statement_reader.h:351
net::io_context & io_context()
Definition: statement_reader.h:328
ProtocolBase(const ProtocolBase &)=delete
std::unique_ptr< SSL, SSL_Deleter > ssl_
Definition: statement_reader.h:348
Definition: statement_reader.h:354
StatementReaderBase & operator=(StatementReaderBase &&)=default
virtual std::vector< AsyncNotice > get_async_notices()=0
virtual stdx::expected< handshake_data, ErrorResponse > handshake(bool is_greeting)=0
StatementReaderBase(StatementReaderBase &&)=default
virtual ~StatementReaderBase()=default
virtual void set_session_ssl_info(const SSL *ssl)=0
virtual void handle_statement(const std::string &statement, ProtocolBase *protocol)=0
Returns the data about the next statement from the json file.
StatementReaderBase & operator=(const StatementReaderBase &)=default
StatementReaderBase()=default
StatementReaderBase(const StatementReaderBase &)=default
virtual std::chrono::microseconds get_default_exec_time()=0
Returns the default execution time in microseconds.
static char * password
Definition: mysql_secure_installation.cc:57
Definition: buf0block_hint.cc:29
constexpr value_type ssl
Definition: classic_protocol_constants.h:48
borrowable::message::server::Error< false > Error
Definition: classic_protocol_message.h:1410
borrowable::message::server::Greeting< false > Greeting
Definition: classic_protocol_message.h:1412
borrowable::message::server::Eof< false > Eof
Definition: classic_protocol_message.h:1411
borrowable::message::server::Ok< false > Ok
Definition: classic_protocol_message.h:1409
borrowable::session_track::TransactionCharacteristics< false > TransactionCharacteristics
Definition: classic_protocol_session_track.h:297
borrowable::session_track::TransactionState TransactionState
Definition: classic_protocol_session_track.h:298
borrowable::session_track::SystemVariable< false > SystemVariable
Definition: classic_protocol_session_track.h:299
borrowable::session_track::State State
Definition: classic_protocol_session_track.h:301
borrowable::session_track::Schema< false > Schema
Definition: classic_protocol_session_track.h:300
dynamic_vector_buffer< T, Allocator > dynamic_buffer(std::vector< T, Allocator > &vec) noexcept
Definition: buffer.h:660
auto defer(CompletionToken &&token)
Definition: executor.h:786
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:417
std::enable_if_t< is_dynamic_buffer< DynamicBuffer >::value, void > async_read(AsyncReadStream &stream, DynamicBuffer &&b, CompletionCondition completion_condition, CompletionToken &&token)
Definition: buffer.h:926
std::enable_if_t< is_const_buffer_sequence_v< ConstBufferSequence >, void > async_write(AsyncWriteStream &stream, const ConstBufferSequence &buffers, CompletionCondition cond, CompletionToken &&token)
Definition: buffer.h:1073
Definition: mock_server_component.h:35
std::variant< classic_protocol::session_track::TransactionCharacteristics, classic_protocol::session_track::TransactionState, classic_protocol::session_track::SystemVariable, classic_protocol::session_track::Schema, classic_protocol::session_track::State, classic_protocol::session_track::Gtid > session_tracker_field
Definition: statement_reader.h:67
classic_protocol::message::server::Ok OkResponse
Definition: statement_reader.h:82
std::vector< std::optional< std::string > > RowValueType
Vector for keeping has_value|string representation of the values of the single row (ordered by column...
Definition: statement_reader.h:59
classic_protocol::message::server::Error ErrorResponse
Definition: statement_reader.h:83
std::string encode_session_trackers(const std::vector< session_tracker_field > &trackers)
Definition: duktape_statement_reader.cc:90
Definition: statement_reader.h:85
std::chrono::milliseconds send_offset_ms
Definition: statement_reader.h:88
bool is_local
Definition: statement_reader.h:90
std::string payload
Definition: statement_reader.h:91
unsigned type
Definition: statement_reader.h:89
Keeps result data for single SQL statement that returns resultset.
Definition: statement_reader.h:75
std::vector< RowValueType > rows
Definition: statement_reader.h:77
classic_protocol::message::server::Eof end_of_rows
Definition: statement_reader.h:79
std::vector< classic_protocol::message::server::ColumnMeta > columns
Definition: statement_reader.h:76
Definition: statement_reader.h:356
std::optional< std::string > username
Definition: statement_reader.h:359
std::chrono::microseconds exec_time
Definition: statement_reader.h:365
classic_protocol::message::server::Greeting greeting
Definition: statement_reader.h:357
std::optional< std::string > cert_issuer
Definition: statement_reader.h:363
std::optional< std::string > password
Definition: statement_reader.h:360
std::optional< std::string > cert_subject
Definition: statement_reader.h:362
Definition: mysqlslap.cc:218