MXS-553: Update and document the protocol API

Removed unused and properly documented all entry points in the protocol
module API. As the removal of the `session` entry point is an backwards
incompatible change, the protocol API version was updated.
This commit is contained in:
Markus Mäkelä
2018-05-18 13:01:54 +03:00
parent 66255361dc
commit cdb43335a2
8 changed files with 142 additions and 48 deletions

View File

@ -105,9 +105,9 @@ MXS_MODULE* MXS_CREATE_MODULE()
test_close, /**< Close */ test_close, /**< Close */
test_listen, /**< Create a listener */ test_listen, /**< Create a listener */
test_auth, /**< Authentication */ test_auth, /**< Authentication */
test_session, /**< Session */
test_default_auth, /**< Default authenticator */ test_default_auth, /**< Default authenticator */
test_connection_limit /**< Connection limit */ test_connection_limit, /**< Connection limit */
NULL
}; };
static MXS_MODULE info = static MXS_MODULE info =

View File

@ -28,47 +28,147 @@ struct server;
struct session; struct session;
/** /**
* @verbatim * Protocol module API
* The operations that can be performed on the descriptor
*
* read EPOLLIN handler for the socket
* write MaxScale data write entry point
* write_ready EPOLLOUT handler for the socket, indicates
* that the socket is ready to send more data
* error EPOLLERR handler for the socket
* hangup EPOLLHUP handler for the socket
* accept Accept handler for listener socket only
* connect Create a connection to the specified server
* for the session pased in
* close MaxScale close entry point for the socket
* listen Create a listener for the protocol
* auth Authentication entry point
* session Session handling entry point
* auth_default Default authenticator name
* connlimit Maximum connection limit
* established Whether connection is fully established
* @endverbatim
*
* This forms the "module object" for protocol modules within the gateway.
*
* @see load_module
*/ */
typedef struct mxs_protocol typedef struct mxs_protocol
{ {
int32_t (*read)(struct dcb *); /**
int32_t (*write)(struct dcb *, GWBUF *); * EPOLLIN handler, used to read available data from network socket
int32_t (*write_ready)(struct dcb *); *
int32_t (*error)(struct dcb *); * @param dcb DCB to read from
int32_t (*hangup)(struct dcb *); *
int32_t (*accept)(struct dcb *); * @return 1 on success, 0 on error
int32_t (*connect)(struct dcb *, struct server *, struct session *); */
int32_t (*close)(struct dcb *); int32_t (*read)(struct dcb* dcb);
int32_t (*listen)(struct dcb *, char *);
int32_t (*auth)(struct dcb *, struct server *, struct session *, GWBUF *); /**
int32_t (*session)(struct dcb *, void *); // TODO: remove this, not used * Write data to a network socket
char *(*auth_default)(); *
int32_t (*connlimit)(struct dcb *, int limit); * @param dcb DCB to write to
bool (*established)(struct dcb *); * @param buffer Buffer to write
*
* @return 1 on success, 0 on error
*/
int32_t (*write)(struct dcb* dcb, GWBUF* buffer);
/**
* EPOLLOUT handler, used to write buffered data
*
* @param dcb DCB to write to
*
* @return 1 on success, 0 on error
*
* @note Currently the return value is ignored
*/
int32_t (*write_ready)(struct dcb* dcb);
/**
* EPOLLERR handler
*
* @param dcb DCB for which the error occurred
*
* @return 1 on success, 0 on error
*
* @note Currently the return value is ignored
*/
int32_t (*error)(struct dcb* dcb);
/**
* EPOLLHUP and EPOLLRDHUP handler
*
* @param dcb DCB for which the hangup occurred
*
* @return 1 on success, 0 on error
*
* @note Currently the return value is ignored
*/
int32_t (*hangup)(struct dcb* dcb);
/**
* Accept a connection, only for client side protocol modules
*
* @param dcb The listener DCB
*
* @return 1 on success, 0 on error
*
* @note Currently the return value is ignored
*/
int32_t (*accept)(struct dcb* dcb);
/**
* Connect to a server, only for backend side protocol modules
*
* @param dcb DCB to connect
* @param server Server where the connection is made
* @param session The session where the DCB should be linked to
*
* @return The opened file descriptor or DCBFD_CLOSED on error
*/
int32_t (*connect)(struct dcb* dcb, struct server* server, struct session* session);
/**
* Free protocol data allocated in the connect handler
*
* @param dcb DCB to close
*
* @return 1 on success, 0 on error
*
* @note Currently the return value is ignored
*/
int32_t (*close)(struct dcb* dcb);
/**
* Listen on a network socket, only for client side protocol modules
*
* @param dcb DCB to listen with
* @param address Address to listen on in `address|port` format
*
* @return 1 on success, 0 on error
*/
int32_t (*listen)(struct dcb* dcb, char* address);
/**
* Perform user re-authentication
*
* @param dcb DCB to re-authenticate
* @param server Server where the DCB is connected
* @param session The session for the DCB
* @param buffer The buffer containing the original re-authentication request
*
* @return 1 on success, 0 on error
*
* @note Currently the return value is ignored
*/
int32_t (*auth)(struct dcb* dcb, struct server* server, struct session* session, GWBUF* buffer);
/**
* Returns the name of the default authenticator module for this protocol
*
* @return The name of the default authenticator
*/
char* (*auth_default)();
/**
* Handle connection limits
*
* @param dcb DCB to handle
* @param limit Maximum number of connections
*
* @return 1 on success, 0 on error
*
* @note Currently the return value is ignored
*/
int32_t (*connlimit)(struct dcb* dcb, int limit);
/**
* Check if the connection has been fully established, used by connection pooling
*
* @param dcb DCB to check
*
* @return True if the connection is fully established and can be pooled
*/
bool (*established)(struct dcb* );
} MXS_PROTOCOL; } MXS_PROTOCOL;
/** /**
@ -76,7 +176,7 @@ typedef struct mxs_protocol
* the MXS_PROTOCOL structure is changed. See the rules defined in modinfo.h * the MXS_PROTOCOL structure is changed. See the rules defined in modinfo.h
* that define how these numbers should change. * that define how these numbers should change.
*/ */
#define MXS_PROTOCOL_VERSION {1, 1, 0} #define MXS_PROTOCOL_VERSION {2, 0, 0}
/** /**
* Specifies capabilities specific for protocol. * Specifies capabilities specific for protocol.

View File

@ -86,7 +86,6 @@ MXS_MODULE* MXS_CREATE_MODULE()
cdc_close, /* Close */ cdc_close, /* Close */
cdc_listen, /* Create a listener */ cdc_listen, /* Create a listener */
NULL, /* Authentication */ NULL, /* Authentication */
NULL, /* Session */
cdc_default_auth, /* default authentication */ cdc_default_auth, /* default authentication */
NULL, NULL,
NULL, NULL,

View File

@ -81,7 +81,6 @@ MXS_MODULE* MXS_CREATE_MODULE()
httpd_close, /**< Close */ httpd_close, /**< Close */
httpd_listen, /**< Create a listener */ httpd_listen, /**< Create a listener */
NULL, /**< Authentication */ NULL, /**< Authentication */
NULL, /**< Session */
httpd_default_auth, /**< Default authenticator */ httpd_default_auth, /**< Default authenticator */
NULL, /**< Connection limit reached */ NULL, /**< Connection limit reached */
NULL NULL

View File

@ -82,7 +82,6 @@ MXS_MODULE* MXS_CREATE_MODULE()
gw_backend_close, /* Close */ gw_backend_close, /* Close */
NULL, /* Listen */ NULL, /* Listen */
gw_change_user, /* Authentication */ gw_change_user, /* Authentication */
NULL, /* Session */
gw_backend_default_auth, /* Default authenticator */ gw_backend_default_auth, /* Default authenticator */
NULL, /* Connection limit reached */ NULL, /* Connection limit reached */
gw_connection_established gw_connection_established

View File

@ -105,7 +105,6 @@ extern "C"
gw_client_close, /* Close */ gw_client_close, /* Close */
gw_MySQLListener, /* Listen */ gw_MySQLListener, /* Listen */
NULL, /* Authentication */ NULL, /* Authentication */
NULL, /* Session */
gw_default_auth, /* Default authenticator */ gw_default_auth, /* Default authenticator */
gw_connection_limit, /* Send error connection limit */ gw_connection_limit, /* Send error connection limit */
NULL NULL

View File

@ -183,7 +183,6 @@ MXS_MODULE* MXS_CREATE_MODULE()
maxscaled_close, /**< Close */ maxscaled_close, /**< Close */
maxscaled_listen, /**< Create a listener */ maxscaled_listen, /**< Create a listener */
NULL, /**< Authentication */ NULL, /**< Authentication */
NULL, /**< Session */
mxsd_default_auth, /**< Default authenticator */ mxsd_default_auth, /**< Default authenticator */
NULL, /**< Connection limit reached */ NULL, /**< Connection limit reached */
NULL NULL

View File

@ -102,7 +102,6 @@ MXS_MODULE* MXS_CREATE_MODULE()
telnetd_close, /**< Close */ telnetd_close, /**< Close */
telnetd_listen, /**< Create a listener */ telnetd_listen, /**< Create a listener */
NULL, /**< Authentication */ NULL, /**< Authentication */
NULL, /**< Session */
telnetd_default_auth, /**< Default authenticator */ telnetd_default_auth, /**< Default authenticator */
NULL, /**< Connection limit reached */ NULL, /**< Connection limit reached */
NULL NULL