Formatted tee filter

Tee filter formatted according to the style guide.
This commit is contained in:
Markus Makela
2015-11-18 14:18:00 +02:00
parent e24504c427
commit a7c0952e66

View File

@ -45,6 +45,7 @@
*
* @endverbatim
*/
#include <stdio.h>
#include <fcntl.h>
#include <filter.h>
@ -83,7 +84,8 @@
static int debug_seq = 0;
#endif
static unsigned char required_packets[] = {
static unsigned char required_packets[] =
{
MYSQL_COM_QUIT,
MYSQL_COM_INITDB,
MYSQL_COM_FIELD_LIST,
@ -94,9 +96,11 @@ static unsigned char required_packets[] = {
MYSQL_COM_STMT_CLOSE,
MYSQL_COM_STMT_RESET,
MYSQL_COM_CONNECT,
0 };
0
};
MODULE_INFO info = {
MODULE_INFO info =
{
MODULE_API_FILTER,
MODULE_GA,
FILTER_VERSION,
@ -118,7 +122,8 @@ static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
static int clientReply(FILTER *instance, void *fsession, GWBUF *queue);
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
static FILTER_OBJECT MyObject = {
static FILTER_OBJECT MyObject =
{
createInstance,
newSession,
closeSession,
@ -134,7 +139,8 @@ static FILTER_OBJECT MyObject = {
* The instance structure for the TEE filter - this holds the configuration
* information for the filter.
*/
typedef struct {
typedef struct
{
SERVICE *service; /* The service to duplicate requests to */
char *source; /* The source of the client connection */
char *userName; /* The user name to filter on */
@ -152,10 +158,10 @@ typedef struct {
*
* It also holds the file descriptor to which queries are written.
*/
typedef struct {
typedef struct
{
DOWNSTREAM down; /* The downstream filter */
UPSTREAM up; /* The upstream filter */
FILTER_DEF* dummy_filterdef;
int active; /* filter is active? */
bool use_ok;
@ -221,8 +227,6 @@ orphan_free(void* data)
{
if (ptr->session->state == SESSION_STATE_TO_BE_FREED)
{
if (ptr == allOrphans)
{
tmp = ptr;
@ -232,14 +236,15 @@ orphan_free(void* data)
{
tmp = allOrphans;
while (tmp && tmp->next != ptr)
{
tmp = tmp->next;
}
if (tmp)
{
tmp->next = ptr->next;
tmp = ptr;
}
}
}
/*
@ -274,9 +279,11 @@ orphan_free(void* data)
#ifdef SS_DEBUG
if (o_stopping + o_ready > 0)
{
MXS_DEBUG("tee.c: %d orphans in "
"SESSION_STATE_STOPPING, %d orphans in "
"SESSION_STATE_ROUTER_READY. ", o_stopping, o_ready);
}
#endif
while (finished)
@ -387,9 +394,13 @@ int i;
my_instance->nomatch = strdup(params[i]->value);
}
else if (!strcmp(params[i]->name, "source"))
{
my_instance->source = strdup(params[i]->value);
}
else if (!strcmp(params[i]->name, "user"))
{
my_instance->userName = strdup(params[i]->value);
}
else if (!filter_standard_parameter(params[i]->name))
{
MXS_ERROR("tee: Unexpected parameter '%s'.",
@ -683,13 +694,16 @@ MXS_INFO("Tee free: %d", atomic_add(&debug_seq,1));
filter_free(my_session->dummy_filterdef);
}
if (my_session->tee_replybuf)
{
gwbuf_free(my_session->tee_replybuf);
}
free(session);
orphan_free(NULL);
return;
}
/**
* Set the downstream filter or router to which queries will be
* passed from this filter.
@ -789,7 +803,9 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue)
/* Reset session state */
if (!reset_session_state(my_session, buffer))
{
return 0;
}
/** Route query downstream */
spinlock_acquire(&my_session->tee_lock);
@ -821,7 +837,10 @@ int count_replies(GWBUF* buffer)
if (PTR_IS_EOF(ptr) || PTR_IS_ERR(ptr)) eof++;
ptr += pktlen;
}
if(eof == 2) replies++;
if (eof == 2)
{
replies++;
}
eof = 0;
}
}
@ -833,14 +852,22 @@ int lenenc_length(uint8_t* ptr)
{
char val = *ptr;
if (val < 251)
{
return 1;
}
else if (val == 0xfc)
{
return 3;
}
else if (val == 0xfd)
{
return 4;
}
else
{
return 9;
}
}
uint16_t get_response_flags(uint8_t* datastart, bool ok_packet)
{
@ -1102,19 +1129,27 @@ TEE_INSTANCE *my_instance = (TEE_INSTANCE *)instance;
TEE_SESSION *my_session = (TEE_SESSION *) fsession;
if (my_instance->source)
{
dcb_printf(dcb, "\t\tLimit to connections from %s\n",
my_instance->source);
}
dcb_printf(dcb, "\t\tDuplicate statements to service %s\n",
my_instance->service->name);
if (my_instance->userName)
{
dcb_printf(dcb, "\t\tLimit to user %s\n",
my_instance->userName);
}
if (my_instance->match)
{
dcb_printf(dcb, "\t\tInclude queries that match %s\n",
my_instance->match);
}
if (my_instance->nomatch)
{
dcb_printf(dcb, "\t\tExclude queries that match %s\n",
my_instance->nomatch);
}
if (my_session)
{
dcb_printf(dcb, "\t\tNo. of statements duplicated: %d.\n",
@ -1140,9 +1175,15 @@ int i;
ptr = GWBUF_DATA(queue);
if (GWBUF_LENGTH(queue) > 4)
{
for (i = 0; required_packets[i]; i++)
{
if (ptr[4] == required_packets[i])
{
return 1;
}
}
}
return 0;
}
@ -1319,7 +1360,9 @@ int route_single_query(TEE_INSTANCE* my_instance, TEE_SESSION* my_session, GWBUF
int reset_session_state(TEE_SESSION* my_session, GWBUF* buffer)
{
if (gwbuf_length(buffer) < 5)
{
return 0;
}
unsigned char command = *((unsigned char*) buffer->start + 4);
@ -1358,7 +1401,9 @@ void create_orphan(SESSION* ses)
MXS_ERROR("Failed to "
"allocate memory for orphan session struct, "
"child session might leak memory.");
}else{
}
else
{
orphan->session = ses;
spinlock_acquire(&orphanLock);
orphan->next = allOrphans;