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/06/01 14:56:08 UTC

svn commit: r780638 - in /webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src: main/java/org/apache/ws/commons/tcpmon/core/engine/ main/java/org/apache/ws/commons/tcpmon/core/filter/http/ test/java/org/apache/ws/commons/tcpmon/core/engine/

Author: veithen
Date: Mon Jun  1 12:56:07 2009
New Revision: 780638

URL: http://svn.apache.org/viewvc?rev=780638&view=rev
Log:
Some small hacks to get keep-alive working.

Modified:
    webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/Connection.java
    webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/SocketRR.java
    webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java
    webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTestBase.java

Modified: webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/Connection.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/Connection.java?rev=780638&r1=780637&r2=780638&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/Connection.java (original)
+++ webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/Connection.java Mon Jun  1 12:56:07 2009
@@ -23,6 +23,7 @@
 import org.apache.ws.commons.tcpmon.core.filter.http.HttpProxyClientHandler;
 import org.apache.ws.commons.tcpmon.core.filter.http.HttpProxyServerHandler;
 import org.apache.ws.commons.tcpmon.core.filter.http.HttpRequestFilter;
+import org.apache.ws.commons.tcpmon.core.filter.http.HttpResponseFilter;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -152,6 +153,8 @@
             }
             
             Pipeline responsePipeline = new Pipeline();
+            HttpResponseFilter responseFilter = new HttpResponseFilter(false);
+            responsePipeline.addFilter(responseFilter);
             config.applyResponseFilters(responsePipeline);
             if (tmpOut1 != null) {
                 responsePipeline.addFilter(new Tee(tmpOut1));
@@ -164,10 +167,10 @@
             }
             
             // this is the channel to the endpoint
-            rr1 = new SocketRR(this, inSocket, tmpIn1, outSocket, tmpOut2, requestPipeline);
+            rr1 = new SocketRR(this, inSocket, tmpIn1, outSocket, tmpOut2, requestPipeline, requestFilter);
 
             // this is the channel from the endpoint
-            rr2 = new SocketRR(this, outSocket, outSocket.getInputStream(), inSocket, tmpOut1, responsePipeline);
+            rr2 = new SocketRR(this, outSocket, outSocket.getInputStream(), inSocket, tmpOut1, responsePipeline, responseFilter);
             
             rr1.start();
             rr2.start();

Modified: webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/SocketRR.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/SocketRR.java?rev=780638&r1=780637&r2=780638&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/SocketRR.java (original)
+++ webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/engine/SocketRR.java Mon Jun  1 12:56:07 2009
@@ -17,6 +17,7 @@
 package org.apache.ws.commons.tcpmon.core.engine;
 
 import org.apache.ws.commons.tcpmon.core.filter.Pipeline;
+import org.apache.ws.commons.tcpmon.core.filter.http.HttpFilter;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -62,6 +63,8 @@
     
     private final Pipeline pipeline;
     
+    private final HttpFilter httpFilter;
+    
     /**
      * Constructor SocketRR
      *
@@ -79,13 +82,15 @@
      */
     public SocketRR(Connection connection, Socket inputSocket,
                     InputStream inputStream, Socket outputSocket,
-                    OutputStream outputStream, Pipeline pipeline) {
+                    OutputStream outputStream, Pipeline pipeline,
+                    HttpFilter httpFilter) {
         this.connection = connection;
         inSocket = inputSocket;
         in = inputStream;
         outSocket = outputSocket;
         out = outputStream;
         this.pipeline = pipeline;
+        this.httpFilter = httpFilter;
     }
 
     /**
@@ -116,6 +121,11 @@
                     // reset) as the end of stream and silently discard the exception.
                     c = -1;
                 }
+                // This is a very naive way to support keep-alive: just close the connection after
+                // the request or response
+                if (httpFilter.isComplete()) {
+                    c = -1;
+                }
                 elapsed = System.currentTimeMillis() - start;
             } while (c != -1);
         } catch (Exception e) {

Modified: webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java?rev=780638&r1=780637&r2=780638&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java (original)
+++ webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java Mon Jun  1 12:56:07 2009
@@ -36,7 +36,7 @@
     private static final int STATE_FIRST_LINE = 0;
     private static final int STATE_HEADER = 1;
     private static final int STATE_CONTENT = 2;
-    private static final int STATE_COMPLETE = 2;
+    private static final int STATE_COMPLETE = 3;
 
     private final HeaderProcessor headerProcessor = new HeaderProcessor();
     private final boolean decodeTransferEncoding;
@@ -61,6 +61,10 @@
         }
         this.contentFilterFactory = contentFilterFactory;
     }
+    
+    public boolean isComplete() {
+        return state == STATE_COMPLETE;
+    }
 
     public void invoke(Stream stream) {
         while (stream.available() > 0) {

Modified: webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTestBase.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTestBase.java?rev=780638&r1=780637&r2=780638&view=diff
==============================================================================
--- webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTestBase.java (original)
+++ webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTestBase.java Mon Jun  1 12:56:07 2009
@@ -16,8 +16,11 @@
 
 package org.apache.ws.commons.tcpmon.core.engine;
 
+import java.io.InputStream;
+
 import junit.framework.TestCase;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
@@ -26,6 +29,7 @@
 import org.apache.http.conn.params.ConnRoutePNames;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.params.CoreProtocolPNames;
 import org.mortbay.http.HttpContext;
 import org.mortbay.http.SocketListener;
 import org.mortbay.jetty.Server;
@@ -67,6 +71,8 @@
         } else {
             baseUri = "http://localhost:" + INTERCEPTOR_PORT;
         }
+        // We don't handle 100 continue yet
+        client.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
     }
 
     protected void tearDown() throws Exception {
@@ -76,10 +82,20 @@
 
     protected abstract InterceptorConfiguration buildInterceptorConfiguration();
     
+    private static String getResponseAsString(HttpResponse response) throws Exception {
+        InputStream in = response.getEntity().getContent();
+        try {
+            return IOUtils.toString(in, "UTF-8");
+        } finally {
+            in.close();
+        }
+    }
+    
     public void testGet() throws Exception {
         HttpGet request = new HttpGet(baseUri + "/test");
         HttpResponse response = client.execute(request);
         assertEquals(200, response.getStatusLine().getStatusCode());
+        assertEquals("test", getResponseAsString(response));
     }
     
     public void testPost() throws Exception {
@@ -87,5 +103,16 @@
         request.setEntity(new StringEntity("test"));
         HttpResponse response = client.execute(request);
         assertEquals(200, response.getStatusLine().getStatusCode());
+        assertEquals("test", getResponseAsString(response));
+    }
+    
+    public void testGetWithKeepAlive() throws Exception {
+        HttpGet request = new HttpGet(baseUri + "/test");
+        HttpResponse response = client.execute(request);
+        assertEquals(200, response.getStatusLine().getStatusCode());
+        assertEquals("test", getResponseAsString(response));
+        response = client.execute(request);
+        assertEquals(200, response.getStatusLine().getStatusCode());
+        assertEquals("test", getResponseAsString(response));
     }
 }