Repository: trafficserver Updated Branches: refs/heads/master 3935dca18 -> 85afd76e0
[TS-3023] - Support space separated values in inline plugin parameters in remap rules Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/85afd76e Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/85afd76e Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/85afd76e Branch: refs/heads/master Commit: 85afd76e07380161dc3268a1b5d3bdd7286a9527 Parents: 3935dca Author: Sudheer Vinukonda <sudhe...@yahoo-inc.com> Authored: Fri Sep 12 16:47:03 2014 +0000 Committer: Sudheer Vinukonda <sudhe...@yahoo-inc.com> Committed: Fri Sep 12 16:47:03 2014 +0000 ---------------------------------------------------------------------- lib/ts/Tokenizer.cc | 13 +++++++++++++ lib/ts/Tokenizer.h | 2 ++ proxy/InkAPITest.cc | 10 ++++++++++ proxy/http/remap/RemapConfig.cc | 2 +- 4 files changed, 26 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/85afd76e/lib/ts/Tokenizer.cc ---------------------------------------------------------------------- diff --git a/lib/ts/Tokenizer.cc b/lib/ts/Tokenizer.cc index 459e54e..78e2cde 100644 --- a/lib/ts/Tokenizer.cc +++ b/lib/ts/Tokenizer.cc @@ -55,6 +55,7 @@ Tokenizer::Tokenizer(const char *StrOfDelimiters) add_node = &start_node; add_index = 0; + quoteFound = false; } Tokenizer::~Tokenizer() @@ -95,6 +96,14 @@ Tokenizer::isDelimiter(char c) { int i = 0; + if ((options & ALLOW_SPACES) && + ((c == 0x22) || (c == 0x27))) { + quoteFound = !quoteFound; + } + + if (quoteFound) + return 0; + while (strOfDelimit[i] != '\0') { if (c == strOfDelimit[i]) { return 1; @@ -182,6 +191,8 @@ Tokenizer::Initialize(char *str, int opt) } } + quoteFound = false; + // Check to see if we stoped due to a maxToken limit if (max_limit_hit == true) { @@ -215,6 +226,8 @@ Tokenizer::Initialize(char *str, int opt) } } } + + quoteFound = false; // Check to see if we got the last token. We will // only have gotten it if the string ended with a delimiter if (priorCharWasDelimit == 0) { http://git-wip-us.apache.org/repos/asf/trafficserver/blob/85afd76e/lib/ts/Tokenizer.h ---------------------------------------------------------------------- diff --git a/lib/ts/Tokenizer.h b/lib/ts/Tokenizer.h index fdc99c5..bfb6a4a 100644 --- a/lib/ts/Tokenizer.h +++ b/lib/ts/Tokenizer.h @@ -107,6 +107,7 @@ #define COPY_TOKS 1 << 0 #define SHARE_TOKS 1 << 1 #define ALLOW_EMPTY_TOKS 1 << 2 +#define ALLOW_SPACES 1 << 3 #define TOK_NODE_ELEMENTS 16 struct tok_node @@ -154,6 +155,7 @@ private: int numValidTokens; int maxTokens; int options; + bool quoteFound; // State about where to add the next token tok_node *add_node; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/85afd76e/proxy/InkAPITest.cc ---------------------------------------------------------------------- diff --git a/proxy/InkAPITest.cc b/proxy/InkAPITest.cc index 1345979..52ba3a1 100644 --- a/proxy/InkAPITest.cc +++ b/proxy/InkAPITest.cc @@ -7508,6 +7508,16 @@ REGRESSION_TEST(SDK_API_OVERRIDABLE_CONFIGS) (RegressionTest * test, int /* atyp *pstatus = REGRESSION_TEST_FAILED; } + Tokenizer whiteTok(" \t"); + + char cur_line[] = "map https://abc.com https://abc.com @plugin=conf_remap.so @pparam=proxy.config.abc='ABC DEF'"; + + int tok_count = whiteTok.Initialize((char*)cur_line, (SHARE_TOKS | ALLOW_SPACES)); + + for (int i=0; i<tok_count; i++) { + SDK_RPRINT(test, "Tokenizer::Initialize", "TokenizerTest", TC_PASS, "Token %d : %s\n", i, whiteTok[i]); + } + return; } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/85afd76e/proxy/http/remap/RemapConfig.cc ---------------------------------------------------------------------- diff --git a/proxy/http/remap/RemapConfig.cc b/proxy/http/remap/RemapConfig.cc index a713da4..2bbc67c 100644 --- a/proxy/http/remap/RemapConfig.cc +++ b/proxy/http/remap/RemapConfig.cc @@ -922,7 +922,7 @@ remap_parse_config_bti(const char * path, BUILD_TABLE_INFO * bti) Debug("url_rewrite", "[BuildTable] Parsing: \"%s\"", cur_line); - tok_count = whiteTok.Initialize(cur_line, SHARE_TOKS); + tok_count = whiteTok.Initialize(cur_line, (SHARE_TOKS | ALLOW_SPACES)); for (int j = 0; j < tok_count; j++) { if (((char *) whiteTok[j])[0] == '@') {