Author: zwoop
Date: Sat Feb 19 17:22:33 2011
New Revision: 1072402
URL: http://svn.apache.org/viewvc?rev=1072402&view=rev
Log:
TS-590 Migrate plugin to the new APIs, also some bug fixes
Modified:
trafficserver/plugins/header_filter/Makefile
trafficserver/plugins/header_filter/header_filter.cc
trafficserver/plugins/header_filter/rules.cc
Modified: trafficserver/plugins/header_filter/Makefile
URL:
http://svn.apache.org/viewvc/trafficserver/plugins/header_filter/Makefile?rev=1072402&r1=1072401&r2=1072402&view=diff
==============================================================================
--- trafficserver/plugins/header_filter/Makefile (original)
+++ trafficserver/plugins/header_filter/Makefile Sat Feb 19 17:22:33 2011
@@ -14,9 +14,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+CXXFLAGS=-O3 -Wall
all: header_filter.cc rules.cc
- tsxs -C $? -o header_filter.so
+ tsxs -v -C $? -o header_filter.so
install:
tsxs -i -o header_filter.so
Modified: trafficserver/plugins/header_filter/header_filter.cc
URL:
http://svn.apache.org/viewvc/trafficserver/plugins/header_filter/header_filter.cc?rev=1072402&r1=1072401&r2=1072402&view=diff
==============================================================================
--- trafficserver/plugins/header_filter/header_filter.cc (original)
+++ trafficserver/plugins/header_filter/header_filter.cc Sat Feb 19 17:22:33
2011
@@ -51,19 +51,19 @@ cont_header_filter(TSCont contp, TSEvent
// Get the resources necessary to process this event
switch (event) {
case TS_EVENT_HTTP_READ_REQUEST_HDR:
- if (TSHttpTxnClientReqGet(txnp, &reqp, &hdr_loc))
+ if (TS_SUCCESS == TSHttpTxnClientReqGet(txnp, &reqp, &hdr_loc))
hook = TS_HTTP_READ_REQUEST_HDR_HOOK;
break;
case TS_EVENT_HTTP_SEND_REQUEST_HDR:
- if (TSHttpTxnServerReqGet(txnp, &reqp, &hdr_loc))
+ if (TS_SUCCESS == TSHttpTxnServerReqGet(txnp, &reqp, &hdr_loc))
hook = TS_HTTP_SEND_REQUEST_HDR_HOOK;
break;
case TS_EVENT_HTTP_READ_RESPONSE_HDR:
- if (TSHttpTxnServerRespGet(txnp, &reqp, &hdr_loc))
+ if (TS_SUCCESS == TSHttpTxnServerRespGet(txnp, &reqp, &hdr_loc))
hook = TS_HTTP_READ_RESPONSE_HDR_HOOK;
break;
case TS_EVENT_HTTP_SEND_RESPONSE_HDR:
- if (TSHttpTxnClientRespGet(txnp, &reqp, &hdr_loc))
+ if (TS_SUCCESS == TSHttpTxnClientRespGet(txnp, &reqp, &hdr_loc))
hook = TS_HTTP_SEND_RESPONSE_HDR_HOOK;
break;
default:
@@ -78,11 +78,10 @@ cont_header_filter(TSCont contp, TSEvent
global.execute(reqp, hdr_loc, hook);
if (TS_HTTP_READ_REQUEST_HDR_HOOK != hook) { // Don't run the hook handled
by remap plugin
- if (TS_SUCCESS == TSHttpTxnArgGet(txnp, arg_idx, (void**)(&from_remap))
&& from_remap) {
+ if ((from_remap = (Rules*)TSHttpTxnArgGet(txnp, arg_idx))) {
from_remap->execute(reqp, hdr_loc, hook);
}
}
-
TSHandleMLocRelease(reqp, TS_NULL_MLOC, hdr_loc);
}
@@ -195,7 +194,7 @@ tsremap_remap(ihandle ih, rhandle rh, TS
TSMLoc hdr_loc;
TSHttpTxnArgSet(txnp, arg_idx, static_cast<void*>(ih)); // Save for later
hooks
- if (TSHttpTxnClientReqGet(txnp, &reqp, &hdr_loc)) {
+ if (TS_SUCCESS == TSHttpTxnClientReqGet(txnp, &reqp, &hdr_loc)) {
confp->execute(reqp, hdr_loc, TS_HTTP_READ_REQUEST_HDR_HOOK);
TSHandleMLocRelease(reqp, TS_NULL_MLOC, hdr_loc);
}
Modified: trafficserver/plugins/header_filter/rules.cc
URL:
http://svn.apache.org/viewvc/trafficserver/plugins/header_filter/rules.cc?rev=1072402&r1=1072401&r2=1072402&view=diff
==============================================================================
--- trafficserver/plugins/header_filter/rules.cc (original)
+++ trafficserver/plugins/header_filter/rules.cc Sat Feb 19 17:22:33 2011
@@ -47,15 +47,13 @@ add_header(TSMBuffer& reqp, TSMLoc& hdr_
if (val_len <= 0) {
TSDebug(PLUGIN_NAME, "\tWould set header %s to an empty value, skipping",
hdr);
} else {
- TSMLoc new_field = TSMimeHdrFieldCreate(reqp, hdr_loc);
+ TSMLoc new_field;
- if (new_field) {
- TSMimeHdrFieldNameSet(reqp, hdr_loc, new_field, hdr, hdr_len);
- TSMimeHdrFieldValueStringInsert(reqp, hdr_loc, new_field, -1, val,
val_len);
- TSMimeHdrFieldAppend(reqp, hdr_loc, new_field);
+ if (TS_SUCCESS == TSMimeHdrFieldCreateNamed(reqp, hdr_loc, hdr, hdr_len,
&new_field)) {
+ if (TS_SUCCESS == TSMimeHdrFieldValueStringInsert(reqp, hdr_loc,
new_field, -1, val, val_len))
+ if (TS_SUCCESS == TSMimeHdrFieldAppend(reqp, hdr_loc, new_field))
+ TSDebug(PLUGIN_NAME, "\tAdded header %s: %s", hdr, val);
TSHandleMLocRelease(reqp, hdr_loc, new_field);
-
- TSDebug(PLUGIN_NAME, "\tAdded header %s: %s", hdr, val);
}
}
}
@@ -71,12 +69,12 @@ RulesEntry::execute(TSMBuffer& reqp, TSM
while (field) {
TSMLoc tmp;
- const char* val;
int val_len = 0;
+ const char* val = NULL;
bool nuke = false;
-
- if ((_q_type != QUAL_NONE) && (TSMimeHdrFieldValueStringGet(reqp,
hdr_loc, field, 0, &val, &val_len) != TS_SUCCESS))
- val_len = 0;
+
+ if (_q_type != QUAL_NONE)
+ val = TSMimeHdrFieldValueStringGet(reqp, hdr_loc, field, 0, &val_len);
switch (_q_type) {
case QUAL_NONE:
@@ -128,8 +126,8 @@ RulesEntry::execute(TSMBuffer& reqp, TSM
if (first_set) {
nuke = false;
first_set = false;
- TSMimeHdrFieldValueStringSet(reqp, hdr_loc, field, -1, _qualifier,
_q_len);
- TSDebug(PLUGIN_NAME, "\tSet header %s: %s", _header, _qualifier);
+ if (TS_SUCCESS == TSMimeHdrFieldValueStringSet(reqp, hdr_loc, field,
-1, _qualifier, _q_len))
+ TSDebug(PLUGIN_NAME, "\tSet header: %s: %s", _header, _qualifier);
} else {
// Nuke all other "duplicates" of this header
nuke = true;
@@ -143,16 +141,12 @@ RulesEntry::execute(TSMBuffer& reqp, TSM
if (_inverse)
nuke = !nuke;
if (nuke) {
- TSDebug(PLUGIN_NAME, "\tDeleting header %.*s", _h_len, _header);
- TSMimeHdrFieldDestroy(reqp, hdr_loc, field);
+ if (TS_SUCCESS == TSMimeHdrFieldDestroy(reqp, hdr_loc, field))
+ TSDebug(PLUGIN_NAME, "\tDeleting header %.*s", _h_len, _header);
}
TSHandleMLocRelease(reqp, hdr_loc, field);
field = tmp;
}
-
- if (first_set) { // We still didn't replace a value
- add_header(reqp, hdr_loc, _header, _h_len, _qualifier, _q_len);
- }
}
}
@@ -240,34 +234,34 @@ Rules::parse_file(const char* filename)
pos1 = line.find_first_of(QUAL_DELIMITERS, pos1+1);
}
if (pos1 != std::string::npos) {
- const char* trailer;
+ char trailer = ' ';
switch (line[pos1]) {
case '/':
type = QUAL_REGEX;
- trailer = "/";
+ trailer = '/';
break;
case '"':
type = QUAL_STRING;
- trailer = "\"";
+ trailer = '"';
break;
case '*':
type = QUAL_POSTFIX;
- trailer = "]";
+ trailer = ']';
break;
case '[':
type = QUAL_PREFIX;
- trailer = "*";
+ trailer = '*';
break;
case '+':
type = QUAL_ADD;
inverse = false; // Can never inverse the add operator
- trailer = "+";
+ trailer = '+';
break;
case '=':
type = QUAL_SET;
inverse = false; // Can never inverse the set operator
- trailer = "=";
+ trailer = '=';
break;
default:
// TODO: Error case?
@@ -306,6 +300,7 @@ void
Rules::execute(TSMBuffer& reqp, TSMLoc& hdr_loc, const TSHttpHookID hook) const
{
TSAssert(supported_hook(hook));
+
if (_entries[hook]) {
RulesEntry* n = _entries[hook];