You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by ve...@apache.org on 2009/01/06 19:42:29 UTC

svn commit: r732047 - in /webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core: ./ filter/

Author: veithen
Date: Tue Jan  6 10:42:29 2009
New Revision: 732047

URL: http://svn.apache.org/viewvc?rev=732047&view=rev
Log:
Refactoring and optimization of HttpRequestFilter.

Added:
    webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/AbstractHttpRequestHandler.java   (with props)
    webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestHandler.java   (with props)
Modified:
    webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/AbstractConnection.java
    webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpHeaderRewriter.java
    webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyClientHandler.java
    webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyServerHandler.java
    webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestFilter.java

Modified: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/AbstractConnection.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/AbstractConnection.java?rev=732047&r1=732046&r2=732047&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/AbstractConnection.java (original)
+++ webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/AbstractConnection.java Tue Jan  6 10:42:29 2009
@@ -22,6 +22,7 @@
 import org.apache.ws.commons.tcpmon.core.filter.HttpHeaderRewriter;
 import org.apache.ws.commons.tcpmon.core.filter.HttpProxyClientHandler;
 import org.apache.ws.commons.tcpmon.core.filter.HttpProxyServerHandler;
+import org.apache.ws.commons.tcpmon.core.filter.HttpRequestFilter;
 import org.apache.ws.commons.tcpmon.core.filter.Pipeline;
 import org.apache.ws.commons.tcpmon.core.filter.RequestLineExtractor;
 import org.apache.ws.commons.tcpmon.core.filter.StreamException;
@@ -152,8 +153,10 @@
                     setRequest(requestLine);
                 }
             });
+            HttpRequestFilter requestFilter = new HttpRequestFilter();
+            requestPipeline.addFilter(requestFilter);
             if (config.isProxy()) {
-                requestPipeline.addFilter(new HttpProxyServerHandler() {
+                requestFilter.addHandler(new HttpProxyServerHandler() {
                     protected void handleConnection(String host, int port) {
                         try {
                             outSocket = new Socket(host, port);
@@ -163,10 +166,10 @@
                     }
                 });
             } else if (HTTPProxyHost != null) {
-                requestPipeline.addFilter(new HttpProxyClientHandler(targetHost, targetPort));
+                requestFilter.addHandler(new HttpProxyClientHandler(targetHost, targetPort));
                 outSocket = new Socket(HTTPProxyHost, HTTPProxyPort);
             } else {
-                requestPipeline.addFilter(new HttpHeaderRewriter("Host", targetHost + ":" + targetPort));
+                requestFilter.addHandler(new HttpHeaderRewriter("Host", targetHost + ":" + targetPort));
                 outSocket = new Socket(targetHost, targetPort);
             }
             requestPipeline.addFilter(config.getSlowLink());

Added: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/AbstractHttpRequestHandler.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/AbstractHttpRequestHandler.java?rev=732047&view=auto
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/AbstractHttpRequestHandler.java (added)
+++ webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/AbstractHttpRequestHandler.java Tue Jan  6 10:42:29 2009
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ws.commons.tcpmon.core.filter;
+
+/**
+ * Abstract implementation of {@link HttpRequestHandler} with default behavior.
+ */
+public abstract class AbstractHttpRequestHandler implements HttpRequestHandler {
+    public String processRequest(String request) {
+        return request;
+    }
+
+    public String processHeader(String name, String value) {
+        return value;
+    }
+}

Propchange: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/AbstractHttpRequestHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpHeaderRewriter.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpHeaderRewriter.java?rev=732047&r1=732046&r2=732047&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpHeaderRewriter.java (original)
+++ webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpHeaderRewriter.java Tue Jan  6 10:42:29 2009
@@ -17,9 +17,9 @@
 package org.apache.ws.commons.tcpmon.core.filter;
 
 /**
- * Filter that replaces the value of a given HTTP header.
+ * Handler that replaces the value of a given HTTP header.
  */
-public class HttpHeaderRewriter extends HttpRequestFilter {
+public class HttpHeaderRewriter extends AbstractHttpRequestHandler {
     private final String headerName;
     private final String newValue;
     
@@ -28,7 +28,7 @@
         this.newValue = newValue;
     }
 
-    protected String processHeader(String name, String value) {
+    public String processHeader(String name, String value) {
         return headerName.equals(name) ? newValue : value;
     }
 }

Modified: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyClientHandler.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyClientHandler.java?rev=732047&r1=732046&r2=732047&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyClientHandler.java (original)
+++ webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyClientHandler.java Tue Jan  6 10:42:29 2009
@@ -17,9 +17,9 @@
 package org.apache.ws.commons.tcpmon.core.filter;
 
 /**
- * Filter that rewrites a plain HTTP request to an HTTP proxy request.
+ * Handler that rewrites a plain HTTP request to an HTTP proxy request.
  */
-public class HttpProxyClientHandler extends HttpRequestFilter {
+public class HttpProxyClientHandler extends AbstractHttpRequestHandler {
     private final String targetHost;
     private final int targetPort;
     
@@ -28,7 +28,7 @@
         this.targetPort = targetPort;
     }
     
-    protected String processRequest(String request) {
+    public String processRequest(String request) {
         String[] parts = request.split(" ");
         return parts[0] + " http://" + targetHost + ":" + targetPort + parts[1] + " " + parts[2];
     }

Modified: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyServerHandler.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyServerHandler.java?rev=732047&r1=732046&r2=732047&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyServerHandler.java (original)
+++ webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpProxyServerHandler.java Tue Jan  6 10:42:29 2009
@@ -20,10 +20,10 @@
 import java.net.URL;
 
 /**
- * Filter that rewrites an HTTP proxy request to a plain HTTP request.
+ * Handler that rewrites an HTTP proxy request to a plain HTTP request.
  */
-public abstract class HttpProxyServerHandler extends HttpRequestFilter {
-    protected String processRequest(String request) {
+public abstract class HttpProxyServerHandler extends AbstractHttpRequestHandler {
+    public String processRequest(String request) {
         String[] parts = request.split(" ");
         URL url;
         try {

Modified: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestFilter.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestFilter.java?rev=732047&r1=732046&r2=732047&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestFilter.java (original)
+++ webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestFilter.java Tue Jan  6 10:42:29 2009
@@ -17,17 +17,26 @@
 package org.apache.ws.commons.tcpmon.core.filter;
 
 import java.io.UnsupportedEncodingException;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
 
 /**
- * Abstract filter that allows HTTP request rewriting.
+ * Filter that parses HTTP requests and invokes a set of {@link HTTPRequestHandler}
+ * implementation.
  */
-public abstract class HttpRequestFilter implements StreamFilter {
+public class HttpRequestFilter implements StreamFilter {
     private static final int STATE_REQUEST = 0;
     private static final int STATE_HEADER = 1;
     private static final int STATE_DONE = 2;
     
+    private List handlers = new LinkedList();
     private int state = STATE_REQUEST;
-    
+
+    public void addHandler(HttpRequestHandler handler) {
+        handlers.add(handler);
+    }
+
     public void invoke(Stream stream) {
         while (stream.available() > 0) {
             switch (state) {
@@ -102,11 +111,20 @@
         stream.insert(b, 0, b.length);
     }
     
-    protected String processRequest(String request) {
+    private String processRequest(String request) {
+        for (Iterator it = handlers.iterator(); it.hasNext(); ) {
+            request = ((HttpRequestHandler)it.next()).processRequest(request);
+        }
         return request;
     }
     
-    protected String processHeader(String name, String value) {
+    private String processHeader(String name, String value) {
+        for (Iterator it = handlers.iterator(); it.hasNext(); ) {
+            value = ((HttpRequestHandler)it.next()).processHeader(name, value);
+            if (value == null) {
+                break;
+            }
+        }
         return value;
     }
 }

Added: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestHandler.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestHandler.java?rev=732047&view=auto
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestHandler.java (added)
+++ webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestHandler.java Tue Jan  6 10:42:29 2009
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ws.commons.tcpmon.core.filter;
+
+/**
+ * Interface implemented by handlers invoked by {@link HttpRequestFilter}.
+ */
+public interface HttpRequestHandler {
+    String processRequest(String request);
+    String processHeader(String name, String value);
+}

Propchange: webservices/commons/trunk/modules/tcpmon/src/org/apache/ws/commons/tcpmon/core/filter/HttpRequestHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native