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