26#ifndef ROUTING_X_CONNECTION_INCLUDED
27#define ROUTING_X_CONNECTION_INCLUDED
64 public std::enable_shared_from_this<MysqlRoutingXConnection> {
74 std::unique_ptr<ConnectionBase> client_connection,
75 std::unique_ptr<RoutingConnectionBase> client_routing_connection,
80 std::move(client_routing_connection),
96 template <
typename... Args>
97 [[nodiscard]]
static std::shared_ptr<MysqlRoutingXConnection>
create(
100 return std::shared_ptr<MysqlRoutingXConnection>(
105 std::shared_ptr<MysqlRoutingXConnection>
getptr() {
106 return shared_from_this();
110 std::vector<uint8_t> &error_frame, uint16_t error_code,
111 const std::string &msg,
const std::string &sql_state =
"HY000",
112 bool is_severity_fatal =
false);
759 is_completed_.wait([](
auto ready) {
return ready ==
true; });
778 clock_type::time_point
started_{clock_type::now()};
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:247
SSL aware socket buffers.
Definition: channel.h:66
void set_routing_source(std::string name)
Definition: connection.h:267
const routing_guidelines::Server_info & server_info() const
Definition: connection.h:271
void destination_id(std::optional< mysql_harness::Destination > id)
Definition: connection.h:259
std::string routing_source() const
Definition: connection.h:266
Manage destinations for a Connection Routing.
Definition: destination.h:84
bool routing_guidelines_session_rand_used() const
Check if routing guidelines uses $.session.rand as a match criterion.
Definition: destination.h:166
Definition: connection.h:47
std::chrono::system_clock clock_type
Definition: connection.h:132
MySQLRoutingContext & context()
Definition: connection.h:56
void client_address(const std::string &dest)
Definition: connection.h:120
void set_routing_guidelines_session_rand()
Definition: connection.cc:342
MySQLRoutingContext holds data used by MySQLRouting (1 per plugin instances) and MySQLRoutingConnecti...
Definition: context.h:54
Definition: x_connection.h:64
void client_cap_get()
client wants to get the capabilities of the server.
Definition: x_connection.cc:862
void recv_client_failed(std::error_code ec)
Definition: x_connection.cc:354
const ServerSideConnection & server_conn() const
Definition: x_connection.h:738
void server_recv_switch_tls_response()
Definition: x_connection.cc:922
void async_send_server(Function next)
Definition: x_connection.cc:427
void server_recv_prepare_deallocate_response_forward()
Definition: x_connection.cc:2411
void server_recv_expect_close_response_forward_last()
Definition: x_connection.cc:2616
void server_recv_crud_delete_response()
Definition: x_connection.cc:2110
void client_crud_modify_view()
Definition: x_connection.cc:2688
void client_cursor_open()
Definition: x_connection.cc:2817
void server_recv_cap_get_response_forward()
Definition: x_connection.cc:1335
void server_recv_stmt_execute_response_forward()
Definition: x_connection.cc:2024
void server_recv_prepare_execute_response_forward()
Definition: x_connection.cc:2483
void client_cursor_fetch()
Definition: x_connection.cc:2884
void client_stmt_execute()
Definition: x_connection.cc:1967
void server_recv_crud_delete_response_forward()
Definition: x_connection.cc:2156
void server_recv_cap_get_response()
Definition: x_connection.cc:1291
stdx::expected< ForwardResult, std::error_code > forward_frame_from_server_to_client()
Definition: x_connection.cc:710
void client_prepare_execute()
Definition: x_connection.cc:2426
void passthrough_tls_init()
void server_recv_cap_set_response_forward_last()
Definition: x_connection.cc:1867
ServerSideConnection & server_conn()
Definition: x_connection.h:737
void server_recv_switch_tls_response_passthrough_forward_last()
Definition: x_connection.cc:1081
ClientSideConnection client_conn_
Definition: x_connection.h:788
void server_recv_crud_modify_view_response_forward()
Definition: x_connection.cc:2739
void async_run()
Definition: x_connection.cc:314
void server_recv_cursor_close_response()
Definition: x_connection.cc:2958
void server_tls_shutdown()
Definition: x_connection.cc:3191
void client_sess_auth_start()
Definition: x_connection.cc:1874
stdx::expected< ForwardResult, std::error_code > forward_frame_from_client_to_server()
Definition: x_connection.cc:676
void client_crud_drop_view()
Definition: x_connection.cc:2753
void connect()
Definition: x_connection.cc:743
void server_recv_crud_find_response()
Definition: x_connection.cc:2041
void client_crud_create_view()
Definition: x_connection.cc:2623
void server_recv_cap_get_response_forward_last()
Definition: x_connection.cc:1340
ServerSideConnection server_conn_
Definition: x_connection.h:789
static std::shared_ptr< MysqlRoutingXConnection > create(Args &&...args)
Definition: x_connection.h:97
void server_recv_expect_close_response_forward()
Definition: x_connection.cc:2611
void call_next_function(Function next)
Definition: x_connection.h:282
stdx::expected< void, std::error_code > forward_tls(Channel &src_channel, Channel &dst_channel)
Definition: x_connection.cc:1094
int active_work_
Definition: x_connection.h:774
void client_tls_shutdown()
Definition: x_connection.cc:3198
SslMode source_ssl_mode() const
Definition: x_connection.h:114
SslMode dest_ssl_mode() const
Definition: x_connection.h:116
connector_type connector_
Definition: x_connection.h:786
void client_crud_update()
Definition: x_connection.cc:2231
void server_recv_stmt_execute_response_forward_last()
Definition: x_connection.cc:2029
void server_recv_session_close_response_forward()
Definition: x_connection.cc:3067
void forward_tls_server_to_client()
Definition: x_connection.cc:1163
void server_recv_crud_drop_view_response_forward_last()
Definition: x_connection.cc:2810
std::optional< mysql_harness::Destination > get_destination_id() const override
Definition: x_connection.h:740
void client_recv_auth_continue()
Definition: x_connection.cc:1955
Function
Definition: x_connection.h:124
@ kServerRecvCrudDropViewResponseForward
@ kServerRecvCursorCloseResponseForward
@ kForwardTlsClientToServer
@ kServerRecvCrudUpdateResponse
@ kServerRecvCrudDeleteResponseForwardLast
@ kServerRecvSwitchTlsResponse
@ kServerRecvAuthResponseContinue
@ kServerRecvCrudModifyViewResponseForward
@ kServerRecvExpectOpenResponse
@ kServerRecvCursorOpenResponseForwardLast
@ kServerRecvCrudCreateViewResponseForwardLast
@ kServerRecvPreparePrepareResponse
@ kServerRecvCursorFetchResponseForward
@ kServerRecvExpectOpenResponseForward
@ kServerRecvCrudFindResponse
@ kServerRecvPrepareExecuteResponseForwardLast
@ kServerRecvCrudDeleteResponseForward
@ kServerRecvCrudUpdateResponseForward
@ kServerRecvPrepareDeallocateResponseForward
@ kServerRecvPrepareDeallocateResponseForwardLast
@ kServerRecvCrudCreateViewResponseForward
@ kServerRecvStmtExecuteResponseForwardLast
@ kServerRecvPreparePrepareResponseForward
@ kServerRecvCursorFetchResponseForwardLast
@ kServerRecvSessionCloseResponseForwardLast
@ kServerRecvPreparePrepareResponseForwardLast
@ kServerRecvCrudDeleteResponse
@ kServerRecvCursorCloseResponseForwardLast
@ kServerRecvSwitchTlsResponsePassthroughForward
@ kServerRecvCapGetResponse
@ kServerRecvSwitchTlsResponsePassthrough
@ kServerRecvExpectCloseResponseForwardLast
@ kServerRecvCrudModifyViewResponseForwardLast
@ kServerRecvExpectOpenResponseForwardLast
@ kServerRecvCursorCloseResponse
@ kServerRecvAuthResponse
@ kServerRecvExpectCloseResponseForward
@ kServerRecvCapGetResponseForwardLast
@ kServerRecvCrudFindResponseForward
@ kServerRecvCrudDropViewResponse
@ kServerRecvPrepareExecuteResponseForward
@ kServerRecvCrudUpdateResponseForwardLast
@ kServerRecvCapSetResponseForwardLast
@ kServerRecvCrudFindResponseForwardLast
@ kServerRecvCrudInsertResponse
@ kServerRecvCursorOpenResponseForward
@ kServerRecvCheckCapsResponse
@ kServerRecvSessionResetResponseForward
@ kServerRecvCursorOpenResponse
@ kServerRecvSwitchTlsResponsePassthroughForwardOk
@ kServerRecvSwitchTlsResponsePassthroughForwardLast
@ kServerRecvStmtExecuteResponse
@ kServerRecvCrudModifyViewResponse
@ kServerRecvExpectCloseResponse
@ kForwardTlsServerToClient
@ kServerRecvStmtExecuteResponseForward
@ kServerRecvCapSetResponse
@ kServerRecvCrudInsertResponseForward
@ kClientPrepareDeallocate
@ kServerRecvSessionCloseResponseForward
@ kServerRecvSessionResetResponseForwardLast
@ kServerRecvCrudDropViewResponseForwardLast
@ kServerRecvCapSetResponseForward
@ kServerRecvCapGetResponseForward
@ kServerRecvPrepareExecuteResponse
@ kServerRecvAuthResponseForward
@ kServerRecvAuthResponseForwardLast
@ kServerRecvSessionCloseResponse
@ kClientRecvAuthContinue
@ kServerRecvCursorFetchResponse
@ kServerRecvCrudCreateViewResponse
@ kServerRecvPrepareDeallocateResponse
@ kServerRecvCrudInsertResponseForwardLast
@ kServerRecvSessionResetResponse
void server_recv_expect_close_response()
Definition: x_connection.cc:2565
void server_recv_prepare_deallocate_response_forward_last()
Definition: x_connection.cc:2418
void server_recv_prepare_execute_response_forward_last()
Definition: x_connection.cc:2489
void server_recv_session_reset_response_forward()
Definition: x_connection.cc:3131
void tls_connect_init()
Definition: x_connection.cc:1205
bool greeting_from_router_
Definition: x_connection.h:781
void client_session_reset()
Definition: x_connection.cc:3080
void server_recv_session_close_response_forward_last()
Definition: x_connection.cc:3073
routing_guidelines::Server_info get_server_info() const override
Definition: x_connection.h:769
void server_recv_prepare_prepare_response_forward_last()
Definition: x_connection.cc:2351
void client_expect_close()
Definition: x_connection.cc:2560
void server_recv_cap_set_response_forward()
Definition: x_connection.cc:1862
void server_recv_cursor_open_response_forward_last()
Definition: x_connection.cc:2877
void forward_client_to_server(Function this_func, Function next_func)
Definition: x_connection.cc:688
void disconnect() override
Definition: x_connection.cc:247
void server_recv_cursor_fetch_response()
Definition: x_connection.cc:2889
void server_socket_failed(std::error_code ec)
Definition: x_connection.cc:362
const ClientSideConnection & client_conn() const
Definition: x_connection.h:735
ServerSideConnection::protocol_state_type & server_protocol()
Definition: x_connection.h:727
void server_recv_session_close_response()
Definition: x_connection.cc:3021
void async_send_client(Function next)
Definition: x_connection.cc:393
void server_recv_cursor_open_response_forward()
Definition: x_connection.cc:2872
std::string get_routing_source() const override
Definition: x_connection.h:750
void async_send_server_buffer(net::const_buffer send_buf, Function next)
Definition: x_connection.cc:1363
void send_server_failed(std::error_code ec)
Definition: x_connection.cc:330
void server_recv_server_greeting_from_server()
Definition: x_connection.cc:3144
void send_client_failed(std::error_code ec)
Definition: x_connection.cc:346
void async_send_client_buffer(net::const_buffer send_buf, Function next)
Definition: x_connection.cc:1345
void client_con_close()
Definition: x_connection.cc:304
void server_recv_crud_insert_response_forward_last()
Definition: x_connection.cc:2224
ClientSideConnection & client_conn()
Definition: x_connection.h:734
void server_recv_switch_tls_response_passthrough_forward()
Definition: x_connection.cc:1074
void server_recv_cursor_close_response_forward()
Definition: x_connection.cc:3004
void forward_tls_client_to_server()
Definition: x_connection.cc:1148
void client_session_close()
Definition: x_connection.cc:3016
ForwardResult
Definition: x_connection.h:565
void client_cursor_close()
Definition: x_connection.cc:2953
void server_recv_cursor_fetch_response_forward_last()
Definition: x_connection.cc:2946
void client_socket_failed(std::error_code ec)
Definition: x_connection.cc:377
void server_recv_prepare_prepare_response()
Definition: x_connection.cc:2299
void server_recv_auth_response_forward()
Definition: x_connection.cc:1945
void server_recv_auth_response_continue()
Definition: x_connection.cc:1950
std::optional< mysql_harness::DestinationEndpoint > destination_endpoint() const override
Definition: x_connection.h:745
void tls_accept_finalize()
Definition: x_connection.cc:1635
void server_recv_session_reset_response()
Definition: x_connection.cc:3085
void server_recv_crud_find_response_forward_last()
Definition: x_connection.cc:2098
void server_send_switch_to_tls()
Definition: x_connection.cc:1712
void client_send_server_greeting_from_router()
Definition: x_connection.cc:461
void client_recv_cmd()
Definition: x_connection.cc:465
void forward_tls_init()
Definition: x_connection.cc:1178
void client_expect_open()
Definition: x_connection.cc:2497
void server_recv_check_caps_response()
Definition: x_connection.cc:1740
void server_recv_crud_create_view_response_forward()
Definition: x_connection.cc:2674
void server_recv_crud_drop_view_response()
Definition: x_connection.cc:2758
void server_send_check_caps()
Definition: x_connection.cc:1727
void forward_server_to_client(Function this_func, Function next_func)
Definition: x_connection.cc:722
void recv_server_failed(std::error_code ec)
Definition: x_connection.cc:338
void server_recv_crud_insert_response_forward()
Definition: x_connection.cc:2219
void server_recv_crud_find_response_forward()
Definition: x_connection.cc:2093
void server_recv_expect_open_response_forward_last()
Definition: x_connection.cc:2553
void server_recv_auth_response()
Definition: x_connection.cc:1896
void server_recv_expect_open_response()
Definition: x_connection.cc:2502
void done()
Definition: x_connection.cc:3189
void tls_connect()
connect server_channel to a TLS server.
Definition: x_connection.cc:1233
void client_crud_insert()
Definition: x_connection.cc:2168
void set_routing_source(std::string name) override
Definition: x_connection.h:754
void server_recv_cursor_open_response()
Definition: x_connection.cc:2822
void server_recv_crud_drop_view_response_forward()
Definition: x_connection.cc:2804
void server_recv_cursor_fetch_response_forward()
Definition: x_connection.cc:2941
void server_recv_cap_set_response()
Definition: x_connection.cc:1816
void server_recv_crud_update_response()
Definition: x_connection.cc:2236
const ServerSideConnection::protocol_state_type & server_protocol() const
Definition: x_connection.h:730
void tls_accept()
accept a TLS handshake.
Definition: x_connection.cc:1585
void server_recv_crud_update_response_forward_last()
Definition: x_connection.cc:2287
void tls_accept_init()
Definition: x_connection.cc:1564
void server_recv_switch_tls_response_passthrough()
Definition: x_connection.cc:1024
void server_recv_crud_modify_view_response_forward_last()
Definition: x_connection.cc:2745
void client_prepare_prepare()
Definition: x_connection.cc:2294
void server_recv_auth_response_forward_last()
Definition: x_connection.cc:1960
MysqlRoutingXConnection(MySQLRoutingContext &context, DestinationManager *destination_manager, std::unique_ptr< ConnectionBase > client_connection, std::unique_ptr< RoutingConnectionBase > client_routing_connection, std::function< void(MySQLRoutingConnectionBase *)> remove_callback)
Definition: x_connection.h:72
void server_recv_crud_insert_response()
Definition: x_connection.cc:2173
void server_recv_session_reset_response_forward_last()
Definition: x_connection.cc:3137
ClientSideConnection::protocol_state_type & client_protocol()
Definition: x_connection.h:720
clock_type::time_point last_trace_
Definition: x_connection.h:779
const connector_type & connector() const
Definition: x_connection.h:784
void server_recv_expect_open_response_forward()
Definition: x_connection.cc:2548
void server_recv_switch_tls_response_passthrough_forward_ok()
Definition: x_connection.cc:1088
void client_cap_set()
client wants to set the capabilities.
Definition: x_connection.cc:1386
void server_recv_cursor_close_response_forward_last()
Definition: x_connection.cc:3009
static stdx::expected< size_t, std::error_code > encode_error_packet(std::vector< uint8_t > &error_frame, uint16_t error_code, const std::string &msg, const std::string &sql_state="HY000", bool is_severity_fatal=false)
Definition: x_connection.cc:288
void server_recv_crud_update_response_forward()
Definition: x_connection.cc:2282
void wait_client_close()
Definition: x_connection.cc:3184
void client_crud_find()
Definition: x_connection.cc:2036
net::impl::socket::native_handle_type get_client_fd() const override
Definition: x_connection.h:118
const ClientSideConnection::protocol_state_type & client_protocol() const
Definition: x_connection.h:723
WaitableMonitor< bool > is_completed_
Definition: x_connection.h:791
void server_init_tls()
Definition: x_connection.cc:1657
void server_recv_prepare_deallocate_response()
Definition: x_connection.cc:2364
void finish()
Definition: x_connection.cc:3148
void server_recv_crud_delete_response_forward_last()
Definition: x_connection.cc:2161
void completed() override
Definition: x_connection.h:762
void async_recv_server(Function next)
Definition: x_connection.cc:448
void server_recv_crud_create_view_response_forward_last()
Definition: x_connection.cc:2680
void server_recv_crud_create_view_response()
Definition: x_connection.cc:2628
std::shared_ptr< MysqlRoutingXConnection > getptr()
Definition: x_connection.h:105
void wait_until_completed() override
Definition: x_connection.h:758
void server_recv_prepare_prepare_response_forward()
Definition: x_connection.cc:2345
void server_recv_prepare_execute_response()
Definition: x_connection.cc:2431
void server_recv_crud_modify_view_response()
Definition: x_connection.cc:2693
void client_prepare_deallocate()
Definition: x_connection.cc:2359
connector_type & connector()
Definition: x_connection.h:783
void async_recv_client(Function next)
Definition: x_connection.cc:414
void server_recv_stmt_execute_response()
Definition: x_connection.cc:1972
void client_crud_delete()
Definition: x_connection.cc:2105
clock_type::time_point started_
Definition: x_connection.h:778
typename base_class_::protocol_state_type protocol_state_type
Definition: basic_protocol_splicer.h:91
protocol_state_type & protocol()
Definition: connection_base.h:399
std::unique_ptr< ConnectionBase > & connection()
Definition: connection_base.h:405
net::impl::socket::native_handle_type native_handle() const
Definition: connection_base.h:368
SslMode ssl_mode() const
Definition: connection_base.h:364
Monitor can be waited for.
Definition: monitor.h:62
Definition: x_connection.h:41
std::optional< uint8_t > msg_type_
Definition: x_connection.h:57
std::optional< FrameInfo > & current_frame()
Definition: x_connection.h:49
std::set< std::string > Capabilities
Definition: x_connection.h:43
const Capabilities & caps()
Definition: x_connection.h:52
void caps(Capabilities &&caps)
Definition: x_connection.h:53
std::optional< FrameInfo > current_frame_
Definition: x_connection.h:56
Capabilities caps_
Definition: x_connection.h:59
std::optional< uint8_t > & current_msg_type()
Definition: x_connection.h:50
int native_handle_type
Definition: socket_constants.h:51
Define std::hash<Gtid>.
Definition: gtid.h:355
SslMode
Definition: ssl_mode.h:29
case opt name
Definition: sslopt-case.h:29
Definition: x_connection.h:44
size_t frame_size_
size of the whole frame
Definition: x_connection.h:45
size_t forwarded_frame_size_
size of the forwarded part of frame
Definition: x_connection.h:46
Information about one server destination.
Definition: routing_guidelines.h:80