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 23:24:08 UTC
svn commit: r780836 -
/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java
Author: veithen
Date: Mon Jun 1 21:24:07 2009
New Revision: 780836
URL: http://svn.apache.org/viewvc?rev=780836&view=rev
Log:
Fixed keep-alive issue.
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java
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=780836&r1=780835&r2=780836&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 21:24:07 2009
@@ -21,6 +21,7 @@
import org.apache.ws.commons.tcpmon.core.filter.HeaderParser;
import org.apache.ws.commons.tcpmon.core.filter.ReadOnlyFilterWrapper;
import org.apache.ws.commons.tcpmon.core.filter.Stream;
+import org.apache.ws.commons.tcpmon.core.filter.StreamException;
import org.apache.ws.commons.tcpmon.core.filter.StreamFilter;
import org.apache.ws.commons.tcpmon.core.filter.StreamUtil;
import org.apache.ws.commons.tcpmon.core.filter.mime.ContentFilterFactory;
@@ -87,8 +88,11 @@
}
break;
}
- default:
+ case STATE_CONTENT:
stream.skipAll();
+ break;
+ case STATE_COMPLETE:
+ throw new StreamException("Received content after request or response was complete");
}
}
}
@@ -98,6 +102,7 @@
protected abstract void completed();
private void processHeaders(HeaderParser headerParser, Stream stream) {
+ boolean hasEntity = false;
boolean discardHeaders = false;
StreamFilter transferDecoder = null;
StreamFilter transferEncoder = null;
@@ -107,16 +112,19 @@
String name = header.getName();
String value = header.getValue();
if (name.equalsIgnoreCase("Content-Length")) {
+ hasEntity = true;
transferDecoder = new IdentityDecoder(Integer.parseInt(value), this);
transferEncoder = new IdentityEncoder(headers);
discardHeaders = true;
} else if (name.equalsIgnoreCase("Transfer-Encoding")) {
+ hasEntity = true;
if (value.equals("chunked")) {
transferDecoder = new ChunkedDecoder(this);
transferEncoder = new ChunkedEncoder();
discardHeaders = false;
}
} else if (name.equalsIgnoreCase("Content-Type")) {
+ hasEntity = true;
if (contentFilterFactory != null) {
contentFilterChain = contentFilterFactory.getContentFilterChain(value);
}
@@ -135,18 +143,22 @@
headerParser.skip();
}
- if (contentFilterChain != null) {
- if (transferEncoder != null && !decodeTransferEncoding) {
- stream.pushFilter(transferEncoder);
+ if (hasEntity) {
+ if (contentFilterChain != null) {
+ if (transferEncoder != null && !decodeTransferEncoding) {
+ stream.pushFilter(transferEncoder);
+ }
+ for (int i=contentFilterChain.length-1; i>=0; i--) {
+ stream.pushFilter(contentFilterChain[i]);
+ }
}
- for (int i=contentFilterChain.length-1; i>=0; i--) {
- stream.pushFilter(contentFilterChain[i]);
+ if (transferDecoder != null) {
+ stream.pushFilter(decodeTransferEncoding || contentFilterChain != null
+ ? transferDecoder
+ : new ReadOnlyFilterWrapper(transferDecoder));
}
- }
- if (transferDecoder != null) {
- stream.pushFilter(decodeTransferEncoding || contentFilterChain != null
- ? transferDecoder
- : new ReadOnlyFilterWrapper(transferDecoder));
+ } else {
+ onComplete();
}
}