- rename MYSQLND_NET to MYSQLND_PPEC (protocol packet envelope codec).
  PPEC does only the encoding and decoding to the protocol frame.
This commit is contained in:
Andrey Hristov 2015-11-10 11:02:33 +01:00
parent 80d59a3a36
commit 654d1a7caf
13 changed files with 246 additions and 234 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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 (ppec && ppec_data) {
ppec->data = ppec_data;
ppec->persistent = ppec->data->persistent = persistent;
ppec->data->m = *mysqlnd_ppec_get_methods();
if (PASS != net->data->m.init(net, stats, error_info)) {
net->data->m.dtor(net, stats, error_info);
net = NULL;
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;

View File

@ -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,

View File

@ -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))

View File

@ -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");

View File

@ -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);

View File

@ -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),

View File

@ -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

View File

@ -14,7 +14,6 @@
+----------------------------------------------------------------------+
| Authors: Andrey Hristov <andrey@mysql.com> |
| Ulf Wendel <uwendel@mysql.com> |
| Georg Richter <georg@mysql.com> |
+----------------------------------------------------------------------+
*/
@ -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);
}
/* }}} */

View File

@ -14,22 +14,16 @@
+----------------------------------------------------------------------+
| Authors: Andrey Hristov <andrey@mysql.com> |
| Ulf Wendel <uwendel@mysql.com> |
| Georg Richter <georg@mysql.com> |
+----------------------------------------------------------------------+
*/
/* $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:

View File

@ -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);
}

View File

@ -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 */
/*