php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
mysqlnd_wireprotocol.h
Go to the documentation of this file.
1/*
2 +----------------------------------------------------------------------+
3 | Copyright (c) The PHP Group |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.01 of the PHP license, |
6 | that is bundled with this package in the file LICENSE, and is |
7 | available through the world-wide-web at the following url: |
8 | https://www.php.net/license/3_01.txt |
9 | If you did not receive a copy of the PHP license and are unable to |
10 | obtain it through the world-wide-web, please send a note to |
11 | license@php.net so we can mail you a copy immediately. |
12 +----------------------------------------------------------------------+
13 | Authors: Andrey Hristov <andrey@php.net> |
14 | Ulf Wendel <uw@php.net> |
15 +----------------------------------------------------------------------+
16*/
17
18#ifndef MYSQLND_WIREPROTOCOL_H
19#define MYSQLND_WIREPROTOCOL_H
20
21#define MYSQLND_HEADER_SIZE 4
22#define COMPRESSED_HEADER_SIZE 3
23
24#define MYSQLND_NULL_LENGTH (zend_ulong) ~0
25
26/* Used in mysqlnd_debug.c */
27PHPAPI extern const char mysqlnd_read_header_name[];
28PHPAPI extern const char mysqlnd_read_body_name[];
29
30
31/* Packet handling */
32#define PACKET_WRITE(conn, packet) ((packet)->header.m->write_to_net((conn), (packet)))
33#define PACKET_READ(conn, packet) ((packet)->header.m->read_from_net((conn), (packet)))
34#define PACKET_FREE(packet) \
35 do { \
36 DBG_INF_FMT("PACKET_FREE(%p)", packet); \
37 if ((packet)->header.m->free_mem) { \
38 ((packet)->header.m->free_mem((packet))); \
39 } \
40 } while (0);
41
42PHPAPI extern const char * const mysqlnd_command_to_text[COM_END];
43
44/* Low-level extraction functionality */
47 size_t (*write_to_net)(MYSQLND_CONN_DATA * conn, void * packet);
48 void (*free_mem)(void *packet);
50
51
58
59/* Server greets the client */
64 uint32_t thread_id;
67 /* 1 byte pad */
69 uint8_t charset_no;
70 uint16_t server_status;
71 /* 13 byte pad, in 5.5 first 2 bytes are more capabilities followed by 1 byte scramble_length */
72 bool pre41;
73 /* If error packet, we use these */
76 unsigned int error_no;
79
80
81/* Client authenticates */
82typedef struct st_mysqlnd_packet_auth {
84 const char *user;
87 const char *db;
88 const char *auth_plugin_name;
89 uint32_t client_flags;
91 uint8_t charset_no;
92 /* Here the packet ends. This is user supplied data */
95 bool silent;
97 size_t db_len;
99
100/* Auth response packet */
120
121
122/* Auth response packet */
128
129
130/* OK packet */
131typedef struct st_mysqlnd_packet_ok {
133 uint8_t field_count; /* always 0x0 */
138 char *message;
140 /* If error packet, we use these */
143 unsigned int error_no;
145
146
147/* Command packet */
153
154
155/* EOF packet */
156typedef struct st_mysqlnd_packet_eof {
158 uint8_t field_count; /* 0xFE */
161 /* If error packet, we use these */
164 unsigned int error_no;
166/* EOF packet */
167
168
169/* Result Set header*/
172 /*
173 0x00 => ok
174 ~0 => LOAD DATA LOCAL
175 error_no != 0 => error
176 others => result set -> Read res_field packets up to field_count
177 */
179 /*
180 These are filled if no SELECT query. For SELECT warning_count
181 and server status are in the last row packet, the EOF packet.
182 */
187 /* This is for both LOAD DATA or info, when no result set */
189 /* If error packet, we use these */
192
193
194/* Result set field packet */
204
205
206/* Row packet */
207typedef struct st_mysqlnd_packet_row {
209 uint32_t field_count;
210 bool eof;
211 /*
212 These are, of course, only for SELECT in the EOF packet,
213 which is detected by this packet
214 */
217
220
223
224 /* If error packet, we use these */
227
228
229/* Statistics packet */
234
235
236/* COM_PREPARE response packet */
239 /* also known as field_count 0x00=OK , 0xFF=error */
240 unsigned char error_code;
242 unsigned int field_count;
243 unsigned int param_count;
244 unsigned int warning_count;
245
246 /* present in case of error */
249
250
251/* Statistics packet */
267
268
269/* Command packet */
273
279
297
298
299
301zend_uchar * php_mysqlnd_net_store_length(zend_uchar *packet, const uint64_t length);
302size_t php_mysqlnd_net_store_length_size(uint64_t length);
303
304PHPAPI extern const char * const mysqlnd_empty_string;
305
307 unsigned int field_count, const MYSQLND_FIELD * fields_metadata,
308 bool as_int_or_float, MYSQLND_STATS * stats);
309
310
312 unsigned int field_count, const MYSQLND_FIELD * fields_metadata,
313 bool as_int_or_float, MYSQLND_STATS * stats);
314
315
318
319#endif /* MYSQLND_WIREPROTOCOL_H */
ffi persistent
Definition ffi.c:3633
#define MYSQLND_ERRMSG_SIZE
#define SCRAMBLE_LENGTH
php_mysqlnd_server_command
#define MYSQLND_SQLSTATE_LENGTH
enum func_status enum_func_status
struct st_mysqlnd_field MYSQLND_FIELD
struct st_mysqlnd_connection_data MYSQLND_CONN_DATA
struct st_mysqlnd_string MYSQLND_STRING
struct st_mysqlnd_const_string MYSQLND_CSTRING
struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL
struct st_mysqlnd_stats MYSQLND_STATS
struct st_mysqlnd_protocol_payload_decoder_factory MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY
struct st_mysqlnd_row_buffer MYSQLND_ROW_BUFFER
struct st_mysqlnd_error_info MYSQLND_ERROR_INFO
const char mysqlnd_read_body_name[]
const char mysqlnd_read_header_name[]
const char *const mysqlnd_command_to_text[COM_END]
const char *const mysqlnd_empty_string
struct st_mysqlnd_packet_prepare_response MYSQLND_PACKET_PREPARE_RESPONSE
enum_func_status php_mysqlnd_rowp_read_text_protocol(MYSQLND_ROW_BUFFER *row_buffer, zval *fields, unsigned int field_count, const MYSQLND_FIELD *fields_metadata, bool as_int_or_float, MYSQLND_STATS *stats)
struct st_mysqlnd_packet_eof MYSQLND_PACKET_EOF
size_t php_mysqlnd_net_store_length_size(uint64_t length)
struct st_mysqlnd_packet_res_field MYSQLND_PACKET_RES_FIELD
struct st_mysqlnd_packet_sha256_pk_request MYSQLND_PACKET_SHA256_PK_REQUEST
struct st_mysqlnd_packet_stats MYSQLND_PACKET_STATS
PHPAPI void mysqlnd_protocol_payload_decoder_factory_free(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY *const payload_decoder_factory)
struct st_mysqlnd_packet_command MYSQLND_PACKET_COMMAND
struct st_mysqlnd_packet_cached_sha2_result MYSQLND_PACKET_CACHED_SHA2_RESULT
struct st_mysqlnd_packet_header MYSQLND_PACKET_HEADER
struct st_mysqlnd_packet_ok MYSQLND_PACKET_OK
struct st_mysqlnd_packet_rset_header MYSQLND_PACKET_RSET_HEADER
PHPAPI MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * mysqlnd_protocol_payload_decoder_factory_init(MYSQLND_CONN_DATA *conn, const bool persistent)
struct st_mysqlnd_packet_sha256_pk_request_response MYSQLND_PACKET_SHA256_PK_REQUEST_RESPONSE
struct st_mysqlnd_packet_auth MYSQLND_PACKET_AUTH
struct st_mysqlnd_packet_change_auth_response MYSQLND_PACKET_CHANGE_AUTH_RESPONSE
struct st_mysqlnd_packet_auth_response MYSQLND_PACKET_AUTH_RESPONSE
zend_ulong php_mysqlnd_net_field_length(const zend_uchar **packet)
struct st_mysqlnd_packet_greet MYSQLND_PACKET_GREET
zend_uchar * php_mysqlnd_net_store_length(zend_uchar *packet, const uint64_t length)
enum_func_status php_mysqlnd_rowp_read_binary_protocol(MYSQLND_ROW_BUFFER *row_buffer, zval *fields, unsigned int field_count, const MYSQLND_FIELD *fields_metadata, bool as_int_or_float, MYSQLND_STATS *stats)
struct st_mysqlnd_packet_row MYSQLND_PACKET_ROW
struct st_mysqlnd_packet_chg_user_resp MYSQLND_PACKET_CHG_USER_RESPONSE
struct st_mysqlnd_packet_methods mysqlnd_packet_methods
#define PHPAPI
Definition php.h:71
char error[MYSQLND_ERRMSG_SIZE+1]
char sqlstate[MYSQLND_SQLSTATE_LENGTH+1]
MYSQLND_PACKET_HEADER header
const zend_uchar * auth_data
char sqlstate[MYSQLND_SQLSTATE_LENGTH+1]
enum php_mysqlnd_server_command command
MYSQLND_PACKET_HEADER header
char error[MYSQLND_ERRMSG_SIZE+1]
char sqlstate[MYSQLND_SQLSTATE_LENGTH+1]
char sqlstate[MYSQLND_SQLSTATE_LENGTH+1]
char intern_auth_plugin_data[SCRAMBLE_LENGTH]
MYSQLND_PACKET_HEADER header
char error[MYSQLND_ERRMSG_SIZE+1]
MYSQLND_STRING authentication_plugin_data
mysqlnd_packet_methods * m
enum_func_status(* read_from_net)(MYSQLND_CONN_DATA *conn, void *packet)
void(* free_mem)(void *packet)
size_t(* write_to_net)(MYSQLND_CONN_DATA *conn, void *packet)
char sqlstate[MYSQLND_SQLSTATE_LENGTH+1]
char error[MYSQLND_ERRMSG_SIZE+1]
MYSQLND_PACKET_HEADER header
MYSQLND_MEMORY_POOL * memory_pool
MYSQLND_PACKET_HEADER header
MYSQLND_ROW_BUFFER row_buffer
MYSQLND_ERROR_INFO error_info
MYSQLND_MEMORY_POOL * result_set_memory_pool
MYSQLND_PACKET_HEADER header
struct _zval_struct zval
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
uint32_t zend_ulong
Definition zend_long.h:43
struct _zend_array HashTable
Definition zend_types.h:386
unsigned char zend_uchar
Definition zend_types.h:57