From: Andrey Hristov Date: Tue, 10 Nov 2015 10:02:33 +0000 (+0100) Subject: MNDR: X-Git-Tag: php-7.1.0alpha1~765 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=654d1a7caf068c67560fd49c86cf6f6354322d6f;p=php MNDR: - rename MYSQLND_NET to MYSQLND_PPEC (protocol packet envelope codec). PPEC does only the encoding and decoding to the protocol frame. --- diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c index 8d5140a2ae..9b78c27033 100644 --- a/ext/mysqlnd/mysqlnd.c +++ b/ext/mysqlnd/mysqlnd.c @@ -342,7 +342,7 @@ MYSQLND_METHOD_PRIVATE(mysqlnd_conn_data, dtor)(MYSQLND_CONN_DATA * conn) conn->m->free_options(conn); if (conn->net) { - mysqlnd_net_free(conn->net, conn->stats, conn->error_info); + mysqlnd_ppec_free(conn->net, conn->stats, conn->error_info); conn->net = NULL; } @@ -664,7 +664,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, execute_init_commands)(MYSQLND_CONN_DATA * con static unsigned int MYSQLND_METHOD(mysqlnd_conn_data, get_updated_connect_flags)(MYSQLND_CONN_DATA * conn, unsigned int mysql_flags) { - MYSQLND_NET * net = conn->net; + MYSQLND_PPEC * net = conn->net; MYSQLND_VIO * vio = conn->vio; DBG_ENTER("mysqlnd_conn_data::get_updated_connect_flags"); @@ -784,10 +784,8 @@ MYSQLND_METHOD(mysqlnd_conn_data, connect)(MYSQLND_CONN_DATA * conn, zend_bool reconnect = FALSE; zend_bool saved_compression = FALSE; zend_bool local_tx_started = FALSE; - MYSQLND_NET * net = conn->net; + MYSQLND_PPEC * net = conn->net; MYSQLND_STRING transport = { NULL, 0 }; -// char * transport = NULL; -// int transport_len; DBG_ENTER("mysqlnd_conn_data::connect"); DBG_INF_FMT("conn=%p", conn); diff --git a/ext/mysqlnd/mysqlnd_auth.c b/ext/mysqlnd/mysqlnd_auth.c index 3a57f3f10c..33d6c11a1f 100644 --- a/ext/mysqlnd/mysqlnd_auth.c +++ b/ext/mysqlnd/mysqlnd_auth.c @@ -360,7 +360,7 @@ mysqlnd_native_auth_get_auth_data(struct st_mysqlnd_authentication_plugin * self MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len, const MYSQLND_SESSION_OPTIONS * const session_options, - const MYSQLND_NET_OPTIONS * const io_options, + const MYSQLND_PPEC_OPTIONS * const ppec_options, zend_ulong mysql_flags ) { @@ -420,7 +420,7 @@ mysqlnd_pam_auth_get_auth_data(struct st_mysqlnd_authentication_plugin * self, MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len, const MYSQLND_SESSION_OPTIONS * const session_options, - const MYSQLND_NET_OPTIONS * const io_options, + const MYSQLND_PPEC_OPTIONS * const ppec_options, zend_ulong mysql_flags ) { @@ -481,7 +481,7 @@ mysqlnd_xor_string(char * dst, const size_t dst_len, const char * xor_str, const static RSA * mysqlnd_sha256_get_rsa_key(MYSQLND_CONN_DATA * conn, const MYSQLND_SESSION_OPTIONS * const session_options, - const MYSQLND_NET_OPTIONS * const io_options + const MYSQLND_PPEC_OPTIONS * const io_options ) { RSA * ret = NULL; @@ -570,7 +570,7 @@ mysqlnd_sha256_auth_get_auth_data(struct st_mysqlnd_authentication_plugin * self MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len, const MYSQLND_SESSION_OPTIONS * const session_options, - const MYSQLND_NET_OPTIONS * const io_options, + const MYSQLND_PPEC_OPTIONS * const ppec_options, zend_ulong mysql_flags ) { @@ -588,7 +588,7 @@ mysqlnd_sha256_auth_get_auth_data(struct st_mysqlnd_authentication_plugin * self memcpy(ret, passwd, passwd_len); } else { *auth_data_len = 0; - server_public_key = mysqlnd_sha256_get_rsa_key(conn, session_options, io_options); + server_public_key = mysqlnd_sha256_get_rsa_key(conn, session_options, ppec_options); if (server_public_key) { int server_public_key_len; diff --git a/ext/mysqlnd/mysqlnd_driver.c b/ext/mysqlnd/mysqlnd_driver.c index b12c0f8ea3..6bf57de632 100644 --- a/ext/mysqlnd/mysqlnd_driver.c +++ b/ext/mysqlnd/mysqlnd_driver.c @@ -140,7 +140,7 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_connection)(struct st_mysqlnd_object_ mysqlnd_stats_init(&data->stats, STAT_LAST, persistent); - data->net = mysqlnd_net_init(persistent, data->stats, data->error_info); + data->net = mysqlnd_ppec_init(persistent, data->stats, data->error_info); data->vio = mysqlnd_vio_init(persistent, data->stats, data->error_info); data->payload_decoder_factory = mysqlnd_protocol_payload_decoder_factory_init(data, persistent); data->command_factory = mysqlnd_command_factory_get(); @@ -243,37 +243,37 @@ MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement)(MYSQLND_CONN_DATA /* }}} */ -/* {{{ mysqlnd_object_factory::get_net */ -static MYSQLND_NET * -MYSQLND_METHOD(mysqlnd_object_factory, get_net)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) +/* {{{ mysqlnd_object_factory::get_ppec */ +static MYSQLND_PPEC * +MYSQLND_METHOD(mysqlnd_object_factory, get_ppec)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) { - size_t net_alloc_size = sizeof(MYSQLND_NET) + mysqlnd_plugin_count() * sizeof(void *); - size_t net_data_alloc_size = sizeof(MYSQLND_NET_DATA) + mysqlnd_plugin_count() * sizeof(void *); - MYSQLND_NET * net = mnd_pecalloc(1, net_alloc_size, persistent); - MYSQLND_NET_DATA * net_data = mnd_pecalloc(1, net_data_alloc_size, persistent); + size_t ppec_alloc_size = sizeof(MYSQLND_PPEC) + mysqlnd_plugin_count() * sizeof(void *); + size_t ppec_data_alloc_size = sizeof(MYSQLND_PPEC_DATA) + mysqlnd_plugin_count() * sizeof(void *); + MYSQLND_PPEC * ppec = mnd_pecalloc(1, ppec_alloc_size, persistent); + MYSQLND_PPEC_DATA * ppec_data = mnd_pecalloc(1, ppec_data_alloc_size, persistent); - DBG_ENTER("mysqlnd_object_factory::get_net"); + DBG_ENTER("mysqlnd_object_factory::get_ppec"); DBG_INF_FMT("persistent=%u", persistent); - if (net && net_data) { - net->data = net_data; - net->persistent = net->data->persistent = persistent; - net->data->m = *mysqlnd_net_get_methods(); - - if (PASS != net->data->m.init(net, stats, error_info)) { - net->data->m.dtor(net, stats, error_info); - net = NULL; + if (ppec && ppec_data) { + ppec->data = ppec_data; + ppec->persistent = ppec->data->persistent = persistent; + ppec->data->m = *mysqlnd_ppec_get_methods(); + + if (PASS != ppec->data->m.init(ppec, stats, error_info)) { + ppec->data->m.dtor(ppec, stats, error_info); + ppec = NULL; } } else { - if (net_data) { - mnd_pefree(net_data, persistent); - net_data = NULL; + if (ppec_data) { + mnd_pefree(ppec_data, persistent); + ppec_data = NULL; } - if (net) { - mnd_pefree(net, persistent); - net = NULL; + if (ppec) { + mnd_pefree(ppec, persistent); + ppec = NULL; } } - DBG_RETURN(net); + DBG_RETURN(ppec); } /* }}} */ @@ -337,7 +337,7 @@ PHPAPI MYSQLND_CLASS_METHODS_START(mysqlnd_object_factory) MYSQLND_METHOD(mysqlnd_object_factory, get_connection), MYSQLND_METHOD(mysqlnd_object_factory, clone_connection_object), MYSQLND_METHOD(mysqlnd_object_factory, get_prepared_statement), - MYSQLND_METHOD(mysqlnd_object_factory, get_net), + MYSQLND_METHOD(mysqlnd_object_factory, get_ppec), MYSQLND_METHOD(mysqlnd_object_factory, get_vio), MYSQLND_METHOD(mysqlnd_object_factory, get_protocol_payload_decoder_factory) MYSQLND_CLASS_METHODS_END; diff --git a/ext/mysqlnd/mysqlnd_ext_plugin.c b/ext/mysqlnd/mysqlnd_ext_plugin.c index 76d51bcc18..fe08c1d2c1 100644 --- a/ext/mysqlnd/mysqlnd_ext_plugin.c +++ b/ext/mysqlnd/mysqlnd_ext_plugin.c @@ -140,16 +140,30 @@ mysqlnd_plugin__get_plugin_stmt_data(const MYSQLND_STMT * stmt, unsigned int plu /* }}} */ -/* {{{ mysqlnd_plugin__get_plugin_net_data */ +/* {{{ mysqlnd_plugin__get_plugin_ppec_data */ static void ** -mysqlnd_plugin__get_plugin_net_data(const MYSQLND_NET * net, unsigned int plugin_id) +mysqlnd_plugin__get_plugin_ppec_data(const MYSQLND_PPEC * ppec, unsigned int plugin_id) { - DBG_ENTER("_mysqlnd_plugin__get_plugin_net_data"); + DBG_ENTER("mysqlnd_plugin__get_plugin_ppec_data"); DBG_INF_FMT("plugin_id=%u", plugin_id); - if (!net || plugin_id >= mysqlnd_plugin_count()) { + if (!ppec || plugin_id >= mysqlnd_plugin_count()) { return NULL; } - DBG_RETURN((void *)((char *)net + sizeof(MYSQLND_NET) + plugin_id * sizeof(void *))); + DBG_RETURN((void *)((char *)ppec + sizeof(MYSQLND_PPEC) + plugin_id * sizeof(void *))); +} +/* }}} */ + + +/* {{{ _mysqlnd_plugin__get_plugin_vio_data */ +static void ** +mysqlnd_plugin__get_plugin_vio_data(const MYSQLND_VIO * vio, unsigned int plugin_id) +{ + DBG_ENTER("_mysqlnd_plugin__get_plugin_vio_data"); + DBG_INF_FMT("plugin_id=%u", plugin_id); + if (!vio || plugin_id >= mysqlnd_plugin_count()) { + return NULL; + } + DBG_RETURN((void *)((char *)vio + sizeof(MYSQLND_VIO) + plugin_id * sizeof(void *))); } /* }}} */ @@ -163,7 +177,8 @@ struct st_mysqlnd_plugin__plugin_area_getters mysqlnd_plugin_area_getters = mysqlnd_plugin__get_plugin_result_buffered_data_c, mysqlnd_plugin__get_plugin_stmt_data, mysqlnd_plugin__get_plugin_protocol_data, - mysqlnd_plugin__get_plugin_net_data, + mysqlnd_plugin__get_plugin_ppec_data, + mysqlnd_plugin__get_plugin_vio_data, }; @@ -309,20 +324,20 @@ _mysqlnd_protocol_payload_decoder_factory_set_methods(MYSQLND_CLASS_METHODS_TYPE /* }}} */ -/* {{{ _mysqlnd_net_get_methods */ -static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_net) * -_mysqlnd_net_get_methods() +/* {{{ _mysqlnd_ppec_get_methods */ +static MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec) * +_mysqlnd_ppec_get_methods() { - return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_net); + return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_protocol_packet_envelope_codec); } /* }}} */ -/* {{{ _mysqlnd_net_set_methods */ +/* {{{ _mysqlnd_ppec_set_methods */ static void -_mysqlnd_net_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_net) * methods) +_mysqlnd_ppec_set_methods(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec) * methods) { - MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_net) = *methods; + MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_protocol_packet_envelope_codec) = *methods; } /* }}} */ @@ -416,8 +431,8 @@ struct st_mysqlnd_plugin_methods_xetters mysqlnd_plugin_methods_xetters = _mysqlnd_protocol_payload_decoder_factory_set_methods, }, { - _mysqlnd_net_get_methods, - _mysqlnd_net_set_methods, + _mysqlnd_ppec_get_methods, + _mysqlnd_ppec_set_methods, }, { _mysqlnd_vio_get_methods, diff --git a/ext/mysqlnd/mysqlnd_ext_plugin.h b/ext/mysqlnd/mysqlnd_ext_plugin.h index 2808cb984d..780517f5b1 100644 --- a/ext/mysqlnd/mysqlnd_ext_plugin.h +++ b/ext/mysqlnd/mysqlnd_ext_plugin.h @@ -31,7 +31,8 @@ struct st_mysqlnd_plugin__plugin_area_getters void ** (*get_result_buffered_aread_c)(const MYSQLND_RES_BUFFERED_C * result, unsigned int plugin_id); void ** (*get_stmt_area)(const MYSQLND_STMT * stmt, unsigned int plugin_id); void ** (*get_protocol_decoder_area)(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * factory, unsigned int plugin_id); - void ** (*get_net_area)(const MYSQLND_NET * net, unsigned int plugin_id); + void ** (*get_ppec_area)(const MYSQLND_PPEC * ppec, unsigned int plugin_id); + void ** (*get_vio_area)(const MYSQLND_VIO * vio, unsigned int plugin_id); }; extern struct st_mysqlnd_plugin__plugin_area_getters mysqlnd_plugin_area_getters; @@ -44,7 +45,8 @@ extern struct st_mysqlnd_plugin__plugin_area_getters mysqlnd_plugin_area_getters #define mysqlnd_plugin_get_plugin_result_buffered_data_c(res, p_id) mysqlnd_plugin_area_getters.get_result_buffered_aread_c((res), (p_id)) #define mysqlnd_plugin_get_plugin_stmt_data(stmt, p_id) mysqlnd_plugin_area_getters.get_stmt_area((stmt), (p_id)) #define mysqlnd_plugin_get_plugin_protocol_data(proto, p_id) mysqlnd_plugin_area_getters.get_protocol_decoder_area((proto), (p_id)) -#define mysqlnd_plugin_get_plugin_net_data(net, p_id) mysqlnd_plugin_area_getters.get_net_area((net), (p_id)) +#define mysqlnd_plugin_get_plugin_ppec_data(ppec, p_id) mysqlnd_plugin_area_getters.get_ppec_area((ppec), (p_id)) +#define mysqlnd_plugin_get_plugin_vio_data(vio, p_id) mysqlnd_plugin_area_getters.get_ppec_area((vio), (p_id)) struct st_mysqlnd_plugin_methods_xetters @@ -97,11 +99,11 @@ struct st_mysqlnd_plugin_methods_xetters void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) *methods); } protocol; - struct st_mnd_net_xetters + struct st_mnd_ppec_xetters { - MYSQLND_CLASS_METHODS_TYPE(mysqlnd_net) * (*get)(); - void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_net) * methods); - } net; + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec) * (*get)(); + void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec) * methods); + } ppec; struct st_mnd_vio_xetters { @@ -149,8 +151,8 @@ extern struct st_mysqlnd_plugin_methods_xetters mysqlnd_plugin_methods_xetters; #define mysqlnd_protocol_get_methods() mysqlnd_plugin_methods_xetters.protocol.get() #define mysqlnd_protocol_set_methods(m) mysqlnd_plugin_methods_xetters.protocol.set((m)) -#define mysqlnd_net_get_methods() mysqlnd_plugin_methods_xetters.net.get() -#define mysqlnd_net_set_methods(m) mysqlnd_plugin_methods_xetters.net.set((m)) +#define mysqlnd_ppec_get_methods() mysqlnd_plugin_methods_xetters.ppec.get() +#define mysqlnd_ppec_set_methods(m) mysqlnd_plugin_methods_xetters.ppec.set((m)) #define mysqlnd_vio_get_methods() mysqlnd_plugin_methods_xetters.vio.get() #define mysqlnd_vio_set_methods(m) mysqlnd_plugin_methods_xetters.vio.set((m)) diff --git a/ext/mysqlnd/mysqlnd_loaddata.c b/ext/mysqlnd/mysqlnd_loaddata.c index 70688d32ca..bd8434fd1e 100644 --- a/ext/mysqlnd/mysqlnd_loaddata.c +++ b/ext/mysqlnd/mysqlnd_loaddata.c @@ -151,7 +151,7 @@ mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * const filenam int bufsize; size_t ret; MYSQLND_INFILE infile; - MYSQLND_NET * net = conn->net; + MYSQLND_PPEC * net = conn->net; MYSQLND_VIO * vio = conn->vio; DBG_ENTER("mysqlnd_handle_local_infile"); diff --git a/ext/mysqlnd/mysqlnd_priv.h b/ext/mysqlnd/mysqlnd_priv.h index fbd433dfda..9ba810619e 100644 --- a/ext/mysqlnd/mysqlnd_priv.h +++ b/ext/mysqlnd/mysqlnd_priv.h @@ -154,7 +154,7 @@ PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_res); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_result_unbuffered); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_result_buffered); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_protocol_payload_decoder_factory); -PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_net); +PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_protocol_packet_envelope_codec); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_vio); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_upsert_status); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_error_info); diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c index c6534c0b00..8958450ab8 100644 --- a/ext/mysqlnd/mysqlnd_ps.c +++ b/ext/mysqlnd/mysqlnd_ps.c @@ -2185,15 +2185,15 @@ MYSQLND_METHOD(mysqlnd_stmt, free_stmt_content)(MYSQLND_STMT * const s) /* }}} */ -/* {{{ mysqlnd_stmt::net_close */ +/* {{{ mysqlnd_stmt::close_on_server */ static enum_func_status -MYSQLND_METHOD_PRIVATE(mysqlnd_stmt, net_close)(MYSQLND_STMT * const s, zend_bool implicit) +MYSQLND_METHOD_PRIVATE(mysqlnd_stmt, close_on_server)(MYSQLND_STMT * const s, zend_bool implicit) { MYSQLND_STMT_DATA * stmt = s? s->data:NULL; MYSQLND_CONN_DATA * conn; enum_mysqlnd_collected_stats statistic = STAT_LAST; - DBG_ENTER("mysqlnd_stmt::net_close"); + DBG_ENTER("mysqlnd_stmt::close_on_server"); if (!stmt || !stmt->conn) { DBG_RETURN(FAIL); } @@ -2292,7 +2292,7 @@ MYSQLND_METHOD(mysqlnd_stmt, dtor)(MYSQLND_STMT * const s, zend_bool implicit) MYSQLND_INC_GLOBAL_STATISTIC(implicit == TRUE? STAT_STMT_CLOSE_IMPLICIT: STAT_STMT_CLOSE_EXPLICIT); - ret = s->m->net_close(s, implicit); + ret = s->m->close_on_server(s, implicit); mnd_pefree(stmt, persistent); } mnd_pefree(s, persistent); @@ -2368,7 +2368,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_stmt) MYSQLND_METHOD(mysqlnd_stmt, free_result), MYSQLND_METHOD(mysqlnd_stmt, data_seek), MYSQLND_METHOD(mysqlnd_stmt, reset), - MYSQLND_METHOD_PRIVATE(mysqlnd_stmt, net_close), + MYSQLND_METHOD_PRIVATE(mysqlnd_stmt, close_on_server), MYSQLND_METHOD(mysqlnd_stmt, dtor), MYSQLND_METHOD(mysqlnd_stmt, fetch), diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index ef4dc0e52d..e226b519bf 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -234,12 +234,14 @@ typedef struct st_mysqlnd_session_options #endif } MYSQLND_SESSION_OPTIONS; -typedef struct st_mysqlnd_net_options + +typedef struct st_mysqlnd_protocol_packet_envelope_codec_options { uint64_t flags; char * sha256_server_public_key; -} MYSQLND_NET_OPTIONS; +} MYSQLND_PPEC_OPTIONS; + typedef struct st_mysqlnd_vio_options { @@ -270,8 +272,8 @@ typedef struct st_mysqlnd_vio_options typedef struct st_mysqlnd_connection MYSQLND; typedef struct st_mysqlnd_connection_data MYSQLND_CONN_DATA; -typedef struct st_mysqlnd_net MYSQLND_NET; -typedef struct st_mysqlnd_net_data MYSQLND_NET_DATA; +typedef struct st_mysqlnd_protocol_packet_envelope_codec MYSQLND_PPEC; +typedef struct st_mysqlnd_protocol_packet_envelope_codec_data MYSQLND_PPEC_DATA; typedef struct st_mysqlnd_vio MYSQLND_VIO; typedef struct st_mysqlnd_vio_data MYSQLND_VIO_DATA; typedef struct st_mysqlnd_protocol_payload_decoder_factory MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY; @@ -318,49 +320,6 @@ struct st_mysqlnd_stats }; -typedef struct st_mysqlnd_read_buffer { - zend_uchar * data; - size_t offset; - size_t size; - size_t len; - zend_bool (*is_empty)(struct st_mysqlnd_read_buffer *); - void (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest); - size_t (*bytes_left)(struct st_mysqlnd_read_buffer *); - void (*free_buffer)(struct st_mysqlnd_read_buffer **); -} MYSQLND_READ_BUFFER; - - - -typedef enum_func_status (*func_mysqlnd_net__init)(MYSQLND_NET * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); -typedef void (*func_mysqlnd_net__dtor)(MYSQLND_NET * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); -typedef enum_func_status (*func_mysqlnd_net__connect)(MYSQLND_NET * const net, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); -typedef enum_func_status (*func_mysqlnd_net__set_client_option)(MYSQLND_NET * const net, enum_mysqlnd_client_option option, const char * const value); -typedef enum_func_status (*func_mysqlnd_net__decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len); -typedef enum_func_status (*func_mysqlnd_net__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len); -typedef size_t (*func_mysqlnd_net__send)(MYSQLND_NET * const net, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); -typedef enum_func_status (*func_mysqlnd_net__receive)(MYSQLND_NET * const net, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); -typedef enum_func_status (*func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer)(MYSQLND_NET * net, MYSQLND_VIO * const vio, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info); -typedef void (*func_mysqlnd_net__free_contents)(MYSQLND_NET * net); - -MYSQLND_CLASS_METHODS_TYPE(mysqlnd_net) -{ - func_mysqlnd_net__init init; - func_mysqlnd_net__dtor dtor; - func_mysqlnd_net__connect connect; - func_mysqlnd_net__set_client_option set_client_option; - - func_mysqlnd_net__decode decode; - func_mysqlnd_net__encode encode; - - func_mysqlnd_net__send send; - func_mysqlnd_net__receive receive; - - func_mysqlnd_net__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer; - - func_mysqlnd_net__free_contents free_contents; -}; - - typedef enum_func_status (*func_mysqlnd_vio__init)(MYSQLND_VIO * const vio, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); typedef void (*func_mysqlnd_vio__dtor)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); @@ -419,7 +378,7 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory); typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(struct st_mysqlnd_object_factory_methods * factory, zend_bool persistent); typedef MYSQLND * (*func_mysqlnd_object_factory__clone_connection_object)(MYSQLND * conn); typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn, zend_bool persistent); -typedef MYSQLND_NET * (*func_mysqlnd_object_factory__get_net)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); +typedef MYSQLND_PPEC * (*func_mysqlnd_object_factory__get_net)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); typedef MYSQLND_VIO * (*func_mysqlnd_object_factory__get_vio)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); typedef MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * (*func_mysqlnd_object_factory__get_protocol_payload_decoder_factory)(MYSQLND_CONN_DATA * conn, zend_bool persistent); @@ -774,7 +733,7 @@ typedef enum_func_status (*func_mysqlnd_stmt__next_result)(MYSQLND_STMT * const typedef enum_func_status (*func_mysqlnd_stmt__free_result)(MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__seek_data)(const MYSQLND_STMT * const stmt, uint64_t row); typedef enum_func_status (*func_mysqlnd_stmt__reset)(MYSQLND_STMT * const stmt); -typedef enum_func_status (*func_mysqlnd_stmt__net_close)(MYSQLND_STMT * const stmt, zend_bool implicit); /* private */ +typedef enum_func_status (*func_mysqlnd_stmt__close_on_server)(MYSQLND_STMT * const stmt, zend_bool implicit); /* private */ typedef enum_func_status (*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, zend_bool implicit); /* use this for mysqlnd_stmt_close */ typedef enum_func_status (*func_mysqlnd_stmt__fetch)(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything); typedef enum_func_status (*func_mysqlnd_stmt__bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind); @@ -820,7 +779,7 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) func_mysqlnd_stmt__free_result free_result; func_mysqlnd_stmt__seek_data seek_data; func_mysqlnd_stmt__reset reset; - func_mysqlnd_stmt__net_close net_close; + func_mysqlnd_stmt__close_on_server close_on_server; func_mysqlnd_stmt__dtor dtor; func_mysqlnd_stmt__fetch fetch; @@ -867,42 +826,6 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) }; -struct st_mysqlnd_net_data -{ - php_stream *stream; - zend_bool compressed; - zend_bool ssl; - MYSQLND_NET_OPTIONS options; - - unsigned int refcount; - - zend_bool persistent; - - MYSQLND_CLASS_METHODS_TYPE(mysqlnd_net) m; -}; - - -struct st_mysqlnd_net -{ - /* cmd buffer */ -// MYSQLND_CMD_BUFFER cmd_buffer; - - struct st_mysqlnd_net_data * data; - -#ifdef MYSQLND_COMPRESSION_ENABLED - MYSQLND_READ_BUFFER * uncompressed_data; -#else - void * unused_pad1; -#endif - - zend_bool persistent; - - /* sequence for simple checking of correct packets */ - zend_uchar packet_no; - zend_uchar compressed_envelope_packet_no; -}; - - struct st_mysqlnd_vio_data { php_stream *stream; @@ -963,7 +886,7 @@ struct st_mysqlnd_connection_state struct st_mysqlnd_connection_data { /* Operation related */ - MYSQLND_NET * net; + MYSQLND_PPEC * net; MYSQLND_VIO * vio; MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory; @@ -1152,6 +1075,82 @@ struct st_mysqlnd_protocol_payload_decoder_factory }; +typedef struct st_mysqlnd_read_buffer { + zend_uchar * data; + size_t offset; + size_t size; + size_t len; + zend_bool (*is_empty)(struct st_mysqlnd_read_buffer *); + void (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest); + size_t (*bytes_left)(struct st_mysqlnd_read_buffer *); + void (*free_buffer)(struct st_mysqlnd_read_buffer **); +} MYSQLND_READ_BUFFER; + + + +typedef enum_func_status (*func_mysqlnd_ppec__init)(MYSQLND_PPEC * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); +typedef void (*func_mysqlnd_ppec__dtor)(MYSQLND_PPEC * const net, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_ppec__connect)(MYSQLND_PPEC * const net, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_ppec__set_client_option)(MYSQLND_PPEC * const net, enum_mysqlnd_client_option option, const char * const value); +typedef enum_func_status (*func_mysqlnd_ppec__decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len); +typedef enum_func_status (*func_mysqlnd_ppec__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len); +typedef size_t (*func_mysqlnd_ppec__send)(MYSQLND_PPEC * const net, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_ppec__receive)(MYSQLND_PPEC * const net, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); +typedef enum_func_status (*func_mysqlnd_ppec__read_compressed_packet_from_stream_and_fill_read_buffer)(MYSQLND_PPEC * net, MYSQLND_VIO * const vio, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info); +typedef void (*func_mysqlnd_ppec__free_contents)(MYSQLND_PPEC * net); + +MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec) +{ + func_mysqlnd_ppec__init init; + func_mysqlnd_ppec__dtor dtor; + func_mysqlnd_ppec__connect connect; + func_mysqlnd_ppec__set_client_option set_client_option; + + func_mysqlnd_ppec__decode decode; + func_mysqlnd_ppec__encode encode; + + func_mysqlnd_ppec__send send; + func_mysqlnd_ppec__receive receive; + + func_mysqlnd_ppec__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer; + + func_mysqlnd_ppec__free_contents free_contents; +}; + + +struct st_mysqlnd_protocol_packet_envelope_codec_data +{ + php_stream *stream; + zend_bool compressed; + zend_bool ssl; + MYSQLND_PPEC_OPTIONS options; + + unsigned int refcount; + + zend_bool persistent; + + MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec) m; +}; + + +struct st_mysqlnd_protocol_packet_envelope_codec +{ + struct st_mysqlnd_protocol_packet_envelope_codec_data * data; + +#ifdef MYSQLND_COMPRESSION_ENABLED + MYSQLND_READ_BUFFER * uncompressed_data; +#else + void * unused_pad1; +#endif + + zend_bool persistent; + + /* sequence for simple checking of correct packets */ + zend_uchar packet_no; + zend_uchar compressed_envelope_packet_no; +}; + + struct mysqlnd_field_hash_key { @@ -1373,7 +1372,7 @@ typedef zend_uchar * (*func_auth_plugin__get_auth_data)(struct st_mysqlnd_authen MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len, const MYSQLND_SESSION_OPTIONS * const session_options, - const MYSQLND_NET_OPTIONS * const net_options, zend_ulong mysql_flags + const MYSQLND_PPEC_OPTIONS * const net_options, zend_ulong mysql_flags ); struct st_mysqlnd_authentication_plugin diff --git a/ext/mysqlnd/mysqlnd_vio.c b/ext/mysqlnd/mysqlnd_vio.c index 0aa06e21df..aedec29469 100644 --- a/ext/mysqlnd/mysqlnd_vio.c +++ b/ext/mysqlnd/mysqlnd_vio.c @@ -14,7 +14,6 @@ +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | - | Georg Richter | +----------------------------------------------------------------------+ */ @@ -475,7 +474,7 @@ MYSQLND_METHOD(mysqlnd_vio, consume_uneaten_data)(MYSQLND_VIO * const net, enum php_stream * net_stream = net->data->get_stream(net); int was_blocked = net_stream->ops->set_option(net_stream, opt, 0, NULL); - DBG_ENTER("mysqlnd_net::consume_uneaten_data"); + DBG_ENTER("mysqlnd_vio::consume_uneaten_data"); if (PHP_STREAM_OPTION_RETURN_ERR != was_blocked) { /* Do a read of 1 byte */ @@ -630,7 +629,7 @@ MYSQLND_METHOD(mysqlnd_vio, enable_ssl)(MYSQLND_VIO * const net) static enum_func_status MYSQLND_METHOD(mysqlnd_vio, disable_ssl)(MYSQLND_VIO * const vio) { - DBG_ENTER("mysqlnd_net::disable_ssl"); + DBG_ENTER("mysqlnd_vio::disable_ssl"); DBG_RETURN(PASS); } /* }}} */ diff --git a/ext/mysqlnd/mysqlnd_vio.h b/ext/mysqlnd/mysqlnd_vio.h index 3c7e3cb6a1..bf2d9b3e42 100644 --- a/ext/mysqlnd/mysqlnd_vio.h +++ b/ext/mysqlnd/mysqlnd_vio.h @@ -14,22 +14,16 @@ +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | - | Georg Richter | +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_wireprotocol.h 291983 2009-12-11 11:58:57Z andrey $ */ - -#ifndef MYSQLND_NET_H -#define MYSQLND_NET_H - -PHPAPI MYSQLND_NET * mysqlnd_net_init(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); -PHPAPI void mysqlnd_net_free(MYSQLND_NET * const net, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); +#ifndef MYSQLND_VIO_H +#define MYSQLND_VIO_H PHPAPI MYSQLND_VIO * mysqlnd_vio_init(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); PHPAPI void mysqlnd_vio_free(MYSQLND_VIO * const vio, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); -#endif /* MYSQLND_NET_H */ +#endif /* MYSQLND_VIO_H */ /* * Local variables: diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index 7199178b2c..86a160bc6b 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -248,7 +248,7 @@ end: /* {{{ mysqlnd_read_header */ static enum_func_status -mysqlnd_read_header(MYSQLND_NET * net, MYSQLND_VIO * vio, MYSQLND_PACKET_HEADER * header, +mysqlnd_read_header(MYSQLND_PPEC * net, MYSQLND_VIO * vio, MYSQLND_PACKET_HEADER * header, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info) { zend_uchar buffer[MYSQLND_HEADER_SIZE]; @@ -292,7 +292,7 @@ mysqlnd_read_header(MYSQLND_NET * net, MYSQLND_VIO * vio, MYSQLND_PACKET_HEADER /* {{{ mysqlnd_read_packet_header_and_body */ static enum_func_status mysqlnd_read_packet_header_and_body(MYSQLND_PACKET_HEADER * packet_header, - MYSQLND_NET * net, + MYSQLND_PPEC * net, MYSQLND_VIO * vio, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info, @@ -340,7 +340,7 @@ php_mysqlnd_greet_read(void * _packet) zend_uchar *pad_start = NULL; MYSQLND_PACKET_GREET *packet= (MYSQLND_PACKET_GREET *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -509,7 +509,7 @@ size_t php_mysqlnd_auth_write(void * _packet) MYSQLND_PACKET_AUTH * packet= (MYSQLND_PACKET_AUTH *) _packet; MYSQLND_CONN_DATA * conn = packet->header.conn; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -671,7 +671,7 @@ php_mysqlnd_auth_response_read(void * _packet) { register MYSQLND_PACKET_AUTH_RESPONSE * packet= (MYSQLND_PACKET_AUTH_RESPONSE *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -798,7 +798,7 @@ php_mysqlnd_change_auth_response_write(void * _packet) { MYSQLND_PACKET_CHANGE_AUTH_RESPONSE *packet= (MYSQLND_PACKET_CHANGE_AUTH_RESPONSE *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -846,7 +846,7 @@ php_mysqlnd_ok_read(void * _packet) { register MYSQLND_PACKET_OK *packet= (MYSQLND_PACKET_OK *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -944,7 +944,7 @@ php_mysqlnd_eof_read(void * _packet) */ MYSQLND_PACKET_EOF *packet= (MYSQLND_PACKET_EOF *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -1023,7 +1023,7 @@ size_t php_mysqlnd_cmd_write(void * _packet) /* Let's have some space, which we can use, if not enough, we will allocate new buffer */ MYSQLND_PACKET_COMMAND * packet= (MYSQLND_PACKET_COMMAND *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -1104,7 +1104,7 @@ php_mysqlnd_rset_header_read(void * _packet) { MYSQLND_PACKET_RSET_HEADER * packet= (MYSQLND_PACKET_RSET_HEADER *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -1250,7 +1250,7 @@ php_mysqlnd_rset_field_read(void * _packet) /* Should be enough for the metadata of a single row */ MYSQLND_PACKET_RES_FIELD *packet = (MYSQLND_PACKET_RES_FIELD *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -1465,7 +1465,7 @@ void php_mysqlnd_rset_field_free_mem(void * _packet, zend_bool stack_allocation) /* {{{ php_mysqlnd_read_row_ex */ static enum_func_status -php_mysqlnd_read_row_ex(MYSQLND_NET * net, +php_mysqlnd_read_row_ex(MYSQLND_PPEC * net, MYSQLND_VIO * vio, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info, @@ -1825,7 +1825,7 @@ php_mysqlnd_rowp_read(void * _packet) { MYSQLND_PACKET_ROW *packet= (MYSQLND_PACKET_ROW *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; zend_uchar *p; @@ -1950,7 +1950,7 @@ php_mysqlnd_stats_read(void * _packet) { MYSQLND_PACKET_STATS *packet= (MYSQLND_PACKET_STATS *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -1999,7 +1999,7 @@ php_mysqlnd_prepare_read(void * _packet) { MYSQLND_PACKET_PREPARE_RESPONSE *packet= (MYSQLND_PACKET_PREPARE_RESPONSE *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -2094,7 +2094,7 @@ php_mysqlnd_chg_user_read(void * _packet) { MYSQLND_PACKET_CHG_USER_RESPONSE *packet= (MYSQLND_PACKET_CHG_USER_RESPONSE *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -2189,7 +2189,7 @@ size_t php_mysqlnd_sha256_pk_request_write(void * _packet) { MYSQLND_PACKET_SHA256_PK_REQUEST * packet = (MYSQLND_PACKET_SHA256_PK_REQUEST *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; zend_uchar buffer[MYSQLND_HEADER_SIZE + 1]; @@ -2225,7 +2225,7 @@ php_mysqlnd_sha256_pk_request_response_read(void * _packet) { MYSQLND_PACKET_SHA256_PK_REQUEST_RESPONSE * packet= (MYSQLND_PACKET_SHA256_PK_REQUEST_RESPONSE *) _packet; MYSQLND_ERROR_INFO * error_info = packet->header.error_info; - MYSQLND_NET * net = packet->header.net; + MYSQLND_PPEC * net = packet->header.net; MYSQLND_VIO * vio = packet->header.vio; MYSQLND_STATS * stats = packet->header.stats; MYSQLND_CONNECTION_STATE * connection_state = packet->header.connection_state; @@ -2936,12 +2936,12 @@ MYSQLND_METHOD(mysqlnd_protocol, send_command_handle_response)( -/* {{{ mysqlnd_net::connect */ +/* {{{ mysqlnd_ppec::connect */ static enum_func_status -MYSQLND_METHOD(mysqlnd_net, connect)(MYSQLND_NET * const net, const MYSQLND_CSTRING scheme, const zend_bool persistent, +MYSQLND_METHOD(mysqlnd_ppec, connect)(MYSQLND_PPEC * const net, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info) { - DBG_ENTER("mysqlnd_net::connect"); + DBG_ENTER("mysqlnd_ppec::connect"); net->packet_no = net->compressed_envelope_packet_no = 0; DBG_RETURN(PASS); } @@ -2958,7 +2958,7 @@ MYSQLND_METHOD(mysqlnd_net, connect)(MYSQLND_NET * const net, const MYSQLND_CSTR #define RESTORE_HEADER_SIZE(buffer, safe_storage) STORE_HEADER_SIZE((safe_storage), (buffer)) -/* {{{ mysqlnd_net::send */ +/* {{{ mysqlnd_ppec::send */ /* IMPORTANT : It's expected that buffer has place in the beginning for MYSQLND_HEADER_SIZE !!!! This is done for performance reasons in the caller of this function. @@ -2970,7 +2970,7 @@ MYSQLND_METHOD(mysqlnd_net, connect)(MYSQLND_NET * const net, const MYSQLND_CSTR count + MYSQLND_HEADER_SIZE = sizeof(buffer) (not the pointer but the actual buffer) */ static size_t -MYSQLND_METHOD(mysqlnd_net, send)(MYSQLND_NET * const net, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, +MYSQLND_METHOD(mysqlnd_ppec, send)(MYSQLND_PPEC * const net, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info) { zend_uchar safe_buf[((MYSQLND_HEADER_SIZE) + (sizeof(zend_uchar)) - 1) / (sizeof(zend_uchar))]; @@ -2981,7 +2981,7 @@ MYSQLND_METHOD(mysqlnd_net, send)(MYSQLND_NET * const net, MYSQLND_VIO * const v zend_uchar * compress_buf = NULL; size_t to_be_sent; - DBG_ENTER("mysqlnd_net::send"); + DBG_ENTER("mysqlnd_ppec::send"); DBG_INF_FMT("count=" MYSQLND_SZ_T_SPEC " compression=%u", count, net->data->compressed); if (net->data->compressed == TRUE) { @@ -3156,16 +3156,16 @@ mysqlnd_create_read_buffer(size_t count) /* }}} */ -/* {{{ mysqlnd_net::read_compressed_packet_from_stream_and_fill_read_buffer */ +/* {{{ mysqlnd_ppec::read_compressed_packet_from_stream_and_fill_read_buffer */ static enum_func_status -MYSQLND_METHOD(mysqlnd_net, read_compressed_packet_from_stream_and_fill_read_buffer) - (MYSQLND_NET * net, MYSQLND_VIO * vio, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info) +MYSQLND_METHOD(mysqlnd_ppec, read_compressed_packet_from_stream_and_fill_read_buffer) + (MYSQLND_PPEC * net, MYSQLND_VIO * vio, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info) { size_t decompressed_size; enum_func_status retval = PASS; zend_uchar * compressed_data = NULL; zend_uchar comp_header[COMPRESSED_HEADER_SIZE]; - DBG_ENTER("mysqlnd_net::read_compressed_packet_from_stream_and_fill_read_buffer"); + DBG_ENTER("mysqlnd_ppec::read_compressed_packet_from_stream_and_fill_read_buffer"); /* Read the compressed header */ if (FAIL == vio->data->m.network_read(vio, comp_header, COMPRESSED_HEADER_SIZE, conn_stats, error_info)) { @@ -3205,15 +3205,15 @@ end: #endif /* MYSQLND_COMPRESSION_ENABLED */ -/* {{{ mysqlnd_net::decode */ +/* {{{ mysqlnd_ppec::decode */ static enum_func_status -MYSQLND_METHOD(mysqlnd_net, decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, +MYSQLND_METHOD(mysqlnd_ppec, decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len) { #ifdef MYSQLND_COMPRESSION_ENABLED int error; uLongf tmp_complen = uncompressed_data_len; - DBG_ENTER("mysqlnd_net::decode"); + DBG_ENTER("mysqlnd_ppec::decode"); error = uncompress(uncompressed_data, &tmp_complen, compressed_data, compressed_data_len); DBG_INF_FMT("compressed data: decomp_len=%lu compressed_size="MYSQLND_SZ_T_SPEC, tmp_complen, compressed_data_len); @@ -3222,22 +3222,22 @@ MYSQLND_METHOD(mysqlnd_net, decode)(zend_uchar * uncompressed_data, const size_t } DBG_RETURN(error == Z_OK? PASS:FAIL); #else - DBG_ENTER("mysqlnd_net::decode"); + DBG_ENTER("mysqlnd_ppec::decode"); DBG_RETURN(FAIL); #endif } /* }}} */ -/* {{{ mysqlnd_net::encode */ +/* {{{ mysqlnd_ppec::encode */ static enum_func_status -MYSQLND_METHOD(mysqlnd_net, encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, +MYSQLND_METHOD(mysqlnd_ppec, encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len) { #ifdef MYSQLND_COMPRESSION_ENABLED int error; uLongf tmp_complen = *compress_buffer_len; - DBG_ENTER("mysqlnd_net::encode"); + DBG_ENTER("mysqlnd_ppec::encode"); error = compress(compress_buffer, &tmp_complen, uncompressed_data, uncompressed_data_len); if (error != Z_OK) { @@ -3249,22 +3249,22 @@ MYSQLND_METHOD(mysqlnd_net, encode)(zend_uchar * compress_buffer, size_t * compr DBG_RETURN(error == Z_OK? PASS:FAIL); #else - DBG_ENTER("mysqlnd_net::encode"); + DBG_ENTER("mysqlnd_ppec::encode"); DBG_RETURN(FAIL); #endif } /* }}} */ -/* {{{ mysqlnd_net::receive */ +/* {{{ mysqlnd_ppec::receive */ static enum_func_status -MYSQLND_METHOD(mysqlnd_net, receive)(MYSQLND_NET * const net, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, +MYSQLND_METHOD(mysqlnd_ppec, receive)(MYSQLND_PPEC * const net, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info) { size_t to_read = count; zend_uchar * p = buffer; - DBG_ENTER("mysqlnd_net::receive"); + DBG_ENTER("mysqlnd_ppec::receive"); #ifdef MYSQLND_COMPRESSION_ENABLED if (net->data->compressed) { if (net->uncompressed_data) { @@ -3322,11 +3322,11 @@ MYSQLND_METHOD(mysqlnd_net, receive)(MYSQLND_NET * const net, MYSQLND_VIO * cons /* }}} */ -/* {{{ mysqlnd_net::set_client_option */ +/* {{{ mysqlnd_ppec::set_client_option */ static enum_func_status -MYSQLND_METHOD(mysqlnd_net, set_client_option)(MYSQLND_NET * const net, enum_mysqlnd_client_option option, const char * const value) +MYSQLND_METHOD(mysqlnd_ppec, set_client_option)(MYSQLND_PPEC * const net, enum_mysqlnd_client_option option, const char * const value) { - DBG_ENTER("mysqlnd_net::set_client_option"); + DBG_ENTER("mysqlnd_ppec::set_client_option"); DBG_INF_FMT("option=%u", option); switch (option) { case MYSQL_OPT_COMPRESS: @@ -3349,12 +3349,12 @@ MYSQLND_METHOD(mysqlnd_net, set_client_option)(MYSQLND_NET * const net, enum_mys /* }}} */ -/* {{{ mysqlnd_net::free_contents */ +/* {{{ mysqlnd_ppec::free_contents */ static void -MYSQLND_METHOD(mysqlnd_net, free_contents)(MYSQLND_NET * net) +MYSQLND_METHOD(mysqlnd_ppec, free_contents)(MYSQLND_PPEC * net) { zend_bool pers = net->persistent; - DBG_ENTER("mysqlnd_net::free_contents"); + DBG_ENTER("mysqlnd_ppec::free_contents"); #ifdef MYSQLND_COMPRESSION_ENABLED if (net->uncompressed_data) { @@ -3371,20 +3371,20 @@ MYSQLND_METHOD(mysqlnd_net, free_contents)(MYSQLND_NET * net) /* }}} */ -/* {{{ mysqlnd_net::init */ +/* {{{ mysqlnd_ppec::init */ static enum_func_status -MYSQLND_METHOD(mysqlnd_net, init)(MYSQLND_NET * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) +MYSQLND_METHOD(mysqlnd_ppec, init)(MYSQLND_PPEC * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) { return PASS; } /* }}} */ -/* {{{ mysqlnd_net::dtor */ +/* {{{ mysqlnd_ppec::dtor */ static void -MYSQLND_METHOD(mysqlnd_net, dtor)(MYSQLND_NET * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) +MYSQLND_METHOD(mysqlnd_ppec, dtor)(MYSQLND_PPEC * const net, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info) { - DBG_ENTER("mysqlnd_net::dtor"); + DBG_ENTER("mysqlnd_ppec::dtor"); if (net) { net->data->m.free_contents(net); @@ -3396,46 +3396,46 @@ MYSQLND_METHOD(mysqlnd_net, dtor)(MYSQLND_NET * const net, MYSQLND_STATS * const /* }}} */ -MYSQLND_CLASS_METHODS_START(mysqlnd_net) - MYSQLND_METHOD(mysqlnd_net, init), - MYSQLND_METHOD(mysqlnd_net, dtor), - MYSQLND_METHOD(mysqlnd_net, connect), +MYSQLND_CLASS_METHODS_START(mysqlnd_protocol_packet_envelope_codec) + MYSQLND_METHOD(mysqlnd_ppec, init), + MYSQLND_METHOD(mysqlnd_ppec, dtor), + MYSQLND_METHOD(mysqlnd_ppec, connect), - MYSQLND_METHOD(mysqlnd_net, set_client_option), + MYSQLND_METHOD(mysqlnd_ppec, set_client_option), - MYSQLND_METHOD(mysqlnd_net, decode), - MYSQLND_METHOD(mysqlnd_net, encode), + MYSQLND_METHOD(mysqlnd_ppec, decode), + MYSQLND_METHOD(mysqlnd_ppec, encode), - MYSQLND_METHOD(mysqlnd_net, send), - MYSQLND_METHOD(mysqlnd_net, receive), + MYSQLND_METHOD(mysqlnd_ppec, send), + MYSQLND_METHOD(mysqlnd_ppec, receive), #ifdef MYSQLND_COMPRESSION_ENABLED - MYSQLND_METHOD(mysqlnd_net, read_compressed_packet_from_stream_and_fill_read_buffer), + MYSQLND_METHOD(mysqlnd_ppec, read_compressed_packet_from_stream_and_fill_read_buffer), #else NULL, #endif - MYSQLND_METHOD(mysqlnd_net, free_contents), + MYSQLND_METHOD(mysqlnd_ppec, free_contents), MYSQLND_CLASS_METHODS_END; -/* {{{ mysqlnd_net_init */ -PHPAPI MYSQLND_NET * -mysqlnd_net_init(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) +/* {{{ mysqlnd_ppec_init */ +PHPAPI MYSQLND_PPEC * +mysqlnd_ppec_init(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) { - MYSQLND_NET * net; - DBG_ENTER("mysqlnd_net_init"); + MYSQLND_PPEC * net; + DBG_ENTER("mysqlnd_ppec_init"); net = MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_object_factory).get_net(persistent, stats, error_info); DBG_RETURN(net); } /* }}} */ -/* {{{ mysqlnd_net_free */ +/* {{{ mysqlnd_ppec_free */ PHPAPI void -mysqlnd_net_free(MYSQLND_NET * const net, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) +mysqlnd_ppec_free(MYSQLND_PPEC * const net, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info) { - DBG_ENTER("mysqlnd_net_free"); + DBG_ENTER("mysqlnd_ppec_free"); if (net) { net->data->m.dtor(net, stats, error_info); } diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.h b/ext/mysqlnd/mysqlnd_wireprotocol.h index 15cc02f95e..e43c1324da 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.h +++ b/ext/mysqlnd/mysqlnd_wireprotocol.h @@ -63,7 +63,7 @@ typedef struct st_mysqlnd_packet_header { mysqlnd_packet_methods *m; MYSQLND_CONN_DATA * conn; - MYSQLND_NET * net; + MYSQLND_PPEC * net; MYSQLND_VIO * vio; MYSQLND_ERROR_INFO * error_info; MYSQLND_STATS * stats; @@ -324,6 +324,11 @@ enum_func_status php_mysqlnd_rowp_read_text_protocol_c(MYSQLND_MEMORY_POOL_CHUNK PHPAPI MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * mysqlnd_protocol_payload_decoder_factory_init(MYSQLND_CONN_DATA * conn, zend_bool persistent); PHPAPI void mysqlnd_protocol_payload_decoder_factory_free(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory); + +PHPAPI MYSQLND_PPEC * mysqlnd_ppec_init(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); +PHPAPI void mysqlnd_ppec_free(MYSQLND_PPEC * const net, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); + + #endif /* MYSQLND_WIREPROTOCOL_H */ /*