TS-2323: drive remap directives from a pointer table
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/5d2ea5b5 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/5d2ea5b5 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/5d2ea5b5 Branch: refs/heads/master Commit: 5d2ea5b57e98878d557eb9222cf46587936eddf3 Parents: a2db1d0 Author: James Peach <[email protected]> Authored: Wed Oct 30 10:56:58 2013 -0700 Committer: James Peach <[email protected]> Committed: Tue Nov 5 16:46:12 2013 -0800 ---------------------------------------------------------------------- proxy/http/remap/UrlRewrite.cc | 57 +++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5d2ea5b5/proxy/http/remap/UrlRewrite.cc ---------------------------------------------------------------------- diff --git a/proxy/http/remap/UrlRewrite.cc b/proxy/http/remap/UrlRewrite.cc index 36f8ff2..4b7a1bf 100644 --- a/proxy/http/remap/UrlRewrite.cc +++ b/proxy/http/remap/UrlRewrite.cc @@ -487,6 +487,34 @@ parse_deactivate_directive(const char * directive, BUILD_TABLE_INFO * bti, char return NULL; } +struct remap_directive +{ + const char * name; + const char * (*parser)(const char *, BUILD_TABLE_INFO *, char *, size_t); +}; + +static const remap_directive directives[] = { + + { ".definefilter", parse_define_directive}, + { ".deffilter", parse_define_directive}, + { ".defflt", parse_define_directive}, + + { ".deletefilter", parse_delete_directive}, + { ".delfilter", parse_delete_directive}, + { ".delflt", parse_delete_directive}, + + { ".usefilter", parse_activate_directive}, + { ".activefilter", parse_activate_directive}, + { ".activatefilter", parse_activate_directive}, + + { ".unusefilter", parse_deactivate_directive}, + { ".deactivatefilter", parse_deactivate_directive}, + { ".unactivefilter", parse_deactivate_directive}, + { ".deuseflt", parse_deactivate_directive}, + { ".unuseflt", parse_deactivate_directive}, + +}; + static const char * parse_directive(BUILD_TABLE_INFO *bti, char * errbuf, size_t errbufsize) { @@ -498,30 +526,15 @@ parse_directive(BUILD_TABLE_INFO *bti, char * errbuf, size_t errbufsize) return "Invalid argument(s)"; } - Debug("url_rewrite", "[parse_directive] Start processing \"%s\" directive", directive); - - if (directive[0] != '.' || directive[1] == 0) { - snprintf(errbuf, errbufsize, "Invalid directive \"%s\"", directive); - Debug("url_rewrite", "[parse_directive] %s", errbuf); - return (const char *) errbuf; - } - - if (is_inkeylist(directive, ".definefilter", ".deffilter", ".defflt", NULL)) { - return parse_define_directive(&directive[1], bti, errbuf, errbufsize); - } else if (is_inkeylist(directive, ".deletefilter", ".delfilter", ".delflt", NULL)) { - return parse_delete_directive(directive, bti, errbuf, errbufsize); - } else if (is_inkeylist(directive, ".usefilter", ".activefilter", ".activatefilter", ".useflt", NULL)) { - return parse_activate_directive(directive, bti, errbuf, errbufsize); - } else if (is_inkeylist(directive, ".unusefilter", ".deactivatefilter", ".unactivefilter", ".deuseflt", ".unuseflt", NULL)) - { - return parse_deactivate_directive(directive, bti, errbuf, errbufsize); - } else { - snprintf(errbuf, errbufsize, "Unknown directive \"%s\"", directive); - Debug("url_rewrite", "[parse_directive] %s", errbuf); - return (const char *) errbuf; + for (unsigned i = 0; i < countof(directives); ++i) { + if (strcmp(directive, directives[i].name) == 0) { + return directives[i].parser(directive, bti, errbuf, errbufsize); + } } - return NULL; + snprintf(errbuf, errbufsize, "Unknown directive \"%s\"", directive); + Debug("url_rewrite", "[parse_directive] %s", errbuf); + return (const char *) errbuf; } static const char *
