From 1d48794963b970ce0569a8b965ed7ac0086ca105 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Mon, 2 Jun 2014 18:18:31 +0100 Subject: [PATCH] Addition of API modinfo implementation for filters --- server/core/load_utils.c | 10 ++++++++++ server/include/filter.h | 7 +++++++ server/modules/filter/qlafilter.c | 8 ++++++++ server/modules/filter/testfilter.c | 8 ++++++++ 4 files changed, 33 insertions(+) diff --git a/server/core/load_utils.c b/server/core/load_utils.c index 93406ae16..3ace0f91f 100644 --- a/server/core/load_utils.c +++ b/server/core/load_utils.c @@ -179,6 +179,16 @@ MODULE_INFO *mod_info = NULL; module))); fatal = 1; } + if (strcmp(type, MODULE_FILTER) == 0 + && mod_info->modapi != MODULE_API_FILTER) + { + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Module '%s' does not implement " + "the filter API.\n", + module))); + fatal = 1; + } if (fatal) { dlclose(dlhandle); diff --git a/server/include/filter.h b/server/include/filter.h index 3b4ec27b8..e29ecf363 100644 --- a/server/include/filter.h +++ b/server/include/filter.h @@ -69,6 +69,13 @@ typedef struct filter_object { void (*diagnostics)(FILTER *instance, void *fsession, DCB *dcb); } FILTER_OBJECT; +/** + * The filter API version. If the FILTER_OBJECT structure or the filter API + * is changed these values must be updated in line with the rules in the + * file modinfo.h. + */ +#define FILTER_VERSION {1, 0, 0} + /** * The definition of a filter form the configuration file. * This is basically the link between a plugin to load and the diff --git a/server/modules/filter/qlafilter.c b/server/modules/filter/qlafilter.c index b1155ce2a..7af66fe8c 100644 --- a/server/modules/filter/qlafilter.c +++ b/server/modules/filter/qlafilter.c @@ -31,8 +31,16 @@ #include #include #include +#include #include +MODULE_INFO info = { + MODULE_API_FILTER, + MODULE_ALPHA_RELEASE, + FILTER_VERSION, + "A simple query logging filter" +}; + static char *version_str = "V1.0.0"; /* diff --git a/server/modules/filter/testfilter.c b/server/modules/filter/testfilter.c index c32dcbd27..8553ab42b 100644 --- a/server/modules/filter/testfilter.c +++ b/server/modules/filter/testfilter.c @@ -17,6 +17,7 @@ */ #include #include +#include /** * testfilter.c - a very simple test filter. @@ -28,6 +29,13 @@ * Reporting is done via the diagnostics print routine. */ +MODULE_INFO info = { + MODULE_API_FILTER, + MODULE_ALPHA_RELEASE, + FILTER_VERSION, + "A simple query counting filter" +}; + static char *version_str = "V1.0.0"; static FILTER *createInstance(char **options);