MySQL  8.0.16
Source Code Documentation
violite.h File Reference

Vio Lite. More...

#include "my_config.h"
#include <stddef.h>
#include <sys/types.h>
#include <string>
#include "my_inttypes.h"
#include "my_psi_config.h"
#include "mysql/components/services/my_io_bits.h"
#include "mysql/components/services/my_thread_bits.h"
#include "mysql/components/services/mysql_socket_bits.h"
#include <signal.h>
#include <atomic>

Go to the source code of this file.

Classes

struct  Vio
 

Macros

#define USE_PPOLL_IN_VIO
 
#define MYSQL_VIO   Vio *
 
#define VIO_SOCKET_ERROR   ((size_t)-1)
 
#define VIO_SOCKET_WANT_READ   ((size_t)-2)
 
#define VIO_SOCKET_WANT_WRITE   ((size_t)-3)
 
#define VIO_LOCALHOST   1 /* a localhost connection */
 
#define VIO_BUFFERED_READ   2 /* use buffered read */
 
#define VIO_READ_BUFFER_SIZE   16384 /* size of read buffer */
 
#define OPENSSL_ERROR_LENGTH   512 /* Openssl error code max length */
 
#define HANDLE   void *
 
#define VIO_DESCRIPTION_SIZE   30 /* size of description */
 
#define vio_delete(vio)   (vio)->viodelete(vio)
 
#define vio_errno(vio)   (vio)->vioerrno(vio)
 
#define vio_read(vio, buf, size)   ((vio)->read)(vio, buf, size)
 
#define vio_write(vio, buf, size)   ((vio)->write)(vio, buf, size)
 
#define vio_fastsend(vio)   (vio)->fastsend(vio)
 
#define vio_keepalive(vio, set_keep_alive)   (vio)->viokeepalive(vio, set_keep_alive)
 
#define vio_should_retry(vio)   (vio)->should_retry(vio)
 
#define vio_was_timeout(vio)   (vio)->was_timeout(vio)
 
#define vio_shutdown(vio)   ((vio)->vioshutdown)(vio)
 
#define vio_peer_addr(vio, buf, prt, buflen)   (vio)->peer_addr(vio, buf, prt, buflen)
 
#define vio_io_wait(vio, event, timeout)   (vio)->io_wait(vio, event, timeout)
 
#define vio_is_connected(vio)   (vio)->is_connected(vio)
 
#define vio_is_blocking(vio)   (vio)->is_blocking(vio)
 
#define vio_set_blocking(vio, val)   (vio)->set_blocking(vio, val)
 
#define vio_set_blocking_flag(vio, val)   (vio)->set_blocking_flag(vio, val)
 
#define SSL_handle   void *
 

Typedefs

typedef Vio Vio
 

Enumerations

enum  enum_vio_type : int {
  NO_VIO_TYPE = 0, VIO_TYPE_TCPIP = 1, VIO_TYPE_SOCKET = 2, VIO_TYPE_NAMEDPIPE = 3,
  VIO_TYPE_SSL = 4, VIO_TYPE_SHARED_MEMORY = 5, VIO_TYPE_LOCAL = 6, VIO_TYPE_PLUGIN = 7,
  FIRST_VIO_TYPE = VIO_TYPE_TCPIP, LAST_VIO_TYPE = VIO_TYPE_PLUGIN
}
 
enum  enum_vio_io_event { VIO_IO_EVENT_READ, VIO_IO_EVENT_WRITE, VIO_IO_EVENT_CONNECT }
 VIO I/O events. More...
 
enum  SSL_type {
  SSL_TYPE_NOT_SPECIFIED = -1, SSL_TYPE_NONE, SSL_TYPE_ANY, SSL_TYPE_X509,
  SSL_TYPE_SPECIFIED
}
 

Functions

void init_vio_psi_keys ()
 
void get_vio_type_name (enum enum_vio_type vio_type, const char **str, int *len)
 Convert a vio type to a printable string. More...
 
MYSQL_VIO vio_new (my_socket sd, enum enum_vio_type type, uint flags)
 
MYSQL_VIO mysql_socket_vio_new (MYSQL_SOCKET mysql_socket, enum enum_vio_type type, uint flags)
 
void vio_delete (MYSQL_VIO vio)
 
int vio_shutdown (MYSQL_VIO vio)
 
bool vio_reset (MYSQL_VIO vio, enum enum_vio_type type, my_socket sd, void *ssl, uint flags)
 
bool vio_is_blocking (Vio *vio)
 
int vio_set_blocking (Vio *vio, bool set_blocking_mode)
 
int vio_set_blocking_flag (Vio *vio, bool set_blocking_flag)
 
size_t vio_read (MYSQL_VIO vio, uchar *buf, size_t size)
 
size_t vio_read_buff (MYSQL_VIO vio, uchar *buf, size_t size)
 
size_t vio_write (MYSQL_VIO vio, const uchar *buf, size_t size)
 
int vio_fastsend (MYSQL_VIO vio)
 
int vio_keepalive (MYSQL_VIO vio, bool onoff)
 
bool vio_should_retry (MYSQL_VIO vio)
 
bool vio_was_timeout (MYSQL_VIO vio)
 
void vio_description (MYSQL_VIO vio, char *buf)
 
enum enum_vio_type vio_type (const MYSQL_VIO vio)
 
int vio_errno (MYSQL_VIO vio)
 
my_socket vio_fd (MYSQL_VIO vio)
 
bool vio_peer_addr (MYSQL_VIO vio, char *buf, uint16 *port, size_t buflen)
 
int vio_io_wait (MYSQL_VIO vio, enum enum_vio_io_event event, int timeout)
 
bool vio_is_connected (MYSQL_VIO vio)
 
ssize_t vio_pending (MYSQL_VIO vio)
 
int vio_timeout (MYSQL_VIO vio, uint which, int timeout_sec)
 
bool vio_socket_connect (MYSQL_VIO vio, struct sockaddr *addr, socklen_t len, bool nonblocking, int timeout)
 
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. More...
 
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. More...
 
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() implementation: More...
 
void ssl_start (void)
 
void vio_end (void)
 

Detailed Description

Vio Lite.

Purpose: include file for Vio that will work with C and C++.

Macro Definition Documentation

◆ HANDLE

#define HANDLE   void *

◆ MYSQL_VIO

#define MYSQL_VIO   Vio *

◆ OPENSSL_ERROR_LENGTH

#define OPENSSL_ERROR_LENGTH   512 /* Openssl error code max length */

◆ SSL_handle

#define SSL_handle   void *

◆ USE_PPOLL_IN_VIO

#define USE_PPOLL_IN_VIO

◆ VIO_BUFFERED_READ

#define VIO_BUFFERED_READ   2 /* use buffered read */

◆ vio_delete

#define vio_delete (   vio)    (vio)->viodelete(vio)

◆ VIO_DESCRIPTION_SIZE

#define VIO_DESCRIPTION_SIZE   30 /* size of description */

◆ vio_errno

#define vio_errno (   vio)    (vio)->vioerrno(vio)

◆ vio_fastsend

#define vio_fastsend (   vio)    (vio)->fastsend(vio)

◆ vio_io_wait

#define vio_io_wait (   vio,
  event,
  timeout 
)    (vio)->io_wait(vio, event, timeout)

◆ vio_is_blocking

#define vio_is_blocking (   vio)    (vio)->is_blocking(vio)

◆ vio_is_connected

#define vio_is_connected (   vio)    (vio)->is_connected(vio)

◆ vio_keepalive

#define vio_keepalive (   vio,
  set_keep_alive 
)    (vio)->viokeepalive(vio, set_keep_alive)

◆ VIO_LOCALHOST

#define VIO_LOCALHOST   1 /* a localhost connection */

◆ vio_peer_addr

#define vio_peer_addr (   vio,
  buf,
  prt,
  buflen 
)    (vio)->peer_addr(vio, buf, prt, buflen)

◆ vio_read

#define vio_read (   vio,
  buf,
  size 
)    ((vio)->read)(vio, buf, size)

◆ VIO_READ_BUFFER_SIZE

#define VIO_READ_BUFFER_SIZE   16384 /* size of read buffer */

◆ vio_set_blocking

#define vio_set_blocking (   vio,
  val 
)    (vio)->set_blocking(vio, val)

◆ vio_set_blocking_flag

#define vio_set_blocking_flag (   vio,
  val 
)    (vio)->set_blocking_flag(vio, val)

◆ vio_should_retry

#define vio_should_retry (   vio)    (vio)->should_retry(vio)

◆ vio_shutdown

#define vio_shutdown (   vio)    ((vio)->vioshutdown)(vio)

◆ VIO_SOCKET_ERROR

#define VIO_SOCKET_ERROR   ((size_t)-1)

◆ VIO_SOCKET_WANT_READ

#define VIO_SOCKET_WANT_READ   ((size_t)-2)

◆ VIO_SOCKET_WANT_WRITE

#define VIO_SOCKET_WANT_WRITE   ((size_t)-3)

◆ vio_was_timeout

#define vio_was_timeout (   vio)    (vio)->was_timeout(vio)

◆ vio_write

#define vio_write (   vio,
  buf,
  size 
)    ((vio)->write)(vio, buf, size)

Typedef Documentation

◆ Vio

typedef Vio Vio

Enumeration Type Documentation

◆ enum_vio_io_event

VIO I/O events.

Enumerator
VIO_IO_EVENT_READ 
VIO_IO_EVENT_WRITE 
VIO_IO_EVENT_CONNECT 

◆ enum_vio_type

enum enum_vio_type : int
Enumerator
NO_VIO_TYPE 

Type of the connection is unknown.

VIO_TYPE_TCPIP 

Used in case of TCP/IP connections.

VIO_TYPE_SOCKET 

Used for Unix Domain socket connections.

Unix only.

VIO_TYPE_NAMEDPIPE 

Used for named pipe connections.

Windows only.

VIO_TYPE_SSL 

Used in case of SSL connections.

VIO_TYPE_SHARED_MEMORY 

Used for shared memory connections.

Windows only.

VIO_TYPE_LOCAL 

Used internally by the prepared statements.

VIO_TYPE_PLUGIN 

Implicitly used by plugins that doesn't support any other VIO_TYPE.

FIRST_VIO_TYPE 
LAST_VIO_TYPE 

◆ SSL_type

enum SSL_type
Enumerator
SSL_TYPE_NOT_SPECIFIED 
SSL_TYPE_NONE 
SSL_TYPE_ANY 
SSL_TYPE_X509 
SSL_TYPE_SPECIFIED 

Function Documentation

◆ get_vio_type_name()

void get_vio_type_name ( enum enum_vio_type  vio_type,
const char **  str,
int *  len 
)

Convert a vio type to a printable string.

Parameters
vio_typethe type
[out]strthe string
[out]lenthe string length

◆ init_vio_psi_keys()

void init_vio_psi_keys ( )

◆ mysql_socket_vio_new()

MYSQL_VIO mysql_socket_vio_new ( MYSQL_SOCKET  mysql_socket,
enum enum_vio_type  type,
uint  flags 
)

◆ ssl_start()

void ssl_start ( void  )

◆ vio_delete()

void vio_delete ( MYSQL_VIO  vio)

◆ vio_description()

void vio_description ( MYSQL_VIO  vio,
char *  buf 
)

◆ vio_end()

void vio_end ( void  )

◆ vio_errno()

int vio_errno ( MYSQL_VIO  vio)

◆ vio_fastsend()

int vio_fastsend ( MYSQL_VIO  vio)

◆ vio_fd()

my_socket vio_fd ( MYSQL_VIO  vio)

◆ vio_get_normalized_ip_string()

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.

The idea is to return an IPv4-address for an IPv4-mapped and IPv4-compatible IPv6 address.

The function writes the normalized IP address to the given buffer. The buffer should have enough space, otherwise error flag is returned. The system constant INET6_ADDRSTRLEN can be used to reserve buffers of the right size.

Parameters
[in]addrsockaddr object (AF_INET or AF_INET6).
[in]addr_lengthlength of the addr.
[out]ip_stringbuffer to write normalized IP address.
[in]ip_string_sizesize of the ip_string.
Returns
Error status.
Return values
truein case of error (the ip_string buffer is not enough).
falseon success.

◆ vio_getnameinfo()

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() implementation:

  • Solaris 10 requires that the 2nd argument (salen) must match the actual size of the struct sockaddr_storage passed to it;
  • Mac OS X has sockaddr_in::sin_len and sockaddr_in6::sin6_len and requires them to be filled.

◆ vio_io_wait()

int vio_io_wait ( MYSQL_VIO  vio,
enum enum_vio_io_event  event,
int  timeout 
)

◆ vio_is_blocking()

bool vio_is_blocking ( Vio vio)

◆ vio_is_connected()

bool vio_is_connected ( MYSQL_VIO  vio)

◆ vio_is_no_name_error()

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.

Windows-specific note: getnameinfo() returns WSANO_DATA instead of EAI_NODATA or EAI_NONAME when no reverse mapping is available at the host (i.e. Windows can't get hostname by IP-address). This error should be treated as EAI_NONAME.

Returns
if the error code is actually EAI_NONAME.
Return values
trueif the error code is EAI_NONAME.
falseotherwise.

◆ vio_keepalive()

int vio_keepalive ( MYSQL_VIO  vio,
bool  onoff 
)

◆ vio_new()

MYSQL_VIO vio_new ( my_socket  sd,
enum enum_vio_type  type,
uint  flags 
)

◆ vio_peer_addr()

bool vio_peer_addr ( MYSQL_VIO  vio,
char *  buf,
uint16 port,
size_t  buflen 
)

◆ vio_pending()

ssize_t vio_pending ( MYSQL_VIO  vio)

◆ vio_read()

size_t vio_read ( MYSQL_VIO  vio,
uchar buf,
size_t  size 
)

◆ vio_read_buff()

size_t vio_read_buff ( MYSQL_VIO  vio,
uchar buf,
size_t  size 
)

◆ vio_reset()

bool vio_reset ( MYSQL_VIO  vio,
enum enum_vio_type  type,
my_socket  sd,
void *  ssl,
uint  flags 
)

◆ vio_set_blocking()

int vio_set_blocking ( Vio vio,
bool  set_blocking_mode 
)

◆ vio_set_blocking_flag()

int vio_set_blocking_flag ( Vio vio,
bool  set_blocking_flag 
)

◆ vio_should_retry()

bool vio_should_retry ( MYSQL_VIO  vio)

◆ vio_shutdown()

int vio_shutdown ( MYSQL_VIO  vio)

◆ vio_socket_connect()

bool vio_socket_connect ( MYSQL_VIO  vio,
struct sockaddr *  addr,
socklen_t  len,
bool  nonblocking,
int  timeout 
)

◆ vio_timeout()

int vio_timeout ( MYSQL_VIO  vio,
uint  which,
int  timeout_sec 
)

◆ vio_type()

enum enum_vio_type vio_type ( const MYSQL_VIO  vio)

◆ vio_was_timeout()

bool vio_was_timeout ( MYSQL_VIO  vio)

◆ vio_write()

size_t vio_write ( MYSQL_VIO  vio,
const uchar buf,
size_t  size 
)