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];
 


Reply via email to