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

Reply via email to