You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by su...@apache.org on 2014/11/03 20:24:42 UTC
git commit: Add support for Content-Length in background_fetch config
Repository: trafficserver
Updated Branches:
refs/heads/master 5e808b27b -> e655012e8
Add support for Content-Length in background_fetch config
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/e655012e
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/e655012e
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/e655012e
Branch: refs/heads/master
Commit: e655012e88572b6e9cfe2376c23276821e129ff9
Parents: 5e808b2
Author: Sudheer Vinukonda <su...@yahoo-inc.com>
Authored: Mon Nov 3 19:24:14 2014 +0000
Committer: Sudheer Vinukonda <su...@yahoo-inc.com>
Committed: Mon Nov 3 19:24:14 2014 +0000
----------------------------------------------------------------------
doc/reference/plugins/background_fetch.en.rst | 2 +
.../background_fetch/background_fetch.cc | 69 ++++++++++++++++----
2 files changed, 57 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e655012e/doc/reference/plugins/background_fetch.en.rst
----------------------------------------------------------------------
diff --git a/doc/reference/plugins/background_fetch.en.rst b/doc/reference/plugins/background_fetch.en.rst
index e1b4065..7826884 100644
--- a/doc/reference/plugins/background_fetch.en.rst
+++ b/doc/reference/plugins/background_fetch.en.rst
@@ -74,8 +74,10 @@ background fetch based on any arbitrary header or client-ip::
The contents of the config-file could be as below::
include User-Agent ABCDEF
+ exclude User-Agent *
exclude Content-Type text
exclude X-Foo-Bar text
+ exclude Content-Length <1000
The plugin also now supports per remap activation. To activate the plugin for
a given remap, add the below on the remap line::
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e655012e/plugins/experimental/background_fetch/background_fetch.cc
----------------------------------------------------------------------
diff --git a/plugins/experimental/background_fetch/background_fetch.cc b/plugins/experimental/background_fetch/background_fetch.cc
index f48ea05..7763b82 100644
--- a/plugins/experimental/background_fetch/background_fetch.cc
+++ b/plugins/experimental/background_fetch/background_fetch.cc
@@ -129,7 +129,14 @@ read_config(char* config_file, BgFetchRuleMap* ri)
if (cfg_name) {
cfg_value = strtok_r(NULL, " ", &savePtr);
if (cfg_value) {
- TSDebug(PLUGIN_NAME, "adding background_fetch exclusion rule %d for %s:%s", exclude, cfg_name, cfg_value);
+ if (!strcmp(cfg_name, "Content-Length")) {
+ if ((cfg_value[0] != '<') && (cfg_value[0] != '>')) {
+ TSError("%s: invalid content-len condition %s, skipping config value", PLUGIN_NAME, cfg_value);
+ memset(buffer, 0, sizeof(buffer));
+ continue;
+ }
+ }
+ TSDebug(PLUGIN_NAME, "adding background_fetch exclusion rule %d for %s: %s", exclude, cfg_name, cfg_value);
BgFetchRuleStruct ruleS = {exclude, cfg_name, cfg_value};
bgFetchRuleMapP->insert(std::make_pair(index++, ruleS));
} else {
@@ -672,6 +679,20 @@ check_client_ip_configured(TSHttpTxn txnp, const char* cfg_ip)
return false;
}
+static bool
+check_content_length(const uint32_t len, const char* cfg_val)
+{
+ uint32_t cfg_cont_len = atoi(&cfg_val[1]);
+
+ if (cfg_val[0] == '<') {
+ return (len <= cfg_cont_len);
+ } else if (cfg_val[0] == '>') {
+ return (len >= cfg_cont_len);
+ } else {
+ TSError("%s: invalid content length condition %c", PLUGIN_NAME, cfg_val[0]);
+ return false;
+ }
+}
///////////////////////////////////////////////////////////////////////////
// Check if a header excludes us from running the background fetch
@@ -694,8 +715,29 @@ check_field_configured(TSHttpTxn txnp, const char* field_name, const char* cfg_v
bool hdr_found = false;
TSMBuffer hdr_bufp;
- TSMLoc req_hdrs;
+ TSMLoc resp_hdrs;
+
+ if (!strcmp(field_name, "Content-Length")) {
+ if (TS_SUCCESS == TSHttpTxnServerRespGet(txnp, &hdr_bufp, &resp_hdrs)) {
+ TSMLoc loc = TSMimeHdrFieldFind(hdr_bufp, resp_hdrs, field_name, -1);
+ if (TS_NULL_MLOC != loc) {
+ uint32_t content_len = TSMimeHdrFieldValueUintGet(hdr_bufp, resp_hdrs, loc, 0 /* index */ );
+ if (check_content_length(content_len, cfg_val)) {
+ TSDebug(PLUGIN_NAME, "Found content-length match");
+ hdr_found = true;
+ }
+ TSHandleMLocRelease(hdr_bufp, resp_hdrs, loc);
+ } else {
+ TSDebug(PLUGIN_NAME, "No content-length field in resp");
+ }
+ } else {
+ TSError ("%s: Failed to get resp headers", PLUGIN_NAME);
+ }
+ TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, resp_hdrs);
+ return hdr_found;
+ }
+ TSMLoc req_hdrs;
TSReturnCode ret = TSHttpTxnClientReqGet(txnp, &hdr_bufp, &req_hdrs);
if (ret != TS_SUCCESS) {
@@ -709,19 +751,18 @@ check_field_configured(TSHttpTxn txnp, const char* field_name, const char* cfg_v
if (TS_NULL_MLOC != loc) {
if (!strcmp(cfg_val, "*")) {
TSDebug(PLUGIN_NAME, "Found %s wild card", field_name);
- TSHandleMLocRelease(hdr_bufp, req_hdrs, loc);
- TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, req_hdrs);
- return true;
- }
- int val_len = 0;
- const char *val_str = TSMimeHdrFieldValueStringGet(hdr_bufp, req_hdrs, loc, 0, &val_len);
-
- if (!val_str || val_len <= 0) {
- TSDebug(PLUGIN_NAME,"invalid field");
+ hdr_found = true;
} else {
- TSDebug(PLUGIN_NAME, "comparing with %s", cfg_val);
- if (NULL != strstr(val_str, cfg_val)) {
- hdr_found = true;
+ int val_len = 0;
+ const char *val_str = TSMimeHdrFieldValueStringGet(hdr_bufp, req_hdrs, loc, 0, &val_len);
+
+ if (!val_str || val_len <= 0) {
+ TSDebug(PLUGIN_NAME,"invalid field");
+ } else {
+ TSDebug(PLUGIN_NAME, "comparing with %s", cfg_val);
+ if (NULL != strstr(val_str, cfg_val)) {
+ hdr_found = true;
+ }
}
}
TSHandleMLocRelease(hdr_bufp, req_hdrs, loc);
Re: git commit: Add support for Content-Length in background_fetch
config
Posted by Sudheer Vinukonda <su...@yahoo-inc.com.INVALID>.
Hi Alan,
Sure - but, unfortunately, it looks like there¹s something wrong with the
automatic propagation of the commit SHA onto the jira for the past few
days.
It¹s not been updating the commit SHA on the jira, despite mentioning the
jira ticket # in the commit message.
Thanks,
Sudheer
On 11/4/14, 1:22 PM, "Alan M. Carroll" <am...@network-geographics.com> wrote:
>Monday, November 3, 2014, 2:57:00 PM, you wrote:
>
>> This change is part of TS-2683 - I will try to update the CHANGES file
>> with a consolidated list of changes made for TS-2683. Will that work?
>
>If you could, also put the commit SHA in a comment on the ticket. That's
>very useful later on. This happens automatically if you put the ticket #
>in the commit message.
>
Re: git commit: Add support for Content-Length in background_fetch config
Posted by "Alan M. Carroll" <am...@network-geographics.com>.
Monday, November 3, 2014, 2:57:00 PM, you wrote:
> This change is part of TS-2683 - I will try to update the CHANGES file
> with a consolidated list of changes made for TS-2683. Will that work?
If you could, also put the commit SHA in a comment on the ticket. That's very useful later on. This happens automatically if you put the ticket # in the commit message.
Re: git commit: Add support for Content-Length in background_fetch
config
Posted by Sudheer Vinukonda <su...@yahoo-inc.com.INVALID>.
Hi Leif,
Ah, apologies for missing the Jira ticket# in the commit.
This change is part of TS-2683 - I will try to update the CHANGES file
with a consolidated list of changes made for TS-2683. Will that work?
Thanks,
Sudheer
On 11/3/14, 12:12 PM, "Leif Hedstrom" <zw...@apache.org> wrote:
>
>> On Nov 3, 2014, at 12:24 PM, sudheerv@apache.org wrote:
>>
>> Repository: trafficserver
>> Updated Branches:
>> refs/heads/master 5e808b27b -> e655012e8
>>
>>
>> Add support for Content-Length in background_fetch config
>
>
>Does this have a Jira associated with it? It helps tracking what¹s ³New²
>in upcoming releases, amongst other forensic trails :)
>
>‹ Leif
>
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
>> Commit:
>>http://git-wip-us.apache.org/repos/asf/trafficserver/commit/e655012e
>> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/e655012e
>> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/e655012e
>>
>> Branch: refs/heads/master
>> Commit: e655012e88572b6e9cfe2376c23276821e129ff9
>> Parents: 5e808b2
>> Author: Sudheer Vinukonda <su...@yahoo-inc.com>
>> Authored: Mon Nov 3 19:24:14 2014 +0000
>> Committer: Sudheer Vinukonda <su...@yahoo-inc.com>
>> Committed: Mon Nov 3 19:24:14 2014 +0000
>>
>> ----------------------------------------------------------------------
>> doc/reference/plugins/background_fetch.en.rst | 2 +
>> .../background_fetch/background_fetch.cc | 69
>>++++++++++++++++----
>> 2 files changed, 57 insertions(+), 14 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>>
>>http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e655012e/doc/re
>>ference/plugins/background_fetch.en.rst
>> ----------------------------------------------------------------------
>> diff --git a/doc/reference/plugins/background_fetch.en.rst
>>b/doc/reference/plugins/background_fetch.en.rst
>> index e1b4065..7826884 100644
>> --- a/doc/reference/plugins/background_fetch.en.rst
>> +++ b/doc/reference/plugins/background_fetch.en.rst
>> @@ -74,8 +74,10 @@ background fetch based on any arbitrary header or
>>client-ip::
>> The contents of the config-file could be as below::
>>
>> include User-Agent ABCDEF
>> + exclude User-Agent *
>> exclude Content-Type text
>> exclude X-Foo-Bar text
>> + exclude Content-Length <1000
>>
>> The plugin also now supports per remap activation. To activate the
>>plugin for
>> a given remap, add the below on the remap line::
>>
>>
>>http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e655012e/plugin
>>s/experimental/background_fetch/background_fetch.cc
>> ----------------------------------------------------------------------
>> diff --git a/plugins/experimental/background_fetch/background_fetch.cc
>>b/plugins/experimental/background_fetch/background_fetch.cc
>> index f48ea05..7763b82 100644
>> --- a/plugins/experimental/background_fetch/background_fetch.cc
>> +++ b/plugins/experimental/background_fetch/background_fetch.cc
>> @@ -129,7 +129,14 @@ read_config(char* config_file, BgFetchRuleMap* ri)
>> if (cfg_name) {
>> cfg_value = strtok_r(NULL, " ", &savePtr);
>> if (cfg_value) {
>> - TSDebug(PLUGIN_NAME, "adding background_fetch exclusion
>>rule %d for %s:%s", exclude, cfg_name, cfg_value);
>> + if (!strcmp(cfg_name, "Content-Length")) {
>> + if ((cfg_value[0] != '<') && (cfg_value[0] != '>')) {
>> + TSError("%s: invalid content-len condition %s,
>>skipping config value", PLUGIN_NAME, cfg_value);
>> + memset(buffer, 0, sizeof(buffer));
>> + continue;
>> + }
>> + }
>> + TSDebug(PLUGIN_NAME, "adding background_fetch exclusion
>>rule %d for %s: %s", exclude, cfg_name, cfg_value);
>> BgFetchRuleStruct ruleS = {exclude, cfg_name, cfg_value};
>> bgFetchRuleMapP->insert(std::make_pair(index++, ruleS));
>> } else {
>> @@ -672,6 +679,20 @@ check_client_ip_configured(TSHttpTxn txnp, const
>>char* cfg_ip)
>> return false;
>> }
>>
>> +static bool
>> +check_content_length(const uint32_t len, const char* cfg_val)
>> +{
>> + uint32_t cfg_cont_len = atoi(&cfg_val[1]);
>> +
>> + if (cfg_val[0] == '<') {
>> + return (len <= cfg_cont_len);
>> + } else if (cfg_val[0] == '>') {
>> + return (len >= cfg_cont_len);
>> + } else {
>> + TSError("%s: invalid content length condition %c", PLUGIN_NAME,
>>cfg_val[0]);
>> + return false;
>> + }
>> +}
>>
>>
>>/////////////////////////////////////////////////////////////////////////
>>//
>> // Check if a header excludes us from running the background fetch
>> @@ -694,8 +715,29 @@ check_field_configured(TSHttpTxn txnp, const char*
>>field_name, const char* cfg_v
>> bool hdr_found = false;
>>
>> TSMBuffer hdr_bufp;
>> - TSMLoc req_hdrs;
>> + TSMLoc resp_hdrs;
>> +
>> + if (!strcmp(field_name, "Content-Length")) {
>> + if (TS_SUCCESS == TSHttpTxnServerRespGet(txnp, &hdr_bufp,
>>&resp_hdrs)) {
>> + TSMLoc loc = TSMimeHdrFieldFind(hdr_bufp, resp_hdrs, field_name,
>>-1);
>> + if (TS_NULL_MLOC != loc) {
>> + uint32_t content_len = TSMimeHdrFieldValueUintGet(hdr_bufp,
>>resp_hdrs, loc, 0 /* index */ );
>> + if (check_content_length(content_len, cfg_val)) {
>> + TSDebug(PLUGIN_NAME, "Found content-length match");
>> + hdr_found = true;
>> + }
>> + TSHandleMLocRelease(hdr_bufp, resp_hdrs, loc);
>> + } else {
>> + TSDebug(PLUGIN_NAME, "No content-length field in resp");
>> + }
>> + } else {
>> + TSError ("%s: Failed to get resp headers", PLUGIN_NAME);
>> + }
>> + TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, resp_hdrs);
>> + return hdr_found;
>> + }
>>
>> + TSMLoc req_hdrs;
>> TSReturnCode ret = TSHttpTxnClientReqGet(txnp, &hdr_bufp, &req_hdrs);
>>
>> if (ret != TS_SUCCESS) {
>> @@ -709,19 +751,18 @@ check_field_configured(TSHttpTxn txnp, const
>>char* field_name, const char* cfg_v
>> if (TS_NULL_MLOC != loc) {
>> if (!strcmp(cfg_val, "*")) {
>> TSDebug(PLUGIN_NAME, "Found %s wild card", field_name);
>> - TSHandleMLocRelease(hdr_bufp, req_hdrs, loc);
>> - TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, req_hdrs);
>> - return true;
>> - }
>> - int val_len = 0;
>> - const char *val_str = TSMimeHdrFieldValueStringGet(hdr_bufp,
>>req_hdrs, loc, 0, &val_len);
>> -
>> - if (!val_str || val_len <= 0) {
>> - TSDebug(PLUGIN_NAME,"invalid field");
>> + hdr_found = true;
>> } else {
>> - TSDebug(PLUGIN_NAME, "comparing with %s", cfg_val);
>> - if (NULL != strstr(val_str, cfg_val)) {
>> - hdr_found = true;
>> + int val_len = 0;
>> + const char *val_str = TSMimeHdrFieldValueStringGet(hdr_bufp,
>>req_hdrs, loc, 0, &val_len);
>> +
>> + if (!val_str || val_len <= 0) {
>> + TSDebug(PLUGIN_NAME,"invalid field");
>> + } else {
>> + TSDebug(PLUGIN_NAME, "comparing with %s", cfg_val);
>> + if (NULL != strstr(val_str, cfg_val)) {
>> + hdr_found = true;
>> + }
>> }
>> }
>> TSHandleMLocRelease(hdr_bufp, req_hdrs, loc);
>>
>
Re: git commit: Add support for Content-Length in background_fetch config
Posted by Leif Hedstrom <zw...@apache.org>.
> On Nov 3, 2014, at 12:24 PM, sudheerv@apache.org wrote:
>
> Repository: trafficserver
> Updated Branches:
> refs/heads/master 5e808b27b -> e655012e8
>
>
> Add support for Content-Length in background_fetch config
Does this have a Jira associated with it? It helps tracking what’s “New” in upcoming releases, amongst other forensic trails :)
— Leif
>
>
> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/e655012e
> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/e655012e
> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/e655012e
>
> Branch: refs/heads/master
> Commit: e655012e88572b6e9cfe2376c23276821e129ff9
> Parents: 5e808b2
> Author: Sudheer Vinukonda <su...@yahoo-inc.com>
> Authored: Mon Nov 3 19:24:14 2014 +0000
> Committer: Sudheer Vinukonda <su...@yahoo-inc.com>
> Committed: Mon Nov 3 19:24:14 2014 +0000
>
> ----------------------------------------------------------------------
> doc/reference/plugins/background_fetch.en.rst | 2 +
> .../background_fetch/background_fetch.cc | 69 ++++++++++++++++----
> 2 files changed, 57 insertions(+), 14 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e655012e/doc/reference/plugins/background_fetch.en.rst
> ----------------------------------------------------------------------
> diff --git a/doc/reference/plugins/background_fetch.en.rst b/doc/reference/plugins/background_fetch.en.rst
> index e1b4065..7826884 100644
> --- a/doc/reference/plugins/background_fetch.en.rst
> +++ b/doc/reference/plugins/background_fetch.en.rst
> @@ -74,8 +74,10 @@ background fetch based on any arbitrary header or client-ip::
> The contents of the config-file could be as below::
>
> include User-Agent ABCDEF
> + exclude User-Agent *
> exclude Content-Type text
> exclude X-Foo-Bar text
> + exclude Content-Length <1000
>
> The plugin also now supports per remap activation. To activate the plugin for
> a given remap, add the below on the remap line::
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e655012e/plugins/experimental/background_fetch/background_fetch.cc
> ----------------------------------------------------------------------
> diff --git a/plugins/experimental/background_fetch/background_fetch.cc b/plugins/experimental/background_fetch/background_fetch.cc
> index f48ea05..7763b82 100644
> --- a/plugins/experimental/background_fetch/background_fetch.cc
> +++ b/plugins/experimental/background_fetch/background_fetch.cc
> @@ -129,7 +129,14 @@ read_config(char* config_file, BgFetchRuleMap* ri)
> if (cfg_name) {
> cfg_value = strtok_r(NULL, " ", &savePtr);
> if (cfg_value) {
> - TSDebug(PLUGIN_NAME, "adding background_fetch exclusion rule %d for %s:%s", exclude, cfg_name, cfg_value);
> + if (!strcmp(cfg_name, "Content-Length")) {
> + if ((cfg_value[0] != '<') && (cfg_value[0] != '>')) {
> + TSError("%s: invalid content-len condition %s, skipping config value", PLUGIN_NAME, cfg_value);
> + memset(buffer, 0, sizeof(buffer));
> + continue;
> + }
> + }
> + TSDebug(PLUGIN_NAME, "adding background_fetch exclusion rule %d for %s: %s", exclude, cfg_name, cfg_value);
> BgFetchRuleStruct ruleS = {exclude, cfg_name, cfg_value};
> bgFetchRuleMapP->insert(std::make_pair(index++, ruleS));
> } else {
> @@ -672,6 +679,20 @@ check_client_ip_configured(TSHttpTxn txnp, const char* cfg_ip)
> return false;
> }
>
> +static bool
> +check_content_length(const uint32_t len, const char* cfg_val)
> +{
> + uint32_t cfg_cont_len = atoi(&cfg_val[1]);
> +
> + if (cfg_val[0] == '<') {
> + return (len <= cfg_cont_len);
> + } else if (cfg_val[0] == '>') {
> + return (len >= cfg_cont_len);
> + } else {
> + TSError("%s: invalid content length condition %c", PLUGIN_NAME, cfg_val[0]);
> + return false;
> + }
> +}
>
> ///////////////////////////////////////////////////////////////////////////
> // Check if a header excludes us from running the background fetch
> @@ -694,8 +715,29 @@ check_field_configured(TSHttpTxn txnp, const char* field_name, const char* cfg_v
> bool hdr_found = false;
>
> TSMBuffer hdr_bufp;
> - TSMLoc req_hdrs;
> + TSMLoc resp_hdrs;
> +
> + if (!strcmp(field_name, "Content-Length")) {
> + if (TS_SUCCESS == TSHttpTxnServerRespGet(txnp, &hdr_bufp, &resp_hdrs)) {
> + TSMLoc loc = TSMimeHdrFieldFind(hdr_bufp, resp_hdrs, field_name, -1);
> + if (TS_NULL_MLOC != loc) {
> + uint32_t content_len = TSMimeHdrFieldValueUintGet(hdr_bufp, resp_hdrs, loc, 0 /* index */ );
> + if (check_content_length(content_len, cfg_val)) {
> + TSDebug(PLUGIN_NAME, "Found content-length match");
> + hdr_found = true;
> + }
> + TSHandleMLocRelease(hdr_bufp, resp_hdrs, loc);
> + } else {
> + TSDebug(PLUGIN_NAME, "No content-length field in resp");
> + }
> + } else {
> + TSError ("%s: Failed to get resp headers", PLUGIN_NAME);
> + }
> + TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, resp_hdrs);
> + return hdr_found;
> + }
>
> + TSMLoc req_hdrs;
> TSReturnCode ret = TSHttpTxnClientReqGet(txnp, &hdr_bufp, &req_hdrs);
>
> if (ret != TS_SUCCESS) {
> @@ -709,19 +751,18 @@ check_field_configured(TSHttpTxn txnp, const char* field_name, const char* cfg_v
> if (TS_NULL_MLOC != loc) {
> if (!strcmp(cfg_val, "*")) {
> TSDebug(PLUGIN_NAME, "Found %s wild card", field_name);
> - TSHandleMLocRelease(hdr_bufp, req_hdrs, loc);
> - TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, req_hdrs);
> - return true;
> - }
> - int val_len = 0;
> - const char *val_str = TSMimeHdrFieldValueStringGet(hdr_bufp, req_hdrs, loc, 0, &val_len);
> -
> - if (!val_str || val_len <= 0) {
> - TSDebug(PLUGIN_NAME,"invalid field");
> + hdr_found = true;
> } else {
> - TSDebug(PLUGIN_NAME, "comparing with %s", cfg_val);
> - if (NULL != strstr(val_str, cfg_val)) {
> - hdr_found = true;
> + int val_len = 0;
> + const char *val_str = TSMimeHdrFieldValueStringGet(hdr_bufp, req_hdrs, loc, 0, &val_len);
> +
> + if (!val_str || val_len <= 0) {
> + TSDebug(PLUGIN_NAME,"invalid field");
> + } else {
> + TSDebug(PLUGIN_NAME, "comparing with %s", cfg_val);
> + if (NULL != strstr(val_str, cfg_val)) {
> + hdr_found = true;
> + }
> }
> }
> TSHandleMLocRelease(hdr_bufp, req_hdrs, loc);
>
Re: git commit: Add support for Content-Length in background_fetch config
Posted by Leif Hedstrom <zw...@apache.org>.
> On Nov 3, 2014, at 12:24 PM, sudheerv@apache.org wrote:
>
> Repository: trafficserver
> Updated Branches:
> refs/heads/master 5e808b27b -> e655012e8
>
>
> Add support for Content-Length in background_fetch config
Does this have a Jira associated with it? It helps tracking what’s “New” in upcoming releases, amongst other forensic trails :)
— Leif
>
>
> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/e655012e
> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/e655012e
> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/e655012e
>
> Branch: refs/heads/master
> Commit: e655012e88572b6e9cfe2376c23276821e129ff9
> Parents: 5e808b2
> Author: Sudheer Vinukonda <su...@yahoo-inc.com>
> Authored: Mon Nov 3 19:24:14 2014 +0000
> Committer: Sudheer Vinukonda <su...@yahoo-inc.com>
> Committed: Mon Nov 3 19:24:14 2014 +0000
>
> ----------------------------------------------------------------------
> doc/reference/plugins/background_fetch.en.rst | 2 +
> .../background_fetch/background_fetch.cc | 69 ++++++++++++++++----
> 2 files changed, 57 insertions(+), 14 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e655012e/doc/reference/plugins/background_fetch.en.rst
> ----------------------------------------------------------------------
> diff --git a/doc/reference/plugins/background_fetch.en.rst b/doc/reference/plugins/background_fetch.en.rst
> index e1b4065..7826884 100644
> --- a/doc/reference/plugins/background_fetch.en.rst
> +++ b/doc/reference/plugins/background_fetch.en.rst
> @@ -74,8 +74,10 @@ background fetch based on any arbitrary header or client-ip::
> The contents of the config-file could be as below::
>
> include User-Agent ABCDEF
> + exclude User-Agent *
> exclude Content-Type text
> exclude X-Foo-Bar text
> + exclude Content-Length <1000
>
> The plugin also now supports per remap activation. To activate the plugin for
> a given remap, add the below on the remap line::
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e655012e/plugins/experimental/background_fetch/background_fetch.cc
> ----------------------------------------------------------------------
> diff --git a/plugins/experimental/background_fetch/background_fetch.cc b/plugins/experimental/background_fetch/background_fetch.cc
> index f48ea05..7763b82 100644
> --- a/plugins/experimental/background_fetch/background_fetch.cc
> +++ b/plugins/experimental/background_fetch/background_fetch.cc
> @@ -129,7 +129,14 @@ read_config(char* config_file, BgFetchRuleMap* ri)
> if (cfg_name) {
> cfg_value = strtok_r(NULL, " ", &savePtr);
> if (cfg_value) {
> - TSDebug(PLUGIN_NAME, "adding background_fetch exclusion rule %d for %s:%s", exclude, cfg_name, cfg_value);
> + if (!strcmp(cfg_name, "Content-Length")) {
> + if ((cfg_value[0] != '<') && (cfg_value[0] != '>')) {
> + TSError("%s: invalid content-len condition %s, skipping config value", PLUGIN_NAME, cfg_value);
> + memset(buffer, 0, sizeof(buffer));
> + continue;
> + }
> + }
> + TSDebug(PLUGIN_NAME, "adding background_fetch exclusion rule %d for %s: %s", exclude, cfg_name, cfg_value);
> BgFetchRuleStruct ruleS = {exclude, cfg_name, cfg_value};
> bgFetchRuleMapP->insert(std::make_pair(index++, ruleS));
> } else {
> @@ -672,6 +679,20 @@ check_client_ip_configured(TSHttpTxn txnp, const char* cfg_ip)
> return false;
> }
>
> +static bool
> +check_content_length(const uint32_t len, const char* cfg_val)
> +{
> + uint32_t cfg_cont_len = atoi(&cfg_val[1]);
> +
> + if (cfg_val[0] == '<') {
> + return (len <= cfg_cont_len);
> + } else if (cfg_val[0] == '>') {
> + return (len >= cfg_cont_len);
> + } else {
> + TSError("%s: invalid content length condition %c", PLUGIN_NAME, cfg_val[0]);
> + return false;
> + }
> +}
>
> ///////////////////////////////////////////////////////////////////////////
> // Check if a header excludes us from running the background fetch
> @@ -694,8 +715,29 @@ check_field_configured(TSHttpTxn txnp, const char* field_name, const char* cfg_v
> bool hdr_found = false;
>
> TSMBuffer hdr_bufp;
> - TSMLoc req_hdrs;
> + TSMLoc resp_hdrs;
> +
> + if (!strcmp(field_name, "Content-Length")) {
> + if (TS_SUCCESS == TSHttpTxnServerRespGet(txnp, &hdr_bufp, &resp_hdrs)) {
> + TSMLoc loc = TSMimeHdrFieldFind(hdr_bufp, resp_hdrs, field_name, -1);
> + if (TS_NULL_MLOC != loc) {
> + uint32_t content_len = TSMimeHdrFieldValueUintGet(hdr_bufp, resp_hdrs, loc, 0 /* index */ );
> + if (check_content_length(content_len, cfg_val)) {
> + TSDebug(PLUGIN_NAME, "Found content-length match");
> + hdr_found = true;
> + }
> + TSHandleMLocRelease(hdr_bufp, resp_hdrs, loc);
> + } else {
> + TSDebug(PLUGIN_NAME, "No content-length field in resp");
> + }
> + } else {
> + TSError ("%s: Failed to get resp headers", PLUGIN_NAME);
> + }
> + TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, resp_hdrs);
> + return hdr_found;
> + }
>
> + TSMLoc req_hdrs;
> TSReturnCode ret = TSHttpTxnClientReqGet(txnp, &hdr_bufp, &req_hdrs);
>
> if (ret != TS_SUCCESS) {
> @@ -709,19 +751,18 @@ check_field_configured(TSHttpTxn txnp, const char* field_name, const char* cfg_v
> if (TS_NULL_MLOC != loc) {
> if (!strcmp(cfg_val, "*")) {
> TSDebug(PLUGIN_NAME, "Found %s wild card", field_name);
> - TSHandleMLocRelease(hdr_bufp, req_hdrs, loc);
> - TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, req_hdrs);
> - return true;
> - }
> - int val_len = 0;
> - const char *val_str = TSMimeHdrFieldValueStringGet(hdr_bufp, req_hdrs, loc, 0, &val_len);
> -
> - if (!val_str || val_len <= 0) {
> - TSDebug(PLUGIN_NAME,"invalid field");
> + hdr_found = true;
> } else {
> - TSDebug(PLUGIN_NAME, "comparing with %s", cfg_val);
> - if (NULL != strstr(val_str, cfg_val)) {
> - hdr_found = true;
> + int val_len = 0;
> + const char *val_str = TSMimeHdrFieldValueStringGet(hdr_bufp, req_hdrs, loc, 0, &val_len);
> +
> + if (!val_str || val_len <= 0) {
> + TSDebug(PLUGIN_NAME,"invalid field");
> + } else {
> + TSDebug(PLUGIN_NAME, "comparing with %s", cfg_val);
> + if (NULL != strstr(val_str, cfg_val)) {
> + hdr_found = true;
> + }
> }
> }
> TSHandleMLocRelease(hdr_bufp, req_hdrs, loc);
>