MySQL 8.0.30
Source Code Documentation
violite.h
Go to the documentation of this file.
1/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is also distributed with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have included with MySQL.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22
23/**
24 @file include/violite.h
25 Vio Lite.
26 Purpose: include file for Vio that will work with C and C++.
27*/
28
29#ifndef vio_violite_h_
30#define vio_violite_h_
31
32#include "my_config.h"
33
34#include <stddef.h>
35#ifdef HAVE_SYS_SOCKET_H
36#include <sys/socket.h>
37#endif
38#include <sys/types.h>
39
40#include <string>
41
42#include "my_inttypes.h"
43#include "my_psi_config.h" // IWYU pragma: keep
47
49
50struct Vio;
51
52/* Simple vio interface in C; The functions are implemented in violite.c */
53
54#if !defined(_WIN32) && !defined(HAVE_KQUEUE)
55#define USE_PPOLL_IN_VIO
56#endif
57
58#if defined(__cplusplus) && defined(USE_PPOLL_IN_VIO)
59#include <signal.h>
60#include <atomic>
61#elif defined(__cplusplus) && defined(HAVE_KQUEUE)
62#include <sys/event.h>
63#include <atomic>
64#endif
65
66#ifdef HAVE_PSI_INTERFACE
68#endif
69
70#ifndef MYSQL_VIO
71struct Vio;
72
73typedef Vio Vio;
74#define MYSQL_VIO Vio *
75#endif
76
77enum enum_vio_type : int {
78 /**
79 Type of the connection is unknown.
80 */
82 /**
83 Used in case of TCP/IP connections.
84 */
86 /**
87 Used for Unix Domain socket connections. Unix only.
88 */
90 /**
91 Used for named pipe connections. Windows only.
92 */
94 /**
95 Used in case of SSL connections.
96 */
98 /**
99 Used for shared memory connections. Windows only.
100 */
102 /**
103 Used internally by the prepared statements
104 */
106 /**
107 Implicitly used by plugins that doesn't support any other VIO_TYPE.
108 */
110
112 /*
113 If a new type is added, please update LAST_VIO_TYPE. In addition, please
114 change get_vio_type_name() in vio/vio.c to return correct name for it.
115 */
118
119/**
120 Convert a vio type to a printable string.
121 @param vio_type the type
122 @param[out] str the string
123 @param[out] len the string length
124*/
125void get_vio_type_name(enum enum_vio_type vio_type, const char **str, int *len);
126
127/**
128 VIO I/O events.
129*/
135
136#define VIO_SOCKET_ERROR ((size_t)-1)
137#define VIO_SOCKET_WANT_READ ((size_t)-2)
138#define VIO_SOCKET_WANT_WRITE ((size_t)-3)
139
140#define VIO_LOCALHOST 1 /* a localhost connection */
141#define VIO_BUFFERED_READ 2 /* use buffered read */
142#define VIO_READ_BUFFER_SIZE 16384 /* size of read buffer */
143
147
148#ifdef _WIN32
149MYSQL_VIO vio_new_win32pipe(HANDLE hPipe);
150MYSQL_VIO vio_new_win32shared_memory(HANDLE handle_file_map, HANDLE handle_map,
151 HANDLE event_server_wrote,
152 HANDLE event_server_read,
153 HANDLE event_client_wrote,
154 HANDLE event_client_read,
155 HANDLE event_conn_closed);
156#else
157#define HANDLE void *
158#endif /* _WIN32 */
159
163 uint flags);
164bool vio_is_blocking(Vio *vio);
165int vio_set_blocking(Vio *vio, bool set_blocking_mode);
167size_t vio_read(MYSQL_VIO vio, uchar *buf, size_t size);
168size_t vio_read_buff(MYSQL_VIO vio, uchar *buf, size_t size);
169size_t vio_write(MYSQL_VIO vio, const uchar *buf, size_t size);
170/* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible */
172/* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible */
173int vio_keepalive(MYSQL_VIO vio, bool onoff);
174/* Whenever we should retry the last read/write operation. */
176/* Check that operation was timed out */
178#ifndef NDEBUG
179/* Short text description of the socket for those, who are curious.. */
180#define VIO_DESCRIPTION_SIZE 30 /* size of description */
182#endif // NDEBUG
183/* Return the type of the connection */
185/* Return last error number */
187/* Get socket number */
189/* Remote peer's address and name in text form */
190bool vio_peer_addr(MYSQL_VIO vio, char *buf, uint16 *port, size_t buflen);
191/* Wait for an I/O event notification. */
194#ifndef NDEBUG
196#endif
197/* Set timeout for a network operation. */
198int vio_timeout(MYSQL_VIO vio, uint which, int timeout_sec);
199/* Connect to a peer. */
200bool vio_socket_connect(MYSQL_VIO vio, struct sockaddr *addr, socklen_t len,
201 bool nonblocking, int timeout,
202 bool *connect_done = nullptr);
203
204bool vio_get_normalized_ip_string(const struct sockaddr *addr,
205 size_t addr_length, char *ip_string,
206 size_t ip_string_size);
207
208bool vio_is_no_name_error(int err_code);
209
210int vio_getnameinfo(const struct sockaddr *sa, char *hostname,
211 size_t hostname_size, char *port, size_t port_size,
212 int flags);
213
214extern "C" {
215#include <openssl/opensslv.h>
216}
217#if OPENSSL_VERSION_NUMBER < 0x0090700f
218#define DES_cblock des_cblock
219#define DES_key_schedule des_key_schedule
220#define DES_set_key_unchecked(k, ks) des_set_key_unchecked((k), *(ks))
221#define DES_ede3_cbc_encrypt(i, o, l, k1, k2, k3, iv, e) \
222 des_ede3_cbc_encrypt((i), (o), (l), *(k1), *(k2), *(k3), (iv), (e))
223#endif
224
225#if OPENSSL_VERSION_NUMBER >= 0x10100000L
226#define HAVE_OPENSSL11 1
227#endif // OPENSSL_VERSION_NUMBER
228
229#define HEADER_DES_LOCL_H dummy_something
230
231#include <openssl/err.h>
232#include <openssl/ssl.h>
233
251const char *sslGetErrString(enum enum_ssl_init_error err);
252
254 SSL_CTX *ssl_context;
255};
256
258 unsigned long *errptr);
260 SSL_SESSION *session, unsigned long *errptr, SSL **ssl);
261
263 const char *key_file, const char *cert_file, const char *ca_file,
264 const char *ca_path, const char *cipher, const char *ciphersuites,
265 enum enum_ssl_init_error *error, const char *crl_file, const char *crl_path,
266 const long ssl_ctx_flags, const char *server_host);
267
268long process_tls_version(const char *tls_version);
269
271 const char *key_file, const char *cert_file, const char *ca_file,
272 const char *ca_path, const char *cipher, const char *ciphersuites,
273 enum enum_ssl_init_error *error, const char *crl_file, const char *crl_path,
274 const long ssl_ctx_flags);
276
277void vio_ssl_end();
278
279void ssl_start(void);
280void vio_end(void);
281
282#if !defined(DONT_MAP_VIO)
283#define vio_delete(vio) (vio)->viodelete(vio)
284#define vio_errno(vio) (vio)->vioerrno(vio)
285#define vio_read(vio, buf, size) ((vio)->read)(vio, buf, size)
286#define vio_write(vio, buf, size) ((vio)->write)(vio, buf, size)
287#define vio_fastsend(vio) (vio)->fastsend(vio)
288#define vio_keepalive(vio, set_keep_alive) \
289 (vio)->viokeepalive(vio, set_keep_alive)
290#define vio_should_retry(vio) (vio)->should_retry(vio)
291#define vio_was_timeout(vio) (vio)->was_timeout(vio)
292#define vio_shutdown(vio) ((vio)->vioshutdown)(vio)
293#define vio_peer_addr(vio, buf, prt, buflen) \
294 (vio)->peer_addr(vio, buf, prt, buflen)
295#define vio_io_wait(vio, event, timeout) (vio)->io_wait(vio, event, timeout)
296#define vio_is_connected(vio) (vio)->is_connected(vio)
297#define vio_is_blocking(vio) (vio)->is_blocking(vio)
298#define vio_set_blocking(vio, val) (vio)->set_blocking(vio, val)
299#define vio_set_blocking_flag(vio, val) (vio)->set_blocking_flag(vio, val)
300#endif /* !defined(DONT_MAP_VIO) */
301
302/* This enumerator is used in parser - should be always visible */
310
311/*
312 This structure is for every connection on both sides.
313 Note that it has a non-default move assignment operator, so if adding more
314 members, you'll need to update operator=.
315*/
316struct Vio {
317 MYSQL_SOCKET mysql_socket; /* Instrumented socket */
318 bool localhost = {false}; /* Are we from localhost? */
319 enum_vio_type type = {NO_VIO_TYPE}; /* Type of connection */
320
321 int read_timeout = {-1}; /* Timeout value (ms) for read ops. */
322 int write_timeout = {-1}; /* Timeout value (ms) for write ops. */
323 int retry_count = {1}; /* Retry count */
324 bool inactive = {false}; /* Connection has been shutdown */
325
326 struct sockaddr_storage local; /* Local internet address */
327 struct sockaddr_storage remote; /* Remote internet address */
328 size_t addrLen = {0}; /* Length of remote address */
329 char *read_buffer = {nullptr}; /* buffer for vio_read_buff */
330 char *read_pos = {nullptr}; /* start of unfetched data in the
331 read buffer */
332 char *read_end = {nullptr}; /* end of unfetched data */
333
334#ifdef USE_PPOLL_IN_VIO
335 my_thread_t thread_id = {0}; // Thread PID
336 sigset_t signal_mask; // Signal mask
337 /*
338 Flag to indicate whether we are in poll or shutdown.
339 A true value of flag indicates either the socket
340 has called shutdown or it is sleeping on a poll call.
341 False value of this flag means that the socket is
342 not sleeping on a poll call.
343 This flag provides synchronization between two threads
344 one entering vio_io_wait and another entering vio_shutdown
345 for the same socket. If the other thread is waiting on poll
346 sleep, it wakes up the thread by sending a signal via
347 pthread_kill. Also it ensures that no other thread enters in
348 to a poll call if it's socket has undergone shutdown.
349
350 */
351 std::atomic_flag poll_shutdown_flag = ATOMIC_FLAG_INIT;
352#elif defined HAVE_KQUEUE
353 int kq_fd = {-1};
354 std::atomic_flag kevent_wakeup_flag = ATOMIC_FLAG_INIT;
355#endif
356
357#ifdef HAVE_SETNS
358 /**
359 Socket network namespace.
360 */
362#endif
363 /*
364 VIO vtable interface to be implemented by VIO's like SSL, Socket,
365 Named Pipe, etc.
366 */
367
368 /*
369 viodelete is responsible for cleaning up the VIO object by freeing
370 internal buffers, closing descriptors, handles.
371 */
372 void (*viodelete)(MYSQL_VIO) = {nullptr};
373 int (*vioerrno)(MYSQL_VIO) = {nullptr};
374 size_t (*read)(MYSQL_VIO, uchar *, size_t) = {nullptr};
375 size_t (*write)(MYSQL_VIO, const uchar *, size_t) = {nullptr};
376 int (*timeout)(MYSQL_VIO, uint, bool) = {nullptr};
377 int (*viokeepalive)(MYSQL_VIO, bool) = {nullptr};
378 int (*fastsend)(MYSQL_VIO) = {nullptr};
379 bool (*peer_addr)(MYSQL_VIO, char *, uint16 *, size_t) = {nullptr};
380 void (*in_addr)(MYSQL_VIO, struct sockaddr_storage *) = {nullptr};
381 bool (*should_retry)(MYSQL_VIO) = {nullptr};
382 bool (*was_timeout)(MYSQL_VIO) = {nullptr};
383 /*
384 vioshutdown is resposnible to shutdown/close the channel, so that no
385 further communications can take place, however any related buffers,
386 descriptors, handles can remain valid after a shutdown.
387 */
388 int (*vioshutdown)(MYSQL_VIO) = {nullptr};
389 bool (*is_connected)(MYSQL_VIO) = {nullptr};
390 bool (*has_data)(MYSQL_VIO) = {nullptr};
391 int (*io_wait)(MYSQL_VIO, enum enum_vio_io_event, int) = {nullptr};
392 bool (*connect)(MYSQL_VIO, struct sockaddr *, socklen_t, int) = {nullptr};
393#ifdef _WIN32
394#ifdef __clang__
395 OVERLAPPED overlapped = {0, 0, {{0, 0}}, nullptr};
396#else
397 // MSVC, at least up to 2015, gives an internal error on the above.
398 OVERLAPPED overlapped = {0};
399#endif
400 HANDLE hPipe{nullptr};
401#endif
402 void *ssl_arg = {nullptr};
407#if defined(_WIN32)
408 HANDLE handle_file_map = {nullptr};
409 char *handle_map = {nullptr};
410 HANDLE event_server_wrote = {nullptr};
411 HANDLE event_server_read = {nullptr};
412 HANDLE event_client_wrote = {nullptr};
413 HANDLE event_client_read = {nullptr};
414 HANDLE event_conn_closed = {nullptr};
415 size_t shared_memory_remain = {0};
416 char *shared_memory_pos = {nullptr};
417
418#endif /* _WIN32 */
419 bool (*is_blocking)(Vio *vio) = {nullptr};
420 int (*set_blocking)(Vio *vio, bool val) = {nullptr};
421 int (*set_blocking_flag)(Vio *vio, bool val) = {nullptr};
422 /* Indicates whether socket or SSL based communication is blocking or not. */
423 bool is_blocking_flag = {true};
424
425 private:
427 friend void internal_vio_delete(Vio *vio);
428 friend bool vio_reset(Vio *vio, enum_vio_type type, my_socket sd, void *ssl,
429 uint flags);
430
431 explicit Vio(uint flags);
432 ~Vio();
433
434 public:
435 Vio(const Vio &) = delete;
436 Vio &operator=(const Vio &) = delete;
437 Vio &operator=(Vio &&vio);
438};
439
440#define SSL_handle SSL *
441
442#endif /* vio_violite_h_ */
struct PSI_socket_locker PSI_socket_locker
Definition: psi_socket_bits.h:76
static int flags[50]
Definition: hp_test1.cc:39
static int kq_fd
Definition: kqueue_timers.cc:44
Some integer typedefs for easier portability.
unsigned char uchar
Definition: my_inttypes.h:51
uint16_t uint16
Definition: my_inttypes.h:64
Types to make file and socket I/O compatible.
Defines various enable/disable and HAVE_ macros related to the performance schema instrumentation sys...
Types to make different thread packages compatible.
pthread_t my_thread_t
Definition: my_thread_bits.h:47
int my_socket
Definition: mysql.h:64
Log error(cerr, "ERROR")
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1055
Definition: buf0block_hint.cc:29
constexpr value_type ssl
Definition: classic_protocol_constants.h:48
static Value err()
Create a Value object that represents an error condition.
Definition: json_binary.cc:909
Definition: local.h:59
static bool timeout(bool(*wait_condition)())
Timeout function.
Definition: log0meb.cc:495
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:32
required string type
Definition: replication_group_member_actions.proto:33
required string event
Definition: replication_group_member_actions.proto:31
struct sockaddr sockaddr
Definition: sock_probe_win32.h:62
struct in_addr in_addr
Definition: sock_probe_win32.h:64
An instrumented socket.
Definition: mysql_socket_bits.h:34
State data storage for start_socket_wait_v1_t.
Definition: psi_socket_bits.h:157
Definition: violite.h:316
size_t(* read)(MYSQL_VIO, uchar *, size_t)
Definition: violite.h:374
PSI_socket_locker_state m_psi_write_state
Definition: violite.h:406
char * read_end
Definition: violite.h:332
bool localhost
Definition: violite.h:318
friend bool vio_reset(Vio *vio, enum_vio_type type, my_socket sd, void *ssl, uint flags)
Reinitialize an existing Vio object.
Definition: vio.cc:350
int(* vioshutdown)(MYSQL_VIO)
Definition: violite.h:388
int write_timeout
Definition: violite.h:322
int(* fastsend)(MYSQL_VIO)
Definition: violite.h:378
sigset_t signal_mask
Definition: violite.h:336
char * read_buffer
Definition: violite.h:329
int(* set_blocking)(Vio *vio, bool val)
Definition: violite.h:420
PSI_socket_locker_state m_psi_read_state
Definition: violite.h:404
bool(* should_retry)(MYSQL_VIO)
Definition: violite.h:381
std::atomic_flag poll_shutdown_flag
Definition: violite.h:351
char network_namespace[256]
Socket network namespace.
Definition: violite.h:361
char * read_pos
Definition: violite.h:330
int(* set_blocking_flag)(Vio *vio, bool val)
Definition: violite.h:421
int(* vioerrno)(MYSQL_VIO)
Definition: violite.h:373
bool(* is_blocking)(Vio *vio)
Definition: violite.h:419
size_t(* write)(MYSQL_VIO, const uchar *, size_t)
Definition: violite.h:375
bool is_blocking_flag
Definition: violite.h:423
bool(* peer_addr)(MYSQL_VIO, char *, uint16 *, size_t)
Definition: violite.h:379
enum_vio_type type
Definition: violite.h:319
bool(* connect)(MYSQL_VIO, struct sockaddr *, socklen_t, int)
Definition: violite.h:392
friend void internal_vio_delete(Vio *vio)
Definition: vio.cc:538
void(* viodelete)(MYSQL_VIO)
Definition: violite.h:372
bool inactive
Definition: violite.h:324
my_thread_t thread_id
Definition: violite.h:335
~Vio()
Definition: vio.cc:114
int(* viokeepalive)(MYSQL_VIO, bool)
Definition: violite.h:377
struct PSI_socket_locker * m_psi_write_locker
Definition: violite.h:405
friend Vio * internal_vio_create(uint flags)
Definition: vio.cc:409
size_t addrLen
Definition: violite.h:328
Vio(const Vio &)=delete
MYSQL_SOCKET mysql_socket
Definition: violite.h:317
bool(* was_timeout)(MYSQL_VIO)
Definition: violite.h:382
struct PSI_socket_locker * m_psi_read_locker
Definition: violite.h:403
int retry_count
Definition: violite.h:323
void * ssl_arg
Definition: violite.h:402
Vio & operator=(const Vio &)=delete
Vio(uint flags)
Definition: vio.cc:100
int read_timeout
Definition: violite.h:321
int(* io_wait)(MYSQL_VIO, enum enum_vio_io_event, int)
Definition: violite.h:391
int(* timeout)(MYSQL_VIO, uint, bool)
Definition: violite.h:376
struct sockaddr_storage remote
Definition: violite.h:327
bool(* is_connected)(MYSQL_VIO)
Definition: violite.h:389
bool(* has_data)(MYSQL_VIO)
Definition: violite.h:390
Definition: violite.h:253
SSL_CTX * ssl_context
Definition: violite.h:254
unsigned int uint
Definition: uca-dump.cc:29
void vio_ssl_end()
Definition: viosslfactories.cc:444
#define vio_errno(vio)
Definition: violite.h:284
my_socket vio_fd(MYSQL_VIO vio)
SSL_type
Definition: violite.h:303
@ SSL_TYPE_NOT_SPECIFIED
Definition: violite.h:304
@ SSL_TYPE_NONE
Definition: violite.h:305
@ SSL_TYPE_ANY
Definition: violite.h:306
@ SSL_TYPE_X509
Definition: violite.h:307
@ SSL_TYPE_SPECIFIED
Definition: violite.h:308
#define vio_is_blocking(vio)
Definition: violite.h:297
#define vio_keepalive(vio, set_keep_alive)
Definition: violite.h:288
MYSQL_VIO vio_new(my_socket sd, enum enum_vio_type type, uint flags)
Definition: vio.cc:436
bool vio_reset(MYSQL_VIO vio, enum enum_vio_type type, my_socket sd, void *ssl, uint flags)
long process_tls_version(const char *tls_version)
Definition: viosslfactories.cc:483
enum enum_vio_type vio_type(const MYSQL_VIO vio)
void ssl_start(void)
Definition: viosslfactories.cc:467
int sslaccept(struct st_VioSSLFd *, MYSQL_VIO, long timeout, unsigned long *errptr)
void vio_end(void)
Definition: vio.cc:552
int vio_timeout(MYSQL_VIO vio, uint which, int timeout_sec)
#define MYSQL_VIO
Definition: violite.h:74
#define vio_should_retry(vio)
Definition: violite.h:290
#define vio_set_blocking_flag(vio, val)
Definition: violite.h:299
struct st_VioSSLFd * new_VioSSLConnectorFd(const char *key_file, const char *cert_file, const char *ca_file, const char *ca_path, const char *cipher, const char *ciphersuites, enum enum_ssl_init_error *error, const char *crl_file, const char *crl_path, const long ssl_ctx_flags, const char *server_host)
Definition: viosslfactories.cc:755
void get_vio_type_name(enum enum_vio_type vio_type, const char **str, int *len)
Convert a vio type to a printable string.
Definition: vio.cc:573
void vio_description(MYSQL_VIO vio, char *buf)
const char * sslGetErrString(enum enum_ssl_init_error err)
Definition: viosslfactories.cc:243
enum_ssl_init_error
Definition: violite.h:234
@ SSL_FIPS_MODE_INVALID
Definition: violite.h:245
@ SSL_INITERR_NO_USABLE_CTX
Definition: violite.h:242
@ SSL_FIPS_MODE_FAILED
Definition: violite.h:246
@ SSL_INITERR_X509_VERIFY_PARAM
Definition: violite.h:248
@ SSL_INITERR_KEY
Definition: violite.h:237
@ SSL_INITERR_LASTERR
Definition: violite.h:249
@ SSL_INITERR_CERT
Definition: violite.h:236
@ SSL_INITERR_BAD_PATHS
Definition: violite.h:239
@ SSL_INITERR_NOMATCH
Definition: violite.h:238
@ SSL_INITERR_MEMFAIL
Definition: violite.h:241
@ SSL_INITERR_ECDHFAIL
Definition: violite.h:247
@ SSL_INITERR_CIPHERS
Definition: violite.h:240
@ SSL_TLS_VERSION_INVALID
Definition: violite.h:244
@ SSL_INITERR_NOERROR
Definition: violite.h:235
@ SSL_INITERR_DHFAIL
Definition: violite.h:243
void free_vio_ssl_acceptor_fd(struct st_VioSSLFd *fd)
Definition: viosslfactories.cc:812
bool vio_is_no_name_error(int err_code)
Checks if the error code, returned by vio_getnameinfo(), means it was the "No-name" error.
Definition: viosocket.cc:1214
int sslconnect(struct st_VioSSLFd *, MYSQL_VIO, long timeout, SSL_SESSION *session, unsigned long *errptr, SSL **ssl)
enum_vio_io_event
VIO I/O events.
Definition: violite.h:130
@ VIO_IO_EVENT_WRITE
Definition: violite.h:132
@ VIO_IO_EVENT_CONNECT
Definition: violite.h:133
@ VIO_IO_EVENT_READ
Definition: violite.h:131
#define vio_fastsend(vio)
Definition: violite.h:287
#define vio_set_blocking(vio, val)
Definition: violite.h:298
#define vio_shutdown(vio)
Definition: violite.h:292
size_t vio_read_buff(MYSQL_VIO vio, uchar *buf, size_t size)
#define vio_delete(vio)
Definition: violite.h:283
bool vio_socket_connect(MYSQL_VIO vio, struct sockaddr *addr, socklen_t len, bool nonblocking, int timeout, bool *connect_done=nullptr)
void init_vio_psi_keys()
Definition: vio.cc:61
#define HANDLE
Definition: violite.h:157
#define vio_peer_addr(vio, buf, prt, buflen)
Definition: violite.h:293
ssize_t vio_pending(MYSQL_VIO vio)
Vio Vio
Definition: violite.h:71
#define vio_was_timeout(vio)
Definition: violite.h:291
#define vio_read(vio, buf, size)
Definition: violite.h:285
#define vio_write(vio, buf, size)
Definition: violite.h:286
#define vio_io_wait(vio, event, timeout)
Definition: violite.h:295
struct st_VioSSLFd * new_VioSSLAcceptorFd(const char *key_file, const char *cert_file, const char *ca_file, const char *ca_path, const char *cipher, const char *ciphersuites, enum enum_ssl_init_error *error, const char *crl_file, const char *crl_path, const long ssl_ctx_flags)
Definition: viosslfactories.cc:783
enum_vio_type
Definition: violite.h:77
@ LAST_VIO_TYPE
Definition: violite.h:116
@ VIO_TYPE_SHARED_MEMORY
Used for shared memory connections.
Definition: violite.h:101
@ NO_VIO_TYPE
Type of the connection is unknown.
Definition: violite.h:81
@ FIRST_VIO_TYPE
Definition: violite.h:111
@ VIO_TYPE_PLUGIN
Implicitly used by plugins that doesn't support any other VIO_TYPE.
Definition: violite.h:109
@ VIO_TYPE_SSL
Used in case of SSL connections.
Definition: violite.h:97
@ VIO_TYPE_NAMEDPIPE
Used for named pipe connections.
Definition: violite.h:93
@ VIO_TYPE_TCPIP
Used in case of TCP/IP connections.
Definition: violite.h:85
@ VIO_TYPE_LOCAL
Used internally by the prepared statements.
Definition: violite.h:105
@ VIO_TYPE_SOCKET
Used for Unix Domain socket connections.
Definition: violite.h:89
bool vio_get_normalized_ip_string(const struct sockaddr *addr, size_t addr_length, char *ip_string, size_t ip_string_size)
Return the normalized IP address string for a sock-address.
Definition: viosocket.cc:625
#define vio_is_connected(vio)
Definition: violite.h:296
MYSQL_VIO mysql_socket_vio_new(MYSQL_SOCKET mysql_socket, enum enum_vio_type type, uint flags)
Definition: vio.cc:417
int vio_getnameinfo(const struct sockaddr *sa, char *hostname, size_t hostname_size, char *port, size_t port_size, int flags)
This is a wrapper for the system getnameinfo(), because different OS differ in the getnameinfo() impl...
Definition: viosocket.cc:1235