andrey Wed, 02 Nov 2011 17:06:30 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=318699
Log: Add a middleman which can intercept the calls and can reroute them Changed paths: U php/php-src/branches/PHP_5_4/ext/mysqlnd/mysqlnd.c U php/php-src/branches/PHP_5_4/ext/mysqlnd/mysqlnd_structs.h U php/php-src/trunk/ext/mysqlnd/mysqlnd.c U php/php-src/trunk/ext/mysqlnd/mysqlnd_structs.h Modified: php/php-src/branches/PHP_5_4/ext/mysqlnd/mysqlnd.c =================================================================== --- php/php-src/branches/PHP_5_4/ext/mysqlnd/mysqlnd.c 2011-11-02 16:53:22 UTC (rev 318698) +++ php/php-src/branches/PHP_5_4/ext/mysqlnd/mysqlnd.c 2011-11-02 17:06:30 UTC (rev 318699) @@ -951,6 +951,32 @@ /* }}} */ +/* {{{ mysqlnd_conn::connect */ +static enum_func_status +MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND * conn_handle, + 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) +{ + size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_data_methods, connect); + enum_func_status ret = FAIL; + MYSQLND_CONN_DATA * conn = conn_handle->data; + + DBG_ENTER("mysqlnd_conn::connect"); + + if (PASS == conn->m->local_tx_start(conn, this_func TSRMLS_CC)) { + ret = conn->m->connect(conn, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC); + + conn->m->local_tx_end(conn, this_func, FAIL TSRMLS_CC); + } + DBG_RETURN(ret); +} + + /* {{{ mysqlnd_connect */ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn_handle, const char * host, const char * user, @@ -963,7 +989,6 @@ { enum_func_status ret = FAIL; zend_bool self_alloced = FALSE; - MYSQLND_CONN_DATA * conn; DBG_ENTER("mysqlnd_connect"); 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 @@ DBG_RETURN(NULL); } } - conn = conn_handle->data; - ret = conn->m->connect(conn, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC); + ret = conn_handle->m->connect(conn_handle, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC); if (ret == FAIL) { if (self_alloced) { @@ -2689,6 +2713,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_conn) + MYSQLND_METHOD(mysqlnd_conn, connect), MYSQLND_METHOD(mysqlnd_conn, clone_object), MYSQLND_METHOD_PRIVATE(mysqlnd_conn, dtor), MYSQLND_METHOD(mysqlnd_conn, close) Modified: php/php-src/branches/PHP_5_4/ext/mysqlnd/mysqlnd_structs.h =================================================================== --- php/php-src/branches/PHP_5_4/ext/mysqlnd/mysqlnd_structs.h 2011-11-02 16:53:22 UTC (rev 318698) +++ php/php-src/branches/PHP_5_4/ext/mysqlnd/mysqlnd_structs.h 2011-11-02 17:06:30 UTC (rev 318699) @@ -550,12 +550,14 @@ }; +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); typedef MYSQLND * (*func_mysqlnd_conn__clone_object)(MYSQLND * const conn TSRMLS_DC); typedef void (*func_mysqlnd_conn__dtor)(MYSQLND * conn TSRMLS_DC); typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND * conn, enum_connection_close_type close_type TSRMLS_DC); struct st_mysqlnd_conn_methods { + func_mysqlnd_data__connect connect; func_mysqlnd_conn__clone_object clone_object; func_mysqlnd_conn__dtor dtor; func_mysqlnd_conn__close close; Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd.c =================================================================== --- php/php-src/trunk/ext/mysqlnd/mysqlnd.c 2011-11-02 16:53:22 UTC (rev 318698) +++ php/php-src/trunk/ext/mysqlnd/mysqlnd.c 2011-11-02 17:06:30 UTC (rev 318699) @@ -951,6 +951,32 @@ /* }}} */ +/* {{{ mysqlnd_conn::connect */ +static enum_func_status +MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND * conn_handle, + 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) +{ + size_t this_func = STRUCT_OFFSET(struct st_mysqlnd_conn_data_methods, connect); + enum_func_status ret = FAIL; + MYSQLND_CONN_DATA * conn = conn_handle->data; + + DBG_ENTER("mysqlnd_conn::connect"); + + if (PASS == conn->m->local_tx_start(conn, this_func TSRMLS_CC)) { + ret = conn->m->connect(conn, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC); + + conn->m->local_tx_end(conn, this_func, FAIL TSRMLS_CC); + } + DBG_RETURN(ret); +} + + /* {{{ mysqlnd_connect */ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn_handle, const char * host, const char * user, @@ -963,7 +989,6 @@ { enum_func_status ret = FAIL; zend_bool self_alloced = FALSE; - MYSQLND_CONN_DATA * conn; DBG_ENTER("mysqlnd_connect"); 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 @@ DBG_RETURN(NULL); } } - conn = conn_handle->data; - ret = conn->m->connect(conn, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC); + ret = conn_handle->m->connect(conn_handle, host, user, passwd, passwd_len, db, db_len, port, socket_or_pipe, mysql_flags TSRMLS_CC); if (ret == FAIL) { if (self_alloced) { @@ -2689,6 +2713,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_conn) + MYSQLND_METHOD(mysqlnd_conn, connect), MYSQLND_METHOD(mysqlnd_conn, clone_object), MYSQLND_METHOD_PRIVATE(mysqlnd_conn, dtor), MYSQLND_METHOD(mysqlnd_conn, close) Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_structs.h =================================================================== --- php/php-src/trunk/ext/mysqlnd/mysqlnd_structs.h 2011-11-02 16:53:22 UTC (rev 318698) +++ php/php-src/trunk/ext/mysqlnd/mysqlnd_structs.h 2011-11-02 17:06:30 UTC (rev 318699) @@ -550,12 +550,14 @@ }; +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); typedef MYSQLND * (*func_mysqlnd_conn__clone_object)(MYSQLND * const conn TSRMLS_DC); typedef void (*func_mysqlnd_conn__dtor)(MYSQLND * conn TSRMLS_DC); typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND * conn, enum_connection_close_type close_type TSRMLS_DC); struct st_mysqlnd_conn_methods { + func_mysqlnd_data__connect connect; func_mysqlnd_conn__clone_object clone_object; func_mysqlnd_conn__dtor dtor; func_mysqlnd_conn__close close;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php