From c13a2eeb337931eec518cba73e0b8116d1d97c4a Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Fri, 13 Jan 2017 14:59:58 +0200 Subject: [PATCH] Hide definition of MXS_FILTER_DEF MXS_FILTER_DEF is now private the MaxScale core. --- include/maxscale/filter.h | 29 ++++++++++--------- server/core/filter.c | 16 ++++++---- server/core/maxscale/filter.h | 17 +++++++++++ server/core/modulecmd.c | 3 +- server/modules/filter/cache/cachefilter.cc | 6 ++-- server/modules/filter/dbfwfilter/dbfwfilter.c | 4 +-- .../modules/filter/masking/maskingfilter.cc | 4 +-- server/modules/filter/tee/tee.c | 7 +++-- 8 files changed, 54 insertions(+), 32 deletions(-) diff --git a/include/maxscale/filter.h b/include/maxscale/filter.h index 15194eaa2..431a68f3b 100644 --- a/include/maxscale/filter.h +++ b/include/maxscale/filter.h @@ -87,22 +87,13 @@ typedef struct mxs_filter_object * file modinfo.h. */ #define MXS_FILTER_VERSION {2, 2, 0} + /** - * The definition of a filter from the configuration file. - * This is basically the link between a plugin to load and the - * optons to pass to that plugin. + * MXS_FILTER_DEF represents a filter definition from the configuration file. + * Its exact definition is private to MaxScale. */ -typedef struct mxs_filter_def -{ - char *name; /**< The Filter name */ - char *module; /**< The module to load */ - char **options; /**< The options set for this filter */ - CONFIG_PARAMETER *parameters; /**< The filter parameters */ - MXS_FILTER* filter; /**< The runtime filter */ - MXS_FILTER_OBJECT *obj; /**< The "MODULE_OBJECT" for the filter */ - SPINLOCK spin; /**< Spinlock to protect the filter definition */ - struct mxs_filter_def *next; /**< Next filter in the chain of all filters */ -} MXS_FILTER_DEF; +struct mxs_filter_def; +typedef struct mxs_filter_def MXS_FILTER_DEF; /** * Lookup a filter definition using the unique section name in @@ -114,6 +105,16 @@ typedef struct mxs_filter_def */ MXS_FILTER_DEF *filter_def_find(const char *name); +/** + * Get the name of a filter definition. This corresponds to + * to a filter section in the configuration file. + * + * @param filter_def A filter definition. + * + * @return The filter name. + */ +const char* filter_def_get_name(const MXS_FILTER_DEF* filter_def); + /** * Get module name of a filter definition. * diff --git a/server/core/filter.c b/server/core/filter.c index 23663a931..268eee934 100644 --- a/server/core/filter.c +++ b/server/core/filter.c @@ -22,16 +22,17 @@ * * @endverbatim */ +#include #include #include #include #include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include "maxscale/filter.h" static SPINLOCK filter_spin = SPINLOCK_INIT; /**< Protects the list of all filters */ static MXS_FILTER_DEF *allFilters = NULL; /**< The list of all filters */ @@ -151,6 +152,11 @@ filter_def_find(const char *name) return filter; } +const char* filter_def_get_name(const MXS_FILTER_DEF* filter_def) +{ + return filter_def->name; +} + const char* filter_def_get_module_name(const MXS_FILTER_DEF* filter_def) { return filter_def->module; diff --git a/server/core/maxscale/filter.h b/server/core/maxscale/filter.h index df84e24b9..afd08d37e 100644 --- a/server/core/maxscale/filter.h +++ b/server/core/maxscale/filter.h @@ -20,6 +20,23 @@ MXS_BEGIN_DECLS +/** + * The definition of a filter from the configuration file. + * This is basically the link between a plugin to load and the + * options to pass to that plugin. + */ +typedef struct mxs_filter_def +{ + char *name; /**< The Filter name */ + char *module; /**< The module to load */ + char **options; /**< The options set for this filter */ + CONFIG_PARAMETER *parameters; /**< The filter parameters */ + MXS_FILTER* filter; /**< The runtime filter */ + MXS_FILTER_OBJECT *obj; /**< The "MODULE_OBJECT" for the filter */ + SPINLOCK spin; /**< Spinlock to protect the filter definition */ + struct mxs_filter_def *next; /**< Next filter in the chain of all filters */ +} MXS_FILTER_DEF; + void filter_add_option(MXS_FILTER_DEF *filter_def, const char *option); void filter_add_parameter(MXS_FILTER_DEF *filter_def, const char *name, const char *value); MXS_FILTER_DEF *filter_alloc(const char *name, const char *module_name); diff --git a/server/core/modulecmd.c b/server/core/modulecmd.c index 90a80cf6f..898d38c6d 100644 --- a/server/core/modulecmd.c +++ b/server/core/modulecmd.c @@ -11,12 +11,13 @@ * Public License. */ +#include #include #include -#include #include #include #include +#include "maxscale/filter.h" /** Size of the error buffer */ #define MODULECMD_ERRBUF_SIZE 512 diff --git a/server/modules/filter/cache/cachefilter.cc b/server/modules/filter/cache/cachefilter.cc index 7c8561463..6817b0184 100644 --- a/server/modules/filter/cache/cachefilter.cc +++ b/server/modules/filter/cache/cachefilter.cc @@ -93,11 +93,9 @@ bool cache_command_show(const MODULECMD_ARG* pArgs) const MXS_FILTER_DEF* pFilterDef = pArgs->argv[1].value.filter; ss_dassert(pFilterDef); - ss_dassert(strcmp(pFilterDef->module, MXS_MODULE_NAME) == 0); + CacheFilter* pFilter = reinterpret_cast(filter_def_get_instance(pFilterDef)); - CacheFilter* pFilter = reinterpret_cast(pFilterDef->filter); - - pFilter->cache().show(pDcb); + MXS_EXCEPTION_GUARD(pFilter->cache().show(pDcb)); return true; } diff --git a/server/modules/filter/dbfwfilter/dbfwfilter.c b/server/modules/filter/dbfwfilter/dbfwfilter.c index 889412123..3a2bc37ac 100644 --- a/server/modules/filter/dbfwfilter/dbfwfilter.c +++ b/server/modules/filter/dbfwfilter/dbfwfilter.c @@ -685,7 +685,7 @@ bool dbfw_reload_rules(const MODULECMD_ARG *argv) { bool rval = true; MXS_FILTER_DEF *filter = argv->argv[0].value.filter; - FW_INSTANCE *inst = (FW_INSTANCE*)filter->filter; + FW_INSTANCE *inst = (FW_INSTANCE*)filter_def_get_instance(filter); if (modulecmd_arg_is_present(argv, 1)) { @@ -750,7 +750,7 @@ bool dbfw_show_rules(const MODULECMD_ARG *argv) { DCB *dcb = argv->argv[0].value.dcb; MXS_FILTER_DEF *filter = argv->argv[1].value.filter; - FW_INSTANCE *inst = (FW_INSTANCE*)filter->filter; + FW_INSTANCE *inst = (FW_INSTANCE*)filter_def_get_instance(filter); dcb_printf(dcb, "Rule, Type, Times Matched\n"); diff --git a/server/modules/filter/masking/maskingfilter.cc b/server/modules/filter/masking/maskingfilter.cc index 594f1ee05..42a8aa4d5 100644 --- a/server/modules/filter/masking/maskingfilter.cc +++ b/server/modules/filter/masking/maskingfilter.cc @@ -43,9 +43,7 @@ bool masking_command_reload(const MODULECMD_ARG* pArgs) const MXS_FILTER_DEF* pFilterDef = pArgs->argv[1].value.filter; ss_dassert(pFilterDef); - ss_dassert(strcmp(pFilterDef->module, MXS_MODULE_NAME) == 0); - - MaskingFilter* pFilter = reinterpret_cast(pFilterDef->filter); + MaskingFilter* pFilter = reinterpret_cast(filter_def_get_instance(pFilterDef)); MXS_EXCEPTION_GUARD(pFilter->reload(pDcb)); diff --git a/server/modules/filter/tee/tee.c b/server/modules/filter/tee/tee.c index 844b45f35..ca99a7c49 100644 --- a/server/modules/filter/tee/tee.c +++ b/server/modules/filter/tee/tee.c @@ -807,14 +807,15 @@ int detect_loops(TEE_INSTANCE *instance, HASHTABLE* ht, SERVICE* service) for (i = 0; i < svc->n_filters; i++) { - if (strcmp(svc->filters[i]->module, "tee") == 0) + const char* module = filter_def_get_module_name(svc->filters[i]); + if (strcmp(module, "tee") == 0) { /* * Found a Tee filter, recurse down its path * if the service name isn't already in the hashtable. */ - TEE_INSTANCE* ninst = (TEE_INSTANCE*) svc->filters[i]->filter; + TEE_INSTANCE* ninst = (TEE_INSTANCE*)filter_def_get_instance(svc->filters[i]); if (ninst == NULL) { /** @@ -825,7 +826,7 @@ int detect_loops(TEE_INSTANCE *instance, HASHTABLE* ht, SERVICE* service) } SERVICE* tgt = ninst->service; - if (detect_loops((TEE_INSTANCE*) svc->filters[i]->filter, ht, tgt)) + if (detect_loops(ninst, ht, tgt)) { return true; }