Skip to content

Commit f3d4aa3

Browse files
author
andrey
committed
Add a middleman which can intercept the calls and can reroute them
git-svn-id: http://svn.php.net/repository/php/php-src/trunk@318699 c90b9560-bf6c-de11-be94-00142212c4b1
1 parent 9c0365d commit f3d4aa3

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

ext/mysqlnd/mysqlnd.c

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,32 @@ MYSQLND_METHOD(mysqlnd_conn_data, connect)(MYSQLND_CONN_DATA * conn,
951951
/* }}} */
952952

953953

954+
/* {{{ mysqlnd_conn::connect */
955+
static enum_func_status
956+
MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND * conn_handle,
957+
const char * host, const char * user,
958+
const char * passwd, unsigned int passwd_len,
959+
const char * db, unsigned int db_len,
960+
unsigned int port,
961+
const char * socket_or_pipe,
962+
unsigned int mysql_flags
963+
TSRMLS_DC)
964+
{
965+
size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_data_methods, connect);
966+
enum_func_status ret = FAIL;
967+
MYSQLND_CONN_DATA * conn = conn_handle->data;
968+
969+
DBG_ENTER("mysqlnd_conn::connect");
970+
971+
if (PASS == conn->m->local_tx_start(conn, this_func TSRMLS_CC)) {
972+
ret = conn->m->connect(conn, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC);
973+
974+
conn->m->local_tx_end(conn, this_func, FAIL TSRMLS_CC);
975+
}
976+
DBG_RETURN(ret);
977+
}
978+
979+
954980
/* {{{ mysqlnd_connect */
955981
PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn_handle,
956982
const char * host, const char * user,
@@ -963,7 +989,6 @@ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn_handle,
963989
{
964990
enum_func_status ret = FAIL;
965991
zend_bool self_alloced = FALSE;
966-
MYSQLND_CONN_DATA * conn;
967992

968993
DBG_ENTER("mysqlnd_connect");
969994
DBG_INF_FMT("host=%s user=%s db=%s port=%u flags=%u", host?host:"", user?user:"", db?db:"", port, mysql_flags);
@@ -975,9 +1000,8 @@ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn_handle,
9751000
DBG_RETURN(NULL);
9761001
}
9771002
}
978-
conn = conn_handle->data;
9791003

980-
ret = conn->m->connect(conn, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC);
1004+
ret = conn_handle->m->connect(conn_handle, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC);
9811005

9821006
if (ret == FAIL) {
9831007
if (self_alloced) {
@@ -2689,6 +2713,7 @@ MYSQLND_METHOD(mysqlnd_conn, close)(MYSQLND * conn_handle, enum_connection_close
26892713

26902714

26912715
MYSQLND_CLASS_METHODS_START(mysqlnd_conn)
2716+
MYSQLND_METHOD(mysqlnd_conn, connect),
26922717
MYSQLND_METHOD(mysqlnd_conn, clone_object),
26932718
MYSQLND_METHOD_PRIVATE(mysqlnd_conn, dtor),
26942719
MYSQLND_METHOD(mysqlnd_conn, close)

ext/mysqlnd/mysqlnd_structs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,12 +550,14 @@ struct st_mysqlnd_conn_data_methods
550550
};
551551

552552

553+
typedef enum_func_status (*func_mysqlnd_data__connect)(MYSQLND * conn, const char * host, const char * user, const char * passwd, unsigned int passwd_len, const char * db, unsigned int db_len, unsigned int port, const char * socket_or_pipe, unsigned int mysql_flags TSRMLS_DC);
553554
typedef MYSQLND * (*func_mysqlnd_conn__clone_object)(MYSQLND * const conn TSRMLS_DC);
554555
typedef void (*func_mysqlnd_conn__dtor)(MYSQLND * conn TSRMLS_DC);
555556
typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND * conn, enum_connection_close_type close_type TSRMLS_DC);
556557

557558
struct st_mysqlnd_conn_methods
558559
{
560+
func_mysqlnd_data__connect connect;
559561
func_mysqlnd_conn__clone_object clone_object;
560562
func_mysqlnd_conn__dtor dtor;
561563
func_mysqlnd_conn__close close;

0 commit comments

Comments
 (0)