- move all data members from MYSQLND_PFC to MYSQLND_PFC_DATA
This commit is contained in:
Andrey Hristov 2015-11-10 12:56:07 +01:00
parent c286d7075d
commit 2cea04165c
5 changed files with 72 additions and 78 deletions

View File

@ -543,7 +543,7 @@ mysqlnd_run_authentication(
scrambled_data = scrambled_data =
auth_plugin->methods.get_auth_data(NULL, &scrambled_data_len, conn, user, passwd, passwd_len, auth_plugin->methods.get_auth_data(NULL, &scrambled_data_len, conn, user, passwd, passwd_len,
plugin_data, plugin_data_len, session_options, plugin_data, plugin_data_len, session_options,
&conn->protocol_frame_codec->data->options, mysql_flags); conn->protocol_frame_codec->data, mysql_flags);
if (conn->error_info->error_no) { if (conn->error_info->error_no) {
goto end; goto end;
} }
@ -685,7 +685,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, get_updated_connect_flags)(MYSQLND_CONN_DATA *
mysql_flags &= ~CLIENT_COMPRESS; mysql_flags &= ~CLIENT_COMPRESS;
} }
#else #else
if (pfc && pfc->data->options.flags & MYSQLND_NET_FLAG_USE_COMPRESSION) { if (pfc && pfc->data->flags & MYSQLND_NET_FLAG_USE_COMPRESSION) {
mysql_flags |= CLIENT_COMPRESS; mysql_flags |= CLIENT_COMPRESS;
} }
#endif #endif
@ -694,8 +694,11 @@ MYSQLND_METHOD(mysqlnd_conn_data, get_updated_connect_flags)(MYSQLND_CONN_DATA *
mysql_flags &= ~CLIENT_SSL; mysql_flags &= ~CLIENT_SSL;
} }
#else #else
if (vio && (vio->data->options.ssl_key || vio->data->options.ssl_cert || if (vio && (vio->data->options.ssl_key ||
vio->data->options.ssl_ca || vio->data->options.ssl_capath || vio->data->options.ssl_cipher)) vio->data->options.ssl_cert ||
vio->data->options.ssl_ca ||
vio->data->options.ssl_capath ||
vio->data->options.ssl_cipher))
{ {
mysql_flags |= CLIENT_SSL; mysql_flags |= CLIENT_SSL;
} }

View File

@ -224,7 +224,7 @@ mysqlnd_auth_change_user(MYSQLND_CONN_DATA * const conn,
if (!PACKET_WRITE(auth_packet)) { if (!PACKET_WRITE(auth_packet)) {
SET_CONNECTION_STATE(&conn->state, CONN_QUIT_SENT); SET_CONNECTION_STATE(&conn->state, CONN_QUIT_SENT);
SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone); SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
goto end; goto end;
} }
} }
@ -359,7 +359,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, 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 size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len,
const MYSQLND_SESSION_OPTIONS * const session_options, const MYSQLND_SESSION_OPTIONS * const session_options,
const MYSQLND_PFC_OPTIONS * const ppec_options, const MYSQLND_PFC_DATA * const pfc_data,
zend_ulong mysql_flags zend_ulong mysql_flags
) )
{ {
@ -419,7 +419,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, 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 size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len,
const MYSQLND_SESSION_OPTIONS * const session_options, const MYSQLND_SESSION_OPTIONS * const session_options,
const MYSQLND_PFC_OPTIONS * const ppec_options, const MYSQLND_PFC_DATA * const pfc_data,
zend_ulong mysql_flags zend_ulong mysql_flags
) )
{ {
@ -480,17 +480,17 @@ mysqlnd_xor_string(char * dst, const size_t dst_len, const char * xor_str, const
static RSA * static RSA *
mysqlnd_sha256_get_rsa_key(MYSQLND_CONN_DATA * conn, mysqlnd_sha256_get_rsa_key(MYSQLND_CONN_DATA * conn,
const MYSQLND_SESSION_OPTIONS * const session_options, const MYSQLND_SESSION_OPTIONS * const session_options,
const MYSQLND_PFC_OPTIONS * const io_options const MYSQLND_PFC_DATA * const pfc_data
) )
{ {
RSA * ret = NULL; RSA * ret = NULL;
const char * fname = (io_options->sha256_server_public_key && io_options->sha256_server_public_key[0] != '\0')? const char * fname = (pfc_data->sha256_server_public_key && pfc_data->sha256_server_public_key[0] != '\0')?
io_options->sha256_server_public_key: pfc_data->sha256_server_public_key:
MYSQLND_G(sha256_server_public_key); MYSQLND_G(sha256_server_public_key);
php_stream * stream; php_stream * stream;
DBG_ENTER("mysqlnd_sha256_get_rsa_key"); DBG_ENTER("mysqlnd_sha256_get_rsa_key");
DBG_INF_FMT("options_s256_pk=[%s] MYSQLND_G(sha256_server_public_key)=[%s]", DBG_INF_FMT("options_s256_pk=[%s] MYSQLND_G(sha256_server_public_key)=[%s]",
io_options->sha256_server_public_key? io_options->sha256_server_public_key:"n/a", pfc_data->sha256_server_public_key? pfc_data->sha256_server_public_key:"n/a",
MYSQLND_G(sha256_server_public_key)? MYSQLND_G(sha256_server_public_key):"n/a"); MYSQLND_G(sha256_server_public_key)? MYSQLND_G(sha256_server_public_key):"n/a");
if (!fname || fname[0] == '\0') { if (!fname || fname[0] == '\0') {
MYSQLND_PACKET_SHA256_PK_REQUEST * pk_req_packet = NULL; MYSQLND_PACKET_SHA256_PK_REQUEST * pk_req_packet = NULL;
@ -569,7 +569,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, 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 size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len,
const MYSQLND_SESSION_OPTIONS * const session_options, const MYSQLND_SESSION_OPTIONS * const session_options,
const MYSQLND_PFC_OPTIONS * const ppec_options, const MYSQLND_PFC_DATA * const pfc_data,
zend_ulong mysql_flags zend_ulong mysql_flags
) )
{ {
@ -587,7 +587,7 @@ mysqlnd_sha256_auth_get_auth_data(struct st_mysqlnd_authentication_plugin * self
memcpy(ret, passwd, passwd_len); memcpy(ret, passwd, passwd_len);
} else { } else {
*auth_data_len = 0; *auth_data_len = 0;
server_public_key = mysqlnd_sha256_get_rsa_key(conn, session_options, ppec_options); server_public_key = mysqlnd_sha256_get_rsa_key(conn, session_options, pfc_data);
if (server_public_key) { if (server_public_key) {
int server_public_key_len; int server_public_key_len;

View File

@ -36,7 +36,7 @@ static enum_func_status
MYSQLND_METHOD(mysqlnd_pfc, reset)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info) MYSQLND_METHOD(mysqlnd_pfc, reset)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info)
{ {
DBG_ENTER("mysqlnd_pfc::reset"); DBG_ENTER("mysqlnd_pfc::reset");
pfc->packet_no = pfc->compressed_envelope_packet_no = 0; pfc->data->packet_no = pfc->data->compressed_envelope_packet_no = 0;
DBG_RETURN(PASS); DBG_RETURN(PASS);
} }
/* }}} */ /* }}} */
@ -88,8 +88,8 @@ MYSQLND_METHOD(mysqlnd_pfc, send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const v
to_be_sent = MIN(left, MYSQLND_MAX_PACKET_SIZE); to_be_sent = MIN(left, MYSQLND_MAX_PACKET_SIZE);
DBG_INF_FMT("to_be_sent=%u", to_be_sent); DBG_INF_FMT("to_be_sent=%u", to_be_sent);
DBG_INF_FMT("packets_sent=%u", packets_sent); DBG_INF_FMT("packets_sent=%u", packets_sent);
DBG_INF_FMT("compressed_envelope_packet_no=%u", pfc->compressed_envelope_packet_no); DBG_INF_FMT("compressed_envelope_packet_no=%u", pfc->data->compressed_envelope_packet_no);
DBG_INF_FMT("packet_no=%u", pfc->packet_no); DBG_INF_FMT("packet_no=%u", pfc->data->packet_no);
#ifdef MYSQLND_COMPRESSION_ENABLED #ifdef MYSQLND_COMPRESSION_ENABLED
if (pfc->data->compressed == TRUE) { if (pfc->data->compressed == TRUE) {
/* here we need to compress the data and then write it, first comes the compressed header */ /* here we need to compress the data and then write it, first comes the compressed header */
@ -99,7 +99,7 @@ MYSQLND_METHOD(mysqlnd_pfc, send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const v
STORE_HEADER_SIZE(safe_storage, uncompressed_payload); STORE_HEADER_SIZE(safe_storage, uncompressed_payload);
int3store(uncompressed_payload, to_be_sent); int3store(uncompressed_payload, to_be_sent);
int1store(uncompressed_payload + 3, pfc->packet_no); int1store(uncompressed_payload + 3, pfc->data->packet_no);
if (PASS == pfc->data->m.encode((compress_buf + COMPRESSED_HEADER_SIZE + MYSQLND_HEADER_SIZE), &tmp_complen, if (PASS == pfc->data->m.encode((compress_buf + COMPRESSED_HEADER_SIZE + MYSQLND_HEADER_SIZE), &tmp_complen,
uncompressed_payload, to_be_sent + MYSQLND_HEADER_SIZE)) uncompressed_payload, to_be_sent + MYSQLND_HEADER_SIZE))
{ {
@ -113,10 +113,10 @@ MYSQLND_METHOD(mysqlnd_pfc, send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const v
RESTORE_HEADER_SIZE(uncompressed_payload, safe_storage); RESTORE_HEADER_SIZE(uncompressed_payload, safe_storage);
int3store(compress_buf, payload_size); int3store(compress_buf, payload_size);
int1store(compress_buf + 3, pfc->packet_no); int1store(compress_buf + 3, pfc->data->packet_no);
DBG_INF_FMT("writing "MYSQLND_SZ_T_SPEC" bytes to the network", payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE); DBG_INF_FMT("writing "MYSQLND_SZ_T_SPEC" bytes to the network", payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE);
bytes_sent = vio->data->m.network_write(vio, compress_buf, payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE, conn_stats, error_info); bytes_sent = vio->data->m.network_write(vio, compress_buf, payload_size + MYSQLND_HEADER_SIZE + COMPRESSED_HEADER_SIZE, conn_stats, error_info);
pfc->compressed_envelope_packet_no++; pfc->data->compressed_envelope_packet_no++;
#if WHEN_WE_NEED_TO_CHECK_WHETHER_COMPRESSION_WORKS_CORRECTLY #if WHEN_WE_NEED_TO_CHECK_WHETHER_COMPRESSION_WORKS_CORRECTLY
if (res == Z_OK) { if (res == Z_OK) {
size_t decompressed_size = left + MYSQLND_HEADER_SIZE; size_t decompressed_size = left + MYSQLND_HEADER_SIZE;
@ -145,12 +145,12 @@ MYSQLND_METHOD(mysqlnd_pfc, send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const v
DBG_INF("no compression"); DBG_INF("no compression");
STORE_HEADER_SIZE(safe_storage, p); STORE_HEADER_SIZE(safe_storage, p);
int3store(p, to_be_sent); int3store(p, to_be_sent);
int1store(p + 3, pfc->packet_no); int1store(p + 3, pfc->data->packet_no);
bytes_sent = vio->data->m.network_write(vio, p, to_be_sent + MYSQLND_HEADER_SIZE, conn_stats, error_info); bytes_sent = vio->data->m.network_write(vio, p, to_be_sent + MYSQLND_HEADER_SIZE, conn_stats, error_info);
RESTORE_HEADER_SIZE(p, safe_storage); RESTORE_HEADER_SIZE(p, safe_storage);
pfc->compressed_envelope_packet_no++; pfc->data->compressed_envelope_packet_no++;
} }
pfc->packet_no++; pfc->data->packet_no++;
p += to_be_sent; p += to_be_sent;
left -= to_be_sent; left -= to_be_sent;
@ -164,7 +164,7 @@ MYSQLND_METHOD(mysqlnd_pfc, send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const v
*/ */
} while (bytes_sent && (left > 0 || to_be_sent == MYSQLND_MAX_PACKET_SIZE)); } while (bytes_sent && (left > 0 || to_be_sent == MYSQLND_MAX_PACKET_SIZE));
DBG_INF_FMT("packet_size="MYSQLND_SZ_T_SPEC" packet_no=%u", left, pfc->packet_no); DBG_INF_FMT("packet_size="MYSQLND_SZ_T_SPEC" packet_no=%u", left, pfc->data->packet_no);
MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats,
STAT_BYTES_SENT, count + packets_sent * MYSQLND_HEADER_SIZE, STAT_BYTES_SENT, count + packets_sent * MYSQLND_HEADER_SIZE,
@ -276,15 +276,15 @@ MYSQLND_METHOD(mysqlnd_pfc, read_compressed_packet_from_stream_and_fill_read_buf
retval = FAIL; retval = FAIL;
goto end; goto end;
} }
pfc->uncompressed_data = mysqlnd_create_read_buffer(decompressed_size); pfc->data->uncompressed_data = mysqlnd_create_read_buffer(decompressed_size);
retval = pfc->data->m.decode(pfc->uncompressed_data->data, decompressed_size, compressed_data, net_payload_size); retval = pfc->data->m.decode(pfc->data->uncompressed_data->data, decompressed_size, compressed_data, net_payload_size);
if (FAIL == retval) { if (FAIL == retval) {
goto end; goto end;
} }
} else { } else {
DBG_INF_FMT("The server decided not to compress the data. Our job is easy. Copying %u bytes", net_payload_size); DBG_INF_FMT("The server decided not to compress the data. Our job is easy. Copying %u bytes", net_payload_size);
pfc->uncompressed_data = mysqlnd_create_read_buffer(net_payload_size); pfc->data->uncompressed_data = mysqlnd_create_read_buffer(net_payload_size);
if (FAIL == vio->data->m.network_read(vio, pfc->uncompressed_data->data, net_payload_size, conn_stats, error_info)) { if (FAIL == vio->data->m.network_read(vio, pfc->data->uncompressed_data->data, net_payload_size, conn_stats, error_info)) {
retval = FAIL; retval = FAIL;
goto end; goto end;
} }
@ -361,18 +361,18 @@ MYSQLND_METHOD(mysqlnd_pfc, receive)(MYSQLND_PFC * const pfc, MYSQLND_VIO * cons
DBG_ENTER("mysqlnd_pfc::receive"); DBG_ENTER("mysqlnd_pfc::receive");
#ifdef MYSQLND_COMPRESSION_ENABLED #ifdef MYSQLND_COMPRESSION_ENABLED
if (pfc->data->compressed) { if (pfc->data->compressed) {
if (pfc->uncompressed_data) { if (pfc->data->uncompressed_data) {
size_t to_read_from_buffer = MIN(pfc->uncompressed_data->bytes_left(pfc->uncompressed_data), to_read); size_t to_read_from_buffer = MIN(pfc->data->uncompressed_data->bytes_left(pfc->data->uncompressed_data), to_read);
DBG_INF_FMT("reading "MYSQLND_SZ_T_SPEC" from uncompressed_data buffer", to_read_from_buffer); DBG_INF_FMT("reading "MYSQLND_SZ_T_SPEC" from uncompressed_data buffer", to_read_from_buffer);
if (to_read_from_buffer) { if (to_read_from_buffer) {
pfc->uncompressed_data->read(pfc->uncompressed_data, to_read_from_buffer, (zend_uchar *) p); pfc->data->uncompressed_data->read(pfc->data->uncompressed_data, to_read_from_buffer, (zend_uchar *) p);
p += to_read_from_buffer; p += to_read_from_buffer;
to_read -= to_read_from_buffer; to_read -= to_read_from_buffer;
} }
DBG_INF_FMT("left "MYSQLND_SZ_T_SPEC" to read", to_read); DBG_INF_FMT("left "MYSQLND_SZ_T_SPEC" to read", to_read);
if (TRUE == pfc->uncompressed_data->is_empty(pfc->uncompressed_data)) { if (TRUE == pfc->data->uncompressed_data->is_empty(pfc->data->uncompressed_data)) {
/* Everything was consumed. This should never happen here, but for security */ /* Everything was consumed. This should never happen here, but for security */
pfc->uncompressed_data->free_buffer(&pfc->uncompressed_data); pfc->data->uncompressed_data->free_buffer(&pfc->data->uncompressed_data);
} }
} }
if (to_read) { if (to_read) {
@ -385,15 +385,15 @@ MYSQLND_METHOD(mysqlnd_pfc, receive)(MYSQLND_PFC * const pfc, MYSQLND_VIO * cons
} }
net_payload_size = uint3korr(net_header); net_payload_size = uint3korr(net_header);
packet_no = uint1korr(net_header + 3); packet_no = uint1korr(net_header + 3);
if (pfc->compressed_envelope_packet_no != packet_no) { if (pfc->data->compressed_envelope_packet_no != packet_no) {
DBG_ERR_FMT("Transport level: packets out of order. Expected %u received %u. Packet size="MYSQLND_SZ_T_SPEC, DBG_ERR_FMT("Transport level: packets out of order. Expected %u received %u. Packet size="MYSQLND_SZ_T_SPEC,
pfc->compressed_envelope_packet_no, packet_no, net_payload_size); pfc->data->compressed_envelope_packet_no, packet_no, net_payload_size);
php_error(E_WARNING, "Packets out of order. Expected %u received %u. Packet size="MYSQLND_SZ_T_SPEC, php_error(E_WARNING, "Packets out of order. Expected %u received %u. Packet size="MYSQLND_SZ_T_SPEC,
pfc->compressed_envelope_packet_no, packet_no, net_payload_size); pfc->data->compressed_envelope_packet_no, packet_no, net_payload_size);
DBG_RETURN(FAIL); DBG_RETURN(FAIL);
} }
pfc->compressed_envelope_packet_no++; pfc->data->compressed_envelope_packet_no++;
#ifdef MYSQLND_DUMP_HEADER_N_BODY #ifdef MYSQLND_DUMP_HEADER_N_BODY
DBG_INF_FMT("HEADER: hwd_packet_no=%u size=%3u", packet_no, (zend_ulong) net_payload_size); DBG_INF_FMT("HEADER: hwd_packet_no=%u size=%3u", packet_no, (zend_ulong) net_payload_size);
#endif #endif
@ -424,15 +424,15 @@ MYSQLND_METHOD(mysqlnd_pfc, set_client_option)(MYSQLND_PFC * const pfc, enum_mys
DBG_INF_FMT("option=%u", option); DBG_INF_FMT("option=%u", option);
switch (option) { switch (option) {
case MYSQL_OPT_COMPRESS: case MYSQL_OPT_COMPRESS:
pfc->data->options.flags |= MYSQLND_NET_FLAG_USE_COMPRESSION; pfc->data->flags |= MYSQLND_NET_FLAG_USE_COMPRESSION;
break; break;
case MYSQL_SERVER_PUBLIC_KEY: case MYSQL_SERVER_PUBLIC_KEY:
{ {
zend_bool pers = pfc->persistent; zend_bool pers = pfc->persistent;
if (pfc->data->options.sha256_server_public_key) { if (pfc->data->sha256_server_public_key) {
mnd_pefree(pfc->data->options.sha256_server_public_key, pers); mnd_pefree(pfc->data->sha256_server_public_key, pers);
} }
pfc->data->options.sha256_server_public_key = value? mnd_pestrdup(value, pers) : NULL; pfc->data->sha256_server_public_key = value? mnd_pestrdup(value, pers) : NULL;
break; break;
} }
default: default:
@ -450,13 +450,13 @@ MYSQLND_METHOD(mysqlnd_pfc, free_contents)(MYSQLND_PFC * pfc)
DBG_ENTER("mysqlnd_pfc::free_contents"); DBG_ENTER("mysqlnd_pfc::free_contents");
#ifdef MYSQLND_COMPRESSION_ENABLED #ifdef MYSQLND_COMPRESSION_ENABLED
if (pfc->uncompressed_data) { if (pfc->data->uncompressed_data) {
pfc->uncompressed_data->free_buffer(&pfc->uncompressed_data); pfc->data->uncompressed_data->free_buffer(&pfc->data->uncompressed_data);
} }
#endif #endif
if (pfc->data->options.sha256_server_public_key) { if (pfc->data->sha256_server_public_key) {
mnd_pefree(pfc->data->options.sha256_server_public_key, pfc->persistent); mnd_pefree(pfc->data->sha256_server_public_key, pfc->persistent);
pfc->data->options.sha256_server_public_key = NULL; pfc->data->sha256_server_public_key = NULL;
} }
DBG_VOID_RETURN; DBG_VOID_RETURN;
@ -518,7 +518,7 @@ mysqlnd_pfc_init(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO
{ {
MYSQLND_PFC * pfc; MYSQLND_PFC * pfc;
DBG_ENTER("mysqlnd_pfc_init"); DBG_ENTER("mysqlnd_pfc_init");
pfc = MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_object_factory).get_net(persistent, stats, error_info); pfc = MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_object_factory).get_protocol_frame_codec(persistent, stats, error_info);
DBG_RETURN(pfc); DBG_RETURN(pfc);
} }
/* }}} */ /* }}} */

View File

@ -233,14 +233,6 @@ typedef struct st_mysqlnd_session_options
} MYSQLND_SESSION_OPTIONS; } MYSQLND_SESSION_OPTIONS;
typedef struct st_mysqlnd_protocol_frame_codec_options
{
uint64_t flags;
char * sha256_server_public_key;
} MYSQLND_PFC_OPTIONS;
typedef struct st_mysqlnd_vio_options typedef struct st_mysqlnd_vio_options
{ {
/* timeouts */ /* timeouts */
@ -376,7 +368,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__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 * (*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_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn, zend_bool persistent);
typedef MYSQLND_PFC * (*func_mysqlnd_object_factory__get_net)(zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); typedef MYSQLND_PFC * (*func_mysqlnd_object_factory__get_pfc)(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_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); typedef MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * (*func_mysqlnd_object_factory__get_protocol_payload_decoder_factory)(MYSQLND_CONN_DATA * conn, zend_bool persistent);
@ -386,7 +378,7 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory)
func_mysqlnd_object_factory__get_connection get_connection; func_mysqlnd_object_factory__get_connection get_connection;
func_mysqlnd_object_factory__clone_connection_object clone_connection_object; func_mysqlnd_object_factory__clone_connection_object clone_connection_object;
func_mysqlnd_object_factory__get_prepared_statement get_prepared_statement; func_mysqlnd_object_factory__get_prepared_statement get_prepared_statement;
func_mysqlnd_object_factory__get_net get_net; func_mysqlnd_object_factory__get_pfc get_protocol_frame_codec;
func_mysqlnd_object_factory__get_vio get_vio; func_mysqlnd_object_factory__get_vio get_vio;
func_mysqlnd_object_factory__get_protocol_payload_decoder_factory get_protocol_payload_decoder_factory; func_mysqlnd_object_factory__get_protocol_payload_decoder_factory get_protocol_payload_decoder_factory;
}; };
@ -1114,14 +1106,23 @@ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec)
struct st_mysqlnd_protocol_frame_codec_data struct st_mysqlnd_protocol_frame_codec_data
{ {
php_stream *stream; php_stream *stream;
zend_bool compressed; zend_bool compressed;
zend_bool ssl; zend_bool ssl;
MYSQLND_PFC_OPTIONS options; uint64_t flags;
char * sha256_server_public_key;
unsigned int refcount; #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;
zend_bool persistent;
MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec) m; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_envelope_codec) m;
}; };
@ -1131,17 +1132,7 @@ struct st_mysqlnd_protocol_frame_codec
{ {
struct st_mysqlnd_protocol_frame_codec_data * data; struct st_mysqlnd_protocol_frame_codec_data * data;
#ifdef MYSQLND_COMPRESSION_ENABLED zend_bool persistent;
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;
}; };
@ -1366,7 +1357,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, 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 size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len,
const MYSQLND_SESSION_OPTIONS * const session_options, const MYSQLND_SESSION_OPTIONS * const session_options,
const MYSQLND_PFC_OPTIONS * const pfc_options, zend_ulong mysql_flags const MYSQLND_PFC_DATA * const pfc_data, zend_ulong mysql_flags
); );
struct st_mysqlnd_authentication_plugin struct st_mysqlnd_authentication_plugin

View File

@ -265,21 +265,21 @@ mysqlnd_read_header(MYSQLND_PFC * pfc, MYSQLND_VIO * vio, MYSQLND_PACKET_HEADER
STAT_PROTOCOL_OVERHEAD_IN, MYSQLND_HEADER_SIZE, STAT_PROTOCOL_OVERHEAD_IN, MYSQLND_HEADER_SIZE,
STAT_PACKETS_RECEIVED, 1); STAT_PACKETS_RECEIVED, 1);
if (pfc->data->compressed || pfc->packet_no == header->packet_no) { if (pfc->data->compressed || pfc->data->packet_no == header->packet_no) {
/* /*
Have to increase the number, so we can send correct number back. It will Have to increase the number, so we can send correct number back. It will
round at 255 as this is unsigned char. The server needs this for simple round at 255 as this is unsigned char. The server needs this for simple
flow control checking. flow control checking.
*/ */
pfc->packet_no++; pfc->data->packet_no++;
DBG_RETURN(PASS); DBG_RETURN(PASS);
} }
DBG_ERR_FMT("Logical link: packets out of order. Expected %u received %u. Packet size="MYSQLND_SZ_T_SPEC, DBG_ERR_FMT("Logical link: packets out of order. Expected %u received %u. Packet size="MYSQLND_SZ_T_SPEC,
pfc->packet_no, header->packet_no, header->size); pfc->data->packet_no, header->packet_no, header->size);
php_error(E_WARNING, "Packets out of order. Expected %u received %u. Packet size="MYSQLND_SZ_T_SPEC, php_error(E_WARNING, "Packets out of order. Expected %u received %u. Packet size="MYSQLND_SZ_T_SPEC,
pfc->packet_no, header->packet_no, header->size); pfc->data->packet_no, header->packet_no, header->size);
DBG_RETURN(FAIL); DBG_RETURN(FAIL);
} }
/* }}} */ /* }}} */