You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2014/03/12 02:54:07 UTC
git commit: TS-2623 Also fix the indentation to follow our coding
standards.
Repository: trafficserver
Updated Branches:
refs/heads/master 44a826fe0 -> 558345f21
TS-2623 Also fix the indentation to follow our coding standards.
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/558345f2
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/558345f2
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/558345f2
Branch: refs/heads/master
Commit: 558345f212bedcc467f7934da530b544e6a60c0a
Parents: 44a826f
Author: Leif Hedstrom <zw...@apache.org>
Authored: Tue Mar 11 19:53:22 2014 -0600
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Tue Mar 11 19:53:22 2014 -0600
----------------------------------------------------------------------
plugins/cacheurl/cacheurl.cc | 699 +++++++++++++++++++-------------------
1 file changed, 355 insertions(+), 344 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/558345f2/plugins/cacheurl/cacheurl.cc
----------------------------------------------------------------------
diff --git a/plugins/cacheurl/cacheurl.cc b/plugins/cacheurl/cacheurl.cc
index bf7bfe0..c32d52d 100644
--- a/plugins/cacheurl/cacheurl.cc
+++ b/plugins/cacheurl/cacheurl.cc
@@ -17,7 +17,7 @@
* under the License.
*/
-/* cacheurl.c - Plugin to modify the URL used as a cache key for certain
+/* cacheurl.cc - Plugin to modify the URL used as a cache key for certain
* requests, without modifying the URL used for actually fetching data from
* the origin server.
*/
@@ -43,392 +43,403 @@
#define OVECOUNT 30
#define PLUGIN_NAME "cacheurl"
-struct regex_info {
- pcre *re; /* Compiled regular expression */
- int tokcount; /* Token count */
- char *pattern; /* Pattern string */
- char *replacement; /* Replacement string */
- int *tokens; /* Array of $x token values */
- int *tokenoffset; /* Array of $x token offsets */
+struct regex_info
+{
+ pcre *re; /* Compiled regular expression */
+ int tokcount; /* Token count */
+ char *pattern; /* Pattern string */
+ char *replacement; /* Replacement string */
+ int *tokens; /* Array of $x token values */
+ int *tokenoffset; /* Array of $x token offsets */
};
-struct pr_list {
- std::vector <regex_info *> pr;
-
- pr_list() {
- }
-
- ~pr_list() {
- for (std::vector<regex_info *>::iterator info = this->pr.begin(); info != this->pr.end(); ++info) {
- TSfree((*info)->tokens);
- TSfree((*info)->tokenoffset);
- pcre_free((*info)->re);
- TSfree(*info);
- }
+struct pr_list
+{
+ std::vector<regex_info*>pr;
+
+ pr_list()
+ {
+ }
+
+ ~pr_list()
+ {
+ for (std::vector < regex_info * >::iterator info = this->pr.begin(); info != this->pr.end(); ++info) {
+ TSfree((*info)->tokens);
+ TSfree((*info)->tokenoffset);
+ pcre_free((*info)->re);
+ TSfree(*info);
}
+ }
};
-static int regex_substitute(char **buf, char *str, regex_info *info) {
- int matchcount;
- int ovector[OVECOUNT]; /* Locations of matches in regex */
-
- int replacelen; /* length of replacement string */
- int i;
- int offset;
- int prev;
-
- /* Perform the regex matching */
- matchcount = pcre_exec(info->re, NULL, str, strlen(str), 0, 0, ovector,
- OVECOUNT);
- if (matchcount < 0) {
- switch (matchcount) {
- case PCRE_ERROR_NOMATCH:
- break;
- default:
- TSError("[%s] Matching error: %d\n", PLUGIN_NAME, matchcount);
- break;
- }
- return 0;
- }
-
- /* Verify the replacement has the right number of matching groups */
- for (i=0; i<info->tokcount; i++) {
- if (info->tokens[i] >= matchcount) {
- TSError("[%s] Invalid reference int replacement: $%d\n", PLUGIN_NAME, info->tokens[i]);
- return 0;
- }
- }
-
- /* malloc the replacement string */
- replacelen = strlen(info->replacement);
- replacelen -= info->tokcount * 2; /* Subtract $1, $2 etc... */
- for (i=0; i<info->tokcount; i++) {
- replacelen += (ovector[info->tokens[i]*2+1] -
- ovector[info->tokens[i]*2]);
+static int
+regex_substitute(char **buf, char *str, regex_info * info)
+{
+ int matchcount;
+ int ovector[OVECOUNT]; /* Locations of matches in regex */
+
+ int replacelen; /* length of replacement string */
+ int i;
+ int offset;
+ int prev;
+
+ /* Perform the regex matching */
+ matchcount = pcre_exec(info->re, NULL, str, strlen(str), 0, 0, ovector, OVECOUNT);
+ if (matchcount < 0) {
+ switch (matchcount) {
+ case PCRE_ERROR_NOMATCH:
+ break;
+ default:
+ TSError("[%s] Matching error: %d\n", PLUGIN_NAME, matchcount);
+ break;
}
- replacelen++; /* Null terminator */
- *buf = (char *)TSmalloc(replacelen);
-
- /* perform string replacement */
- offset = 0; /* Where we are adding new data in the string */
- prev = 0;
- for (i=0; i<info->tokcount; i++) {
- memcpy(*buf + offset, info->replacement + prev,
- info->tokenoffset[i] - prev);
- offset += (info->tokenoffset[i] - prev);
- prev = info->tokenoffset[i] + 2;
-
- memcpy(*buf + offset, str + ovector[info->tokens[i]*2],
- ovector[info->tokens[i]*2+1] - ovector[info->tokens[i]*2]);
- offset += (ovector[info->tokens[i]*2+1] - ovector[info->tokens[i]*2]);
+ return 0;
+ }
+
+ /* Verify the replacement has the right number of matching groups */
+ for (i = 0; i < info->tokcount; i++) {
+ if (info->tokens[i] >= matchcount) {
+ TSError("[%s] Invalid reference int replacement: $%d\n", PLUGIN_NAME, info->tokens[i]);
+ return 0;
}
- memcpy(*buf + offset, info->replacement + prev,
- strlen(info->replacement) - prev);
- offset += strlen(info->replacement) - prev;
- (*buf)[offset] = 0; /* Null termination */
- return 1;
+ }
+
+ /* malloc the replacement string */
+ replacelen = strlen(info->replacement);
+ replacelen -= info->tokcount * 2; /* Subtract $1, $2 etc... */
+ for (i = 0; i < info->tokcount; i++) {
+ replacelen += (ovector[info->tokens[i] * 2 + 1] - ovector[info->tokens[i] * 2]);
+ }
+ replacelen++; /* Null terminator */
+ *buf = (char *) TSmalloc(replacelen);
+
+ /* perform string replacement */
+ offset = 0; /* Where we are adding new data in the string */
+ prev = 0;
+ for (i = 0; i < info->tokcount; i++) {
+ memcpy(*buf + offset, info->replacement + prev, info->tokenoffset[i] - prev);
+ offset += (info->tokenoffset[i] - prev);
+ prev = info->tokenoffset[i] + 2;
+
+ memcpy(*buf + offset, str + ovector[info->tokens[i] * 2],
+ ovector[info->tokens[i] * 2 + 1] - ovector[info->tokens[i] * 2]);
+ offset += (ovector[info->tokens[i] * 2 + 1] - ovector[info->tokens[i] * 2]);
+ }
+ memcpy(*buf + offset, info->replacement + prev, strlen(info->replacement) - prev);
+ offset += strlen(info->replacement) - prev;
+ (*buf)[offset] = 0; /* Null termination */
+ return 1;
}
-static int regex_compile(regex_info **buf, char *pattern, char *replacement) {
- const char *reerror; /* Error string from pcre */
- int reerroffset; /* Offset where any pcre error occured */
-
- int tokcount;
- int *tokens;
- int *tokenoffset;
-
- int status = 1; /* Status (return value) of the function */
-
- regex_info *info = (regex_info *)TSmalloc(sizeof(regex_info));
-
-
- /* Precompile the regular expression */
- info->re = pcre_compile(pattern, 0, &reerror, &reerroffset, NULL);
- if (!info->re) {
- TSError("[%s] Compilation of regex '%s' failed at char %d: %s\n",
- PLUGIN_NAME, pattern, reerroffset, reerror);
- status = 0;
- }
-
- /* Precalculate the location of $X tokens in the replacement */
- tokcount = 0;
- if (status) {
- tokens = (int *)TSmalloc(sizeof(int) * TOKENCOUNT);
- tokenoffset = (int *)TSmalloc(sizeof(int) * TOKENCOUNT);
- for (unsigned i = 0; i<strlen(replacement); i++) {
- if (replacement[i] == '$') {
- if (tokcount >= TOKENCOUNT) {
- TSError("[%s] Error: too many tokens in replacement "
- "string: %s\n", PLUGIN_NAME, replacement);
- status = 0;
- break;
- } else if (replacement[i+1] < '0' || replacement[i+1] > '9') {
- TSError("[%s] Error: Invalid replacement token $%c in "
- "%s: should be $0 - $9\n", PLUGIN_NAME,
- replacement[i+1], replacement);
- status = 0;
- break;
- } else {
- /* Store the location of the replacement */
- /* Convert '0' to 0 */
- tokens[tokcount] = replacement[i+1] - '0';
- tokenoffset[tokcount] = i;
- tokcount++;
- /* Skip the next char */
- i++;
- }
- }
+static int
+regex_compile(regex_info ** buf, char *pattern, char *replacement)
+{
+ const char *reerror; /* Error string from pcre */
+ int reerroffset; /* Offset where any pcre error occured */
+
+ int tokcount;
+ int *tokens;
+ int *tokenoffset;
+
+ int status = 1; /* Status (return value) of the function */
+ regex_info *info = (regex_info *) TSmalloc(sizeof(regex_info));
+
+ /* Precompile the regular expression */
+ info->re = pcre_compile(pattern, 0, &reerror, &reerroffset, NULL);
+ if (!info->re) {
+ TSError("[%s] Compilation of regex '%s' failed at char %d: %s\n", PLUGIN_NAME, pattern, reerroffset, reerror);
+ status = 0;
+ }
+
+ /* Precalculate the location of $X tokens in the replacement */
+ tokcount = 0;
+ if (status) {
+ tokens = (int *) TSmalloc(sizeof(int) * TOKENCOUNT);
+ tokenoffset = (int *) TSmalloc(sizeof(int) * TOKENCOUNT);
+ for (unsigned i = 0; i < strlen(replacement); i++) {
+ if (replacement[i] == '$') {
+ if (tokcount >= TOKENCOUNT) {
+ TSError("[%s] Error: too many tokens in replacement " "string: %s\n", PLUGIN_NAME, replacement);
+ status = 0;
+ break;
+ } else if (replacement[i + 1] < '0' || replacement[i + 1] > '9') {
+ TSError("[%s] Error: Invalid replacement token $%c in %s: should be $0 - $9\n",
+ PLUGIN_NAME, replacement[i + 1], replacement);
+ status = 0;
+ break;
+ } else {
+ /* Store the location of the replacement */
+ /* Convert '0' to 0 */
+ tokens[tokcount] = replacement[i + 1] - '0';
+ tokenoffset[tokcount] = i;
+ tokcount++;
+ /* Skip the next char */
+ i++;
}
+ }
}
-
- if (status) {
- /* Everything went OK */
- info->tokcount = tokcount;
- info->tokens = tokens;
- info->tokenoffset = tokenoffset;
-
- info->pattern = TSstrdup(pattern);
- info->replacement = TSstrdup(replacement);
-
- *buf = info;
- } else {
- /* Something went wrong, clean up */
- if (info->tokens) TSfree(info->tokens);
- if (info->tokenoffset) TSfree(info->tokenoffset);
- if (info->re) pcre_free(info->re);
- if (info) TSfree(info);
- }
- return status;
+ }
+
+ if (status) {
+ /* Everything went OK */
+ info->tokcount = tokcount;
+ info->tokens = tokens;
+ info->tokenoffset = tokenoffset;
+
+ info->pattern = TSstrdup(pattern);
+ info->replacement = TSstrdup(replacement);
+
+ *buf = info;
+ } else {
+ /* Something went wrong, clean up */
+ if (info->tokens)
+ TSfree(info->tokens);
+ if (info->tokenoffset)
+ TSfree(info->tokenoffset);
+ if (info->re)
+ pcre_free(info->re);
+ if (info)
+ TSfree(info);
+ }
+ return status;
}
static pr_list *
-load_config_file(const char *config_file) {
- char buffer[1024];
- std::string path;
- TSFile fh;
- pr_list *prl = new pr_list();
-
- /* locations in a config file line, end of line, split start, split end */
- char *eol, *spstart, *spend;
- int lineno = 0;
- int retval;
- regex_info *info = 0;
-
- if (config_file == NULL) {
- /* Default config file of plugins/cacheurl.config */
- path = TSPluginDirGet();
- path += "/cacheurl.config";
- } else if (*config_file != '/') {
- // Relative paths are relative to the config directory
- path = TSConfigDirGet();
- path += "/";
- path += config_file;
+load_config_file(const char *config_file)
+{
+ char buffer[1024];
+ std::string path;
+ TSFile fh;
+ pr_list *prl = new pr_list();
+
+ /* locations in a config file line, end of line, split start, split end */
+ char *eol, *spstart, *spend;
+ int lineno = 0;
+ int retval;
+ regex_info *info = 0;
+
+ if (config_file == NULL) {
+ /* Default config file of plugins/cacheurl.config */
+ path = TSPluginDirGet();
+ path += "/cacheurl.config";
+ } else if (*config_file != '/') {
+ // Relative paths are relative to the config directory
+ path = TSConfigDirGet();
+ path += "/";
+ path += config_file;
+ } else {
+ // Absolute path ...
+ path = config_file;
+ }
+
+ TSDebug(PLUGIN_NAME, "Opening config file: %s", path.c_str());
+ fh = TSfopen(path.c_str(), "r");
+
+ if (!fh) {
+ TSError("[%s] Unable to open %s. No patterns will be loaded\n", PLUGIN_NAME, path.c_str());
+ return prl;
+ }
+
+ while (TSfgets(fh, buffer, sizeof(buffer) - 1)) {
+ lineno++;
+ if (*buffer == '#') {
+ /* # Comments, only at line beginning */
+ continue;
+ }
+ eol = strstr(buffer, "\n");
+ if (eol) {
+ *eol = 0; /* Terminate string at newline */
} else {
- // Absolute path ...
- path = config_file;
+ /* Malformed line - skip */
+ continue;
}
-
- TSDebug(PLUGIN_NAME, "Opening config file: %s", path.c_str());
- fh = TSfopen(path.c_str(), "r");
-
- if (!fh) {
- TSError("[%s] Unable to open %s. No patterns will be loaded\n",
- PLUGIN_NAME, path.c_str());
- return prl;
+ /* Split line into two parts based on whitespace */
+ /* Find first whitespace */
+ spstart = strstr(buffer, " ");
+ if (!spstart) {
+ spstart = strstr(buffer, "\t");
+ }
+ if (!spstart) {
+ TSError("[%s] ERROR: Invalid format on line %d. Skipping\n", PLUGIN_NAME, lineno);
+ continue;
+ }
+ /* Find part of the line after any whitespace */
+ spend = spstart + 1;
+ while (*spend == ' ' || *spend == '\t') {
+ spend++;
+ }
+ if (*spend == 0) {
+ /* We reached the end of the string without any non-whitepace */
+ TSError("[%s] ERROR: Invalid format on line %d. Skipping\n", PLUGIN_NAME, lineno);
+ continue;
}
- while (TSfgets(fh, buffer, sizeof(buffer) - 1)) {
- lineno++;
- if (*buffer == '#') {
- /* # Comments, only at line beginning */
- continue;
- }
- eol = strstr(buffer, "\n");
- if (eol) {
- *eol = 0; /* Terminate string at newline */
- } else {
- /* Malformed line - skip */
- continue;
- }
- /* Split line into two parts based on whitespace */
- /* Find first whitespace */
- spstart = strstr(buffer, " ");
- if (!spstart) {
- spstart = strstr(buffer, "\t");
- }
- if (!spstart) {
- TSError("[%s] ERROR: Invalid format on line %d. Skipping\n",
- PLUGIN_NAME, lineno);
- continue;
- }
- /* Find part of the line after any whitespace */
- spend = spstart + 1;
- while(*spend == ' ' || *spend == '\t') {
- spend++;
- }
- if (*spend == 0) {
- /* We reached the end of the string without any non-whitepace */
- TSError("[%s] ERROR: Invalid format on line %d. Skipping\n",
- PLUGIN_NAME, lineno);
- continue;
- }
-
- *spstart = 0;
- /* We have the pattern/replacement, now do precompilation.
- * buffer is the first part of the line. spend is the second part just
- * after the whitespace */
- TSDebug(PLUGIN_NAME, "Adding pattern/replacement pair: '%s' -> '%s'", buffer, spend);
- retval = regex_compile(&info, buffer, spend);
- if (!retval) {
- TSError("[%s] Error precompiling regex/replacement. Skipping.\n",
- PLUGIN_NAME);
- }
-
- prl->pr.push_back(info);
+ *spstart = 0;
+ /* We have the pattern/replacement, now do precompilation.
+ * buffer is the first part of the line. spend is the second part just
+ * after the whitespace */
+ TSDebug(PLUGIN_NAME, "Adding pattern/replacement pair: '%s' -> '%s'", buffer, spend);
+ retval = regex_compile(&info, buffer, spend);
+ if (!retval) {
+ TSError("[%s] Error precompiling regex/replacement. Skipping.\n", PLUGIN_NAME);
}
- TSfclose(fh);
- TSDebug(PLUGIN_NAME, "loaded %u regexes", (unsigned)prl->pr.size());
- return prl;
+ prl->pr.push_back(info);
+ }
+ TSfclose(fh);
+
+ TSDebug(PLUGIN_NAME, "loaded %u regexes", (unsigned) prl->pr.size());
+ return prl;
}
-static int rewrite_cacheurl(pr_list *prl, TSHttpTxn txnp) {
- int ok = 1;
- char *newurl = 0;
- int retval;
-
- char *url;
- int url_length;
- if (ok) {
- url = TSHttpTxnEffectiveUrlStringGet(txnp, &url_length);
- if (!url) {
- TSError("[%s] couldn't retrieve request url\n",
- PLUGIN_NAME);
- ok = 0;
- }
+static int
+rewrite_cacheurl(pr_list * prl, TSHttpTxn txnp)
+{
+ int ok = 1;
+ char *newurl = 0;
+ int retval;
+ char *url;
+ int url_length;
+
+ url = TSHttpTxnEffectiveUrlStringGet(txnp, &url_length);
+ if (!url) {
+ TSError("[%s] couldn't retrieve request url\n", PLUGIN_NAME);
+ ok = 0;
+ }
+
+ if (ok) {
+ for (std::vector<regex_info*>::iterator info = prl->pr.begin(); info != prl->pr.end(); ++info) {
+ retval = regex_substitute(&newurl, url, *info);
+ if (retval) {
+ /* Successful match/substitution */
+ break;
+ }
}
-
- if (ok) {
- for (std::vector<regex_info *>::iterator info = prl->pr.begin(); info != prl->pr.end(); ++info) {
- retval = regex_substitute(&newurl, url, *info);
- if (retval) {
- /* Successful match/substitution */
- break;
- }
- }
- if (newurl) {
- TSDebug(PLUGIN_NAME, "Rewriting cache URL for %s to %s", url, newurl);
- if (TSCacheUrlSet(txnp, newurl, strlen(newurl))
- != TS_SUCCESS) {
- TSError("[%s] Unable to modify cache url from "
- "%s to %s\n", PLUGIN_NAME, url, newurl);
- ok = 0;
- }
- }
+ if (newurl) {
+ TSDebug(PLUGIN_NAME, "Rewriting cache URL for %s to %s", url, newurl);
+ if (TSCacheUrlSet(txnp, newurl, strlen(newurl))
+ != TS_SUCCESS) {
+ TSError("[%s] Unable to modify cache url from " "%s to %s\n", PLUGIN_NAME, url, newurl);
+ ok = 0;
+ }
}
- /* Clean up */
- if (url) TSfree(url);
- if (newurl) TSfree(newurl);
- return ok;
-}
+ }
-static int handle_hook(TSCont contp, TSEvent event, void *edata) {
- TSHttpTxn txnp = (TSHttpTxn) edata;
- pr_list *prl;
- int ok = 1;
-
- prl = (pr_list *)TSContDataGet(contp);
-
- switch (event) {
- case TS_EVENT_HTTP_READ_REQUEST_HDR:
- ok = rewrite_cacheurl(prl, txnp);
- TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE);
- break;
- default:
- TSAssert(!"Unexpected event");
- ok = 0;
- break;
- }
+ /* Clean up */
+ if (url)
+ TSfree(url);
+ if (newurl)
+ TSfree(newurl);
- return ok;
+ return ok;
}
-/* Generic error message function for errors in plugin initialization */
-static void initialization_error(const char *msg) {
- TSError("[%s] %s\n", PLUGIN_NAME, msg);
- TSError("[%s] Unable to initialize plugin (disabled).\n", PLUGIN_NAME);
+static int
+handle_hook(TSCont contp, TSEvent event, void *edata)
+{
+ TSHttpTxn txnp = (TSHttpTxn) edata;
+ pr_list *prl;
+ int ok = 1;
+
+ prl = (pr_list *) TSContDataGet(contp);
+
+ switch (event) {
+ case TS_EVENT_HTTP_READ_REQUEST_HDR:
+ ok = rewrite_cacheurl(prl, txnp);
+ TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE);
+ break;
+ default:
+ TSAssert(!"Unexpected event");
+ ok = 0;
+ break;
+ }
+
+ return ok;
}
-TSReturnCode TSRemapInit(TSRemapInterface *api_info, char *errbuf,
- int errbuf_size) {
- if (!api_info) {
- strncpy(errbuf, "[tsremap_init] Invalid TSRemapInterface argument",
- errbuf_size - 1);
- return TS_ERROR;
- }
-
- if (api_info->size < sizeof(TSRemapInterface)) {
- strncpy(errbuf,
- "[tsremap_init] Incorrect size of TSRemapInterface structure",
- errbuf_size - 1);
- return TS_ERROR;
- }
+/* Generic error message function for errors in plugin initialization */
+static void
+initialization_error(const char *msg)
+{
+ TSError("[%s] %s\n", PLUGIN_NAME, msg);
+ TSError("[%s] Unable to initialize plugin (disabled).\n", PLUGIN_NAME);
+}
- if (api_info->tsremap_version < TSREMAP_VERSION) {
- snprintf(errbuf, errbuf_size - 1,
- "[tsremap_init] Incorrect API version %ld.%ld",
- api_info->tsremap_version >> 16,
- (api_info->tsremap_version & 0xffff));
- return TS_ERROR;
- }
+TSReturnCode
+TSRemapInit(TSRemapInterface * api_info, char *errbuf, int errbuf_size)
+{
+ if (!api_info) {
+ strncpy(errbuf, "[tsremap_init] Invalid TSRemapInterface argument", errbuf_size - 1);
+ return TS_ERROR;
+ }
+
+ if (api_info->size < sizeof(TSRemapInterface)) {
+ strncpy(errbuf, "[tsremap_init] Incorrect size of TSRemapInterface structure", errbuf_size - 1);
+ return TS_ERROR;
+ }
+
+ if (api_info->tsremap_version < TSREMAP_VERSION) {
+ snprintf(errbuf, errbuf_size - 1, "[tsremap_init] Incorrect API version %ld.%ld",
+ api_info->tsremap_version >> 16, (api_info->tsremap_version & 0xffff));
+ return TS_ERROR;
+ }
+
+ TSDebug(PLUGIN_NAME, "remap plugin is successfully initialized");
+ return TS_SUCCESS;
+}
- TSDebug(PLUGIN_NAME, "remap plugin is successfully initialized");
- return TS_SUCCESS;
+TSReturnCode
+TSRemapNewInstance(int argc, char *argv[], void **ih, char *errbuf ATS_UNUSED, int errbuf_size ATS_UNUSED)
+{
+ *ih = load_config_file(argc > 2 ? argv[2] : NULL);
+ return TS_SUCCESS;
}
-TSReturnCode TSRemapNewInstance(int argc, char* argv[], void** ih, char* errbuf ATS_UNUSED,
- int errbuf_size ATS_UNUSED) {
- *ih = load_config_file(argc > 2 ? argv[2] : NULL);
- return TS_SUCCESS;
-}
+void
+TSRemapDeleteInstance(void *ih)
+{
+ pr_list *prl = (pr_list *) ih;
+ TSDebug(PLUGIN_NAME, "Deleting remap instance");
-void TSRemapDeleteInstance(void *ih) {
- TSDebug(PLUGIN_NAME, "Deleting remap instance");
- pr_list *prl = (pr_list *)ih;
- TSfree(prl);
- delete prl;
+ TSfree(prl);
+ delete prl;
}
-TSRemapStatus TSRemapDoRemap(void* ih, TSHttpTxn rh, TSRemapRequestInfo *rri ATS_UNUSED) {
- int ok;
- ok = rewrite_cacheurl((pr_list *)ih, rh);
- if (ok) {
- return TSREMAP_NO_REMAP;
- } else {
- return TSREMAP_ERROR;
- }
+TSRemapStatus
+TSRemapDoRemap(void *ih, TSHttpTxn rh, TSRemapRequestInfo * rri ATS_UNUSED)
+{
+ int ok;
+
+ ok = rewrite_cacheurl((pr_list *) ih, rh);
+ if (ok) {
+ return TSREMAP_NO_REMAP;
+ } else {
+ return TSREMAP_ERROR;
+ }
}
-void TSPluginInit(int argc, const char *argv[]) {
- TSPluginRegistrationInfo info;
- TSCont contp;
- pr_list *prl;
+void
+TSPluginInit(int argc, const char *argv[])
+{
+ TSPluginRegistrationInfo info;
+ TSCont contp;
+ pr_list *prl;
- info.plugin_name = (char *)PLUGIN_NAME;
- info.vendor_name = (char *)"Apache Software Foundation";
- info.support_email = (char *)"dev@trafficserver.apache.org";
+ info.plugin_name = (char *) PLUGIN_NAME;
+ info.vendor_name = (char *) "Apache Software Foundation";
+ info.support_email = (char *) "dev@trafficserver.apache.org";
- if (TSPluginRegister(TS_SDK_VERSION_3_0, &info) != TS_SUCCESS) {
- initialization_error("Plugin registration failed.");
- return;
- }
+ if (TSPluginRegister(TS_SDK_VERSION_3_0, &info) != TS_SUCCESS) {
+ initialization_error("Plugin registration failed.");
+ return;
+ }
- prl = load_config_file(argc > 1 ? argv[1] : NULL);
+ prl = load_config_file(argc > 1 ? argv[1] : NULL);
- contp = TSContCreate((TSEventFunc)handle_hook, NULL);
- /* Store the pattern replacement list in the continuation */
- TSContDataSet(contp, prl);
- TSHttpHookAdd(TS_HTTP_READ_REQUEST_HDR_HOOK, contp);
+ contp = TSContCreate((TSEventFunc) handle_hook, NULL);
+ /* Store the pattern replacement list in the continuation */
+ TSContDataSet(contp, prl);
+ TSHttpHookAdd(TS_HTTP_READ_REQUEST_HDR_HOOK, contp);
}