]> granicus.if.org Git - php/commitdiff
MNDR:
authorAndrey Hristov <andrey@php.net>
Mon, 12 Oct 2015 18:11:10 +0000 (20:11 +0200)
committerAndrey Hristov <andrey@php.net>
Thu, 12 Nov 2015 15:19:16 +0000 (16:19 +0100)
- remove export of functions and have things exported thru an interface
  with default implementation

ext/mysqlnd/mysqlnd_ext_plugin.c
ext/mysqlnd/mysqlnd_ext_plugin.h

index 1ba0b85f4831163bf7a6710dd645a314606d6cdc..a4d4c0947491063f7070221f45e5169d0197e163 100644 (file)
 #include "mysqlnd_priv.h"
 #include "mysqlnd_result.h"
 #include "mysqlnd_debug.h"
+#include "mysqlnd_ext_plugin.h"
 
 static struct st_mysqlnd_conn_methods * mysqlnd_conn_methods;
 static struct st_mysqlnd_conn_data_methods * mysqlnd_conn_data_methods;
 static struct st_mysqlnd_stmt_methods * mysqlnd_stmt_methods;
 
-/* {{{ _mysqlnd_plugin_get_plugin_connection_data */
-PHPAPI void **
-_mysqlnd_plugin_get_plugin_connection_data(const MYSQLND * conn, unsigned int plugin_id)
+/* {{{ mysqlnd_plugin__get_plugin_connection_data */
+static void **
+mysqlnd_plugin__get_plugin_connection_data(const MYSQLND * conn, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_connection_data");
+       DBG_ENTER("mysqlnd_plugin__get_plugin_connection_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!conn || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -43,11 +44,11 @@ _mysqlnd_plugin_get_plugin_connection_data(const MYSQLND * conn, unsigned int pl
 /* }}} */
 
 
-/* {{{ _mysqlnd_plugin_get_plugin_connection_data_data */
-PHPAPI void **
-_mysqlnd_plugin_get_plugin_connection_data_data(const MYSQLND_CONN_DATA * conn, unsigned int plugin_id)
+/* {{{ mysqlnd_plugin__get_plugin_connection_data_data */
+static void **
+mysqlnd_plugin__get_plugin_connection_data_data(const MYSQLND_CONN_DATA * conn, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_connection_data_data");
+       DBG_ENTER("mysqlnd_plugin__get_plugin_connection_data_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!conn || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -57,10 +58,11 @@ _mysqlnd_plugin_get_plugin_connection_data_data(const MYSQLND_CONN_DATA * conn,
 /* }}} */
 
 
-/* {{{ _mysqlnd_plugin_get_plugin_result_data */
-PHPAPI void ** _mysqlnd_plugin_get_plugin_result_data(const MYSQLND_RES * result, unsigned int plugin_id)
+/* {{{ mysqlnd_plugin__get_plugin_result_data */
+static void **
+mysqlnd_plugin__get_plugin_result_data(const MYSQLND_RES * result, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_result_data");
+       DBG_ENTER("mysqlnd_plugin__get_plugin_result_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!result || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -70,10 +72,11 @@ PHPAPI void ** _mysqlnd_plugin_get_plugin_result_data(const MYSQLND_RES * result
 /* }}} */
 
 
-/* {{{ _mysqlnd_plugin_get_plugin_result_unbuffered_data */
-PHPAPI void ** _mysqlnd_plugin_get_plugin_result_unbuffered_data(const MYSQLND_RES_UNBUFFERED * result, unsigned int plugin_id)
+/* {{{ _mysqlnd_plugin__get_plugin_result_unbuffered_data */
+static void **
+mysqlnd_plugin__get_plugin_result_unbuffered_data(const MYSQLND_RES_UNBUFFERED * result, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_result_data");
+       DBG_ENTER("mysqlnd_plugin__get_plugin_result_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!result || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -83,10 +86,11 @@ PHPAPI void ** _mysqlnd_plugin_get_plugin_result_unbuffered_data(const MYSQLND_R
 /* }}} */
 
 
-/* {{{ _mysqlnd_plugin_get_plugin_result_buffered_data */
-PHPAPI void ** _mysqlnd_plugin_get_plugin_result_buffered_data_zval(const MYSQLND_RES_BUFFERED_ZVAL * result, unsigned int plugin_id)
+/* {{{ _mysqlnd_plugin__get_plugin_result_buffered_data */
+static void **
+mysqlnd_plugin__get_plugin_result_buffered_data_zval(const MYSQLND_RES_BUFFERED_ZVAL * result, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_result_data");
+       DBG_ENTER("_mysqlnd_plugin__get_plugin_result_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!result || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -95,10 +99,11 @@ PHPAPI void ** _mysqlnd_plugin_get_plugin_result_buffered_data_zval(const MYSQLN
 }
 /* }}} */
 
-/* {{{ _mysqlnd_plugin_get_plugin_result_buffered_data */
-PHPAPI void ** _mysqlnd_plugin_get_plugin_result_buffered_data_c(const MYSQLND_RES_BUFFERED_C * result, unsigned int plugin_id)
+/* {{{ mysqlnd_plugin__get_plugin_result_buffered_data */
+static void **
+mysqlnd_plugin__get_plugin_result_buffered_data_c(const MYSQLND_RES_BUFFERED_C * result, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_result_data");
+       DBG_ENTER("mysqlnd_plugin__get_plugin_result_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!result || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -108,11 +113,11 @@ PHPAPI void ** _mysqlnd_plugin_get_plugin_result_buffered_data_c(const MYSQLND_R
 /* }}} */
 
 
-/* {{{ _mysqlnd_plugin_get_plugin_protocol_data */
-PHPAPI void **
-_mysqlnd_plugin_get_plugin_protocol_data(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * factory, unsigned int plugin_id)
+/* {{{ mysqlnd_plugin__get_plugin_protocol_data */
+static void **
+mysqlnd_plugin__get_plugin_protocol_data(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * factory, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_protocol_data");
+       DBG_ENTER("mysqlnd_plugin__get_plugin_protocol_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!factory || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -122,10 +127,11 @@ _mysqlnd_plugin_get_plugin_protocol_data(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_
 /* }}} */
 
 
-/* {{{ _mysqlnd_plugin_get_plugin_stmt_data */
-PHPAPI void ** _mysqlnd_plugin_get_plugin_stmt_data(const MYSQLND_STMT * stmt, unsigned int plugin_id)
+/* {{{ mysqlnd_plugin__get_plugin_stmt_data */
+static void **
+mysqlnd_plugin__get_plugin_stmt_data(const MYSQLND_STMT * stmt, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_stmt_data");
+       DBG_ENTER("mysqlnd_plugin__get_plugin_stmt_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!stmt || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -135,10 +141,11 @@ PHPAPI void ** _mysqlnd_plugin_get_plugin_stmt_data(const MYSQLND_STMT * stmt, u
 /* }}} */
 
 
-/* {{{ _mysqlnd_plugin_get_plugin_net_data */
-PHPAPI void ** _mysqlnd_plugin_get_plugin_net_data(const MYSQLND_NET * net, unsigned int plugin_id)
+/* {{{ mysqlnd_plugin__get_plugin_net_data */
+static void **
+mysqlnd_plugin__get_plugin_net_data(const MYSQLND_NET * net, unsigned int plugin_id)
 {
-       DBG_ENTER("_mysqlnd_plugin_get_plugin_net_data");
+       DBG_ENTER("_mysqlnd_plugin__get_plugin_net_data");
        DBG_INF_FMT("plugin_id=%u", plugin_id);
        if (!net || plugin_id >= mysqlnd_plugin_count()) {
                return NULL;
@@ -147,163 +154,220 @@ PHPAPI void ** _mysqlnd_plugin_get_plugin_net_data(const MYSQLND_NET * net, unsi
 }
 /* }}} */
 
-
-/* {{{ mysqlnd_conn_get_methods */
-PHPAPI struct st_mysqlnd_object_factory_methods *
-mysqlnd_object_factory_get_methods()
+struct st_mysqlnd_plugin__plugin_area_getters mysqlnd_plugin_area_getters =
+{
+       mysqlnd_plugin__get_plugin_connection_data,
+       mysqlnd_plugin__get_plugin_connection_data_data,
+       mysqlnd_plugin__get_plugin_result_data,
+       mysqlnd_plugin__get_plugin_result_unbuffered_data,
+       mysqlnd_plugin__get_plugin_result_buffered_data_zval,
+       mysqlnd_plugin__get_plugin_result_buffered_data_c,
+       mysqlnd_plugin__get_plugin_stmt_data,
+       mysqlnd_plugin__get_plugin_protocol_data,
+       mysqlnd_plugin__get_plugin_net_data,
+};
+
+
+
+/* {{{ _mysqlnd_object_factory_get_methods */
+static struct st_mysqlnd_object_factory_methods *
+_mysqlnd_object_factory_get_methods()
 {
        return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_object_factory);
 }
 /* }}} */
 
 /* {{{ mysqlnd_conn_set_methods */
-PHPAPI void mysqlnd_object_factory_set_methods(struct st_mysqlnd_object_factory_methods *methods)
+static void
+_mysqlnd_object_factory_set_methods(struct st_mysqlnd_object_factory_methods *methods)
 {
        MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_object_factory) = *methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_conn_get_methods */
-PHPAPI struct st_mysqlnd_conn_methods *
-mysqlnd_conn_get_methods()
+/* {{{ _mysqlnd_conn_get_methods */
+static struct st_mysqlnd_conn_methods *
+_mysqlnd_conn_get_methods()
 {
        return mysqlnd_conn_methods;
 }
 /* }}} */
 
-/* {{{ mysqlnd_conn_set_methods */
-PHPAPI void mysqlnd_conn_set_methods(struct st_mysqlnd_conn_methods *methods)
+/* {{{ _mysqlnd_conn_set_methods */
+static void
+_mysqlnd_conn_set_methods(struct st_mysqlnd_conn_methods *methods)
 {
        mysqlnd_conn_methods = methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_conn_get_methods */
-PHPAPI struct st_mysqlnd_conn_data_methods *
-mysqlnd_conn_data_get_methods()
+/* {{{ _mysqlnd_conn_data_get_methods */
+static struct st_mysqlnd_conn_data_methods *
+_mysqlnd_conn_data_get_methods()
 {
        return mysqlnd_conn_data_methods;
 }
 /* }}} */
 
-/* {{{ mysqlnd_conn_set_methods */
-PHPAPI void mysqlnd_conn_data_set_methods(struct st_mysqlnd_conn_data_methods * methods)
+/* {{{ _mysqlnd_conn_data_set_methods */
+static void
+_mysqlnd_conn_data_set_methods(struct st_mysqlnd_conn_data_methods * methods)
 {
        mysqlnd_conn_data_methods = methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_result_get_methods */
-PHPAPI struct st_mysqlnd_res_methods *
-mysqlnd_result_get_methods()
+/* {{{ _mysqlnd_result_get_methods */
+static struct st_mysqlnd_res_methods *
+_mysqlnd_result_get_methods()
 {
        return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_res);
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_result_set_methods */
-PHPAPI void
-mysqlnd_result_set_methods(struct st_mysqlnd_res_methods * methods)
+/* {{{ _mysqlnd_result_set_methods */
+static void
+_mysqlnd_result_set_methods(struct st_mysqlnd_res_methods * methods)
 {
        MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_res) = *methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_result_unbuffered_get_methods */
-PHPAPI struct st_mysqlnd_result_unbuffered_methods *
-mysqlnd_result_unbuffered_get_methods()
+/* {{{ _mysqlnd_result_unbuffered_get_methods */
+static struct st_mysqlnd_result_unbuffered_methods *
+_mysqlnd_result_unbuffered_get_methods()
 {
        return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_result_unbuffered);
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_result_unbuffered_set_methods */
-PHPAPI void
-mysqlnd_result_unbuffered_set_methods(struct st_mysqlnd_result_unbuffered_methods * methods)
+/* {{{ _mysqlnd_result_unbuffered_set_methods */
+static void
+_mysqlnd_result_unbuffered_set_methods(struct st_mysqlnd_result_unbuffered_methods * methods)
 {
        MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_result_unbuffered) = *methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_result_buffered_get_methods */
-PHPAPI struct st_mysqlnd_result_buffered_methods *
-mysqlnd_result_buffered_get_methods()
+/* {{{ _mysqlnd_result_buffered_get_methods */
+static struct st_mysqlnd_result_buffered_methods *
+_mysqlnd_result_buffered_get_methods()
 {
        return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_result_buffered);
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_result_buffered_set_methods */
-PHPAPI void
-mysqlnd_result_buffered_set_methods(struct st_mysqlnd_result_buffered_methods * methods)
+/* {{{ _mysqlnd_result_buffered_set_methods */
+static void
+_mysqlnd_result_buffered_set_methods(struct st_mysqlnd_result_buffered_methods * methods)
 {
        MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_result_buffered) = *methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_stmt_get_methods */
-PHPAPI struct st_mysqlnd_stmt_methods *
-mysqlnd_stmt_get_methods()
+/* {{{ _mysqlnd_stmt_get_methods */
+static struct st_mysqlnd_stmt_methods *
+_mysqlnd_stmt_get_methods()
 {
        return mysqlnd_stmt_methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_stmt_set_methods */
-PHPAPI void
-mysqlnd_stmt_set_methods(struct st_mysqlnd_stmt_methods *methods)
+/* {{{ _mysqlnd_stmt_set_methods */
+static void
+_mysqlnd_stmt_set_methods(struct st_mysqlnd_stmt_methods *methods)
 {
        mysqlnd_stmt_methods = methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_protocol_payload_decoder_factory_get_methods */
-PHPAPI struct st_mysqlnd_protocol_payload_decoder_factory_methods *
-mysqlnd_protocol_payload_decoder_factory_get_methods()
+/* {{{ _mysqlnd_protocol_payload_decoder_factory_get_methods */
+static struct st_mysqlnd_protocol_payload_decoder_factory_methods *
+_mysqlnd_protocol_payload_decoder_factory_get_methods()
 {
        return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_protocol_payload_decoder_factory);
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_protocol_payload_decoder_factory_set_methods */
-PHPAPI void
-mysqlnd_protocol_payload_decoder_factory_set_methods(struct st_mysqlnd_protocol_payload_decoder_factory_methods * methods)
+/* {{{ _mysqlnd_protocol_payload_decoder_factory_set_methods */
+static void
+_mysqlnd_protocol_payload_decoder_factory_set_methods(struct st_mysqlnd_protocol_payload_decoder_factory_methods * methods)
 {
        MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_protocol_payload_decoder_factory) = *methods;
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_net_get_methods */
-PHPAPI struct st_mysqlnd_net_methods *
-mysqlnd_net_get_methods()
+/* {{{ _mysqlnd_net_get_methods */
+static struct st_mysqlnd_net_methods *
+_mysqlnd_net_get_methods()
 {
        return &MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_net);
 }
 /* }}} */
 
 
-/* {{{ mysqlnd_net_set_methods */
-PHPAPI void
-mysqlnd_net_set_methods(struct st_mysqlnd_net_methods * methods)
+/* {{{ _mysqlnd_net_set_methods */
+static void
+_mysqlnd_net_set_methods(struct st_mysqlnd_net_methods * methods)
 {
        MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_net) = *methods;
 }
 /* }}} */
 
 
+struct st_mysqlnd_plugin_methods_xetters mysqlnd_plugin_methods_xetters =
+{
+       {
+               _mysqlnd_object_factory_get_methods,
+               _mysqlnd_object_factory_set_methods
+       },
+       {
+               _mysqlnd_conn_get_methods,
+               _mysqlnd_conn_set_methods,
+       },
+       {
+               _mysqlnd_conn_data_get_methods,
+               _mysqlnd_conn_data_set_methods,
+       },
+       {
+               _mysqlnd_result_get_methods,
+               _mysqlnd_result_set_methods,
+       },
+       {
+               _mysqlnd_result_unbuffered_get_methods,
+               _mysqlnd_result_unbuffered_set_methods,
+       },
+       {
+               _mysqlnd_result_buffered_get_methods,
+               _mysqlnd_result_buffered_set_methods,
+       },
+       {
+               _mysqlnd_stmt_get_methods,
+               _mysqlnd_stmt_set_methods,
+       },
+       {
+               _mysqlnd_protocol_payload_decoder_factory_get_methods,
+               _mysqlnd_protocol_payload_decoder_factory_set_methods,
+       },
+       {
+               _mysqlnd_net_get_methods,
+               _mysqlnd_net_set_methods
+       },
+};
+
 /*
  * Local variables:
  * tab-width: 4
index b140daa5881a69d6af45a974be0aa453729c341d..96549d4e981113b85a2ac862d6ca918ba020aa4f 100644 (file)
 #ifndef MYSQLND_EXT_PLUGIN_H
 #define MYSQLND_EXT_PLUGIN_H
 
-PHPAPI void ** mysqlnd_plugin_get_plugin_connection_data(const MYSQLND * conn, unsigned int plugin_id);
-PHPAPI void ** mysqlnd_plugin_get_plugin_connection_data_data(const MYSQLND_CONN_DATA * conn, unsigned int plugin_id);
-PHPAPI void ** mysqlnd_plugin_get_plugin_result_data(const MYSQLND_RES * result, unsigned int plugin_id);
-PHPAPI void ** mysqlnd_plugin_get_plugin_result_unbuffered_data(const MYSQLND_RES_UNBUFFERED * result, unsigned int plugin_id);
-PHPAPI void ** mysqlnd_plugin_get_plugin_result_buffered_data_zval(const MYSQLND_RES_BUFFERED_ZVAL * result, unsigned int plugin_id);
-PHPAPI void ** mysqlnd_plugin_get_plugin_result_buffered_data_c(const MYSQLND_RES_BUFFERED_C * result, unsigned int plugin_id);
-PHPAPI void ** mysqlnd_plugin_get_plugin_stmt_data(const MYSQLND_STMT * stmt, unsigned int plugin_id);
-PHPAPI void ** mysqlnd_plugin_get_plugin_protocol_data(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * factory, unsigned int plugin_id);
-PHPAPI void ** mysqlnd_plugin_get_plugin_net_data(const MYSQLND_NET * net, unsigned int plugin_id);
+struct st_mysqlnd_plugin__plugin_area_getters
+{
+       void ** (*get_connection_area)(const MYSQLND * conn, unsigned int plugin_id);
+       void ** (*get_connection_data_area)(const MYSQLND_CONN_DATA * conn, unsigned int plugin_id);
+       void ** (*get_result_area)(const MYSQLND_RES * result, unsigned int plugin_id);
+       void ** (*get_unbuffered_area)(const MYSQLND_RES_UNBUFFERED * result, unsigned int plugin_id);
+       void ** (*get_result_buffered_area)(const MYSQLND_RES_BUFFERED_ZVAL * result, unsigned int plugin_id);
+       void ** (*get_result_buffered_aread_c)(const MYSQLND_RES_BUFFERED_C * result, unsigned int plugin_id);
+       void ** (*get_stmt_area)(const MYSQLND_STMT * stmt, unsigned int plugin_id);
+       void ** (*get_protocol_decoder_area)(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * factory, unsigned int plugin_id);
+       void ** (*get_net_area)(const MYSQLND_NET * net, unsigned int plugin_id);
+};
 
+extern struct st_mysqlnd_plugin__plugin_area_getters mysqlnd_plugin_area_getters;
 
+#define mysqlnd_plugin_get_plugin_connection_data(c, p_id)                             mysqlnd_plugin_area_getters.get_connection_area((c), (p_id))
+#define mysqlnd_plugin_get_plugin_connection_data_data(c, p_id)                        mysqlnd_plugin_area_getters.get_connection_data_area((c), (p_id))
+#define mysqlnd_plugin_get_plugin_result_data(res, p_id)                               mysqlnd_plugin_area_getters.get_result_area((res), (p_id))
+#define mysqlnd_plugin_get_plugin_result_unbuffered_data(res, p_id)            mysqlnd_plugin_area_getters.get_unbuffered_area((res), (p_id))
+#define mysqlnd_plugin_get_plugin_result_buffered_data_zval(res, p_id) mysqlnd_plugin_area_getters.get_result_buffered_area((res), (p_id))
+#define mysqlnd_plugin_get_plugin_result_buffered_data_c(res, p_id)            mysqlnd_plugin_area_getters.get_result_buffered_aread_c((res), (p_id))
+#define mysqlnd_plugin_get_plugin_stmt_data(stmt, p_id)                                        mysqlnd_plugin_area_getters.get_stmt_area((stmt), (p_id))
+#define mysqlnd_plugin_get_plugin_protocol_data(proto, p_id)                   mysqlnd_plugin_area_getters.get_protocol_decoder_area((proto), (p_id))
+#define mysqlnd_plugin_get_plugin_net_data(net, p_id)                                  mysqlnd_plugin_area_getters.get_net_area((net), (p_id))
+
+
+struct st_mysqlnd_plugin_methods_xetters
+{
+       struct st_mnd_object_factory_xetters
+       {
+               struct st_mysqlnd_object_factory_methods * (*get)();
+               void (*set)(struct st_mysqlnd_object_factory_methods * methods);
+       } object_factory;
+
+       struct st_mnd_connection_xetters
+       {
+               struct st_mysqlnd_conn_methods * (*get)();
+               void (*set)(struct st_mysqlnd_conn_methods * methods);
+       } connection;
+
+       struct st_mnd_connection_data_xetters
+       {
+               struct st_mysqlnd_conn_data_methods * (*get)();
+               void (*set)(struct st_mysqlnd_conn_data_methods * methods);
+       } connection_data;
+
+       struct st_mnd_result_etters
+       {
+               struct st_mysqlnd_res_methods * (*get)();
+               void (*set)(struct st_mysqlnd_res_methods * methods);
+       } result;
+
+       struct st_mnd_unbuffered_result_xetters
+       {
+               struct st_mysqlnd_result_unbuffered_methods * (*get)();
+               void (*set)(struct st_mysqlnd_result_unbuffered_methods * methods);
+       } unbuffered_result;
+
+       struct st_mnd_buffered_result_xetters
+       {
+               struct st_mysqlnd_result_buffered_methods * (*get)();
+               void (*set)(struct st_mysqlnd_result_buffered_methods * methods);
+       } buffered_result;
+
+       struct st_mnd_stmt_xetters
+       {
+               struct st_mysqlnd_stmt_methods * (*get)();
+               void (*set)(struct st_mysqlnd_stmt_methods * methods);
+       } statement;
+
+       struct st_mnd_protocol_xetters
+       {
+               struct st_mysqlnd_protocol_payload_decoder_factory_methods * (*get)();
+               void (*set)(struct st_mysqlnd_protocol_payload_decoder_factory_methods * methods);
+       } protocol;
+
+       struct st_mnd_io_xetters
+       {
+               struct st_mysqlnd_net_methods * (*get)();
+               void (*set)(struct st_mysqlnd_net_methods * methods);
+       } io;
+};
+
+extern struct st_mysqlnd_plugin_methods_xetters mysqlnd_plugin_methods_xetters;
+
+
+#define mysqlnd_object_factory_get_methods()   mysqlnd_plugin_methods_xetters.object_factory.get()
+#define mysqlnd_object_factory_set_methods(m)  mysqlnd_plugin_methods_xetters.object_factory.set((m))
+
+#define mysqlnd_conn_get_methods()                     mysqlnd_plugin_methods_xetters.connection.get()
+#define mysqlnd_conn_set_methods(m)                    mysqlnd_plugin_methods_xetters.connection.set((m))
+
+#define mysqlnd_conn_data_get_methods()                mysqlnd_plugin_methods_xetters.connection_data.get()
+#define mysqlnd_conn_data_set_methods(m)       mysqlnd_plugin_methods_xetters.connection_data.set((m))
+
+#define mysqlnd_result_get_methods()           mysqlnd_plugin_methods_xetters.result.get()
+#define mysqlnd_result_set_methods(m)          mysqlnd_plugin_methods_xetters.result.set((m))
+
+#define mysqlnd_result_unbuffered_get_methods()                mysqlnd_plugin_methods_xetters.unbuffered_result.get()
+#define mysqlnd_result_unbuffered_set_methods(m)       mysqlnd_plugin_methods_xetters.unbuffered_result.set((m))
+
+#define mysqlnd_result_buffered_get_methods()          mysqlnd_plugin_methods_xetters.buffered_result.get()
+#define mysqlnd_result_buffered_set_methods(m)         mysqlnd_plugin_methods_xetters.buffered_result.set((m))
+
+#define mysqlnd_stmt_get_methods()             mysqlnd_plugin_methods_xetters.statement.get()
+#define mysqlnd_stmt_set_methods(m)            mysqlnd_plugin_methods_xetters.statement.set((m))
+
+#define mysqlnd_protocol_get_methods() mysqlnd_plugin_methods_xetters.protocol.get()
+#define mysqlnd_protocol_set_methods(m)        mysqlnd_plugin_methods_xetters.protocol.set((m))
+
+#define mysqlnd_net_get_methods()              mysqlnd_plugin_methods_xetters.io.get()
+#define mysqlnd_net_set_methods(m)             mysqlnd_plugin_methods_xetters.io.set((m))
+
+
+/*
 PHPAPI struct st_mysqlnd_object_factory_methods * mysqlnd_object_factory_get_methods();
 PHPAPI void mysqlnd_object_factory_set_methods(struct st_mysqlnd_object_factory_methods * methods);
 
@@ -54,12 +158,12 @@ PHPAPI void mysqlnd_result_buffered_set_methods(struct st_mysqlnd_result_buffere
 PHPAPI struct st_mysqlnd_stmt_methods * mysqlnd_stmt_get_methods();
 PHPAPI void mysqlnd_stmt_set_methods(struct st_mysqlnd_stmt_methods * methods);
 
-PHPAPI struct st_mysqlnd_protocol_methods * mysqlnd_protocol_get_methods();
-PHPAPI void mysqlnd_protocol_set_methods(struct st_mysqlnd_protocol_methods * methods);
+PHPAPI struct st_mysqlnd_protocol_payload_decoder_factory_methods * mysqlnd_protocol_get_methods();
+PHPAPI void mysqlnd_protocol_set_methods(struct st_mysqlnd_protocol_payload_decoder_factory_methods * methods);
 
 PHPAPI struct st_mysqlnd_net_methods * mysqlnd_net_get_methods();
 PHPAPI void mysqlnd_net_set_methods(struct st_mysqlnd_net_methods * methods);
-
+*/
 
 #endif /* MYSQLND_EXT_PLUGIN_H */