mirror of
https://github.com/php/php-src.git
synced 2024-09-22 10:27:25 +00:00
MNDR:
- move all data members from MYSQLND_PFC to MYSQLND_PFC_DATA
This commit is contained in:
parent
c286d7075d
commit
2cea04165c
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
Loading…
Reference in New Issue
Block a user