be extracted from the modules. This gives a way to verify the API that the module provides as well as the version of that API. The hope is that this will make it possible for MaxScale to detect out of date plugins and either adapt to use them or reject loading them. Also added the ability to set a release state on a per module basis. This allows for production ready and non-production ready plugins to be identified.
		
			
				
	
	
		
			95 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _ROUTER_H
 | 
						|
#define _ROUTER_H
 | 
						|
/*
 | 
						|
 * This file is distributed as part of the SkySQL Gateway.  It is free
 | 
						|
 * software: you can redistribute it and/or modify it under the terms of the
 | 
						|
 * GNU General Public License as published by the Free Software Foundation,
 | 
						|
 * version 2.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful, but WITHOUT
 | 
						|
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
						|
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 | 
						|
 * details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU General Public License along with
 | 
						|
 * this program; if not, write to the Free Software Foundation, Inc., 51
 | 
						|
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
						|
 *
 | 
						|
 * Copyright SkySQL Ab 2013
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * @file router.h -  The query router interface mechanisms
 | 
						|
 *
 | 
						|
 * Revision History
 | 
						|
 *
 | 
						|
 * Date		Who			Description
 | 
						|
 * 14/06/2013	Mark Riddoch		Initial implementation
 | 
						|
 * 26/06/2013	Mark Riddoch		Addition of router options
 | 
						|
 * 					and the diagnostic entry point
 | 
						|
 * 15/07/2013	Massimiliano Pinto	Added clientReply entry point
 | 
						|
 * 16/07/2013	Massimiliano Pinto	Added router commands values
 | 
						|
 * 22/10/2013	Massimiliano Pinto	Added router errorReply entry point
 | 
						|
 *
 | 
						|
 */
 | 
						|
#include <service.h>
 | 
						|
#include <session.h>
 | 
						|
#include <buffer.h>
 | 
						|
#include <stdint.h>
 | 
						|
 | 
						|
/**
 | 
						|
 * The ROUTER handle points to module specific data, so the best we can do
 | 
						|
 * is to make it a void * externally.
 | 
						|
 */
 | 
						|
typedef void *ROUTER;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * @verbatim
 | 
						|
 * The "module object" structure for a query router module
 | 
						|
 *
 | 
						|
 * The entry points are:
 | 
						|
 * 	createInstance		Called by the service to create a new
 | 
						|
 * 				instance of the query router
 | 
						|
 * 	newSession		Called to create a new user session
 | 
						|
 * 				within the query router
 | 
						|
 * 	closeSession		Called when a session is closed
 | 
						|
 * 	routeQuery		Called on each query that requires
 | 
						|
 * 				routing
 | 
						|
 * 	diagnostics		Called to force the router to print
 | 
						|
 * 				diagnostic output
 | 
						|
 *	clientReply		Called to reply to client the data from one or all backends
 | 
						|
 *	errorReply		Called to reply to client errors with optional closeSession or
 | 
						|
 *				make a request for a new backend connection
 | 
						|
 *
 | 
						|
 * @endverbatim
 | 
						|
 *
 | 
						|
 * @see load_module
 | 
						|
 */
 | 
						|
typedef struct router_object {
 | 
						|
	ROUTER	*(*createInstance)(SERVICE *service, char **options);
 | 
						|
	void	*(*newSession)(ROUTER *instance, SESSION *session);
 | 
						|
	void 	(*closeSession)(ROUTER *instance, void *router_session);
 | 
						|
        void 	(*freeSession)(ROUTER *instance, void *router_session);
 | 
						|
	int	(*routeQuery)(ROUTER *instance, void *router_session, GWBUF *queue);
 | 
						|
	void	(*diagnostics)(ROUTER *instance, DCB *dcb);
 | 
						|
	void    (*clientReply)(ROUTER* instance, void* router_session, GWBUF* queue, DCB *backend_dcb);
 | 
						|
	void    (*errorReply)(ROUTER* instance, void* router_session, char* message, DCB *backend_dcb, int action);
 | 
						|
        uint8_t (*getCapabilities)(ROUTER *instance, void* router_session);
 | 
						|
} ROUTER_OBJECT;
 | 
						|
 | 
						|
/**
 | 
						|
 * The router module API version. Any change that changes the router API
 | 
						|
 * must update these versions numbers in accordance with the rules in
 | 
						|
 * modinfo.h.
 | 
						|
 */
 | 
						|
#define	ROUTER_VERSION	{ 1, 0, 0 }
 | 
						|
 | 
						|
typedef enum router_capability_t {
 | 
						|
        RCAP_TYPE_UNDEFINED    = 0,
 | 
						|
        RCAP_TYPE_STMT_INPUT   = (1 << 0),
 | 
						|
        RCAP_TYPE_PACKET_INPUT = (1 << 1)
 | 
						|
} router_capability_t;
 | 
						|
 | 
						|
#endif
 |