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));
}
}