first chunk - make sure END gets called properly, if the event was closed
authorfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 17 Jul 2008 00:13:37 +0000 (00:13 +0000)
committerfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 17 Jul 2008 00:13:37 +0000 (00:13 +0000)
second chunk - if the POST body is x-www-form-urlencoded, request.getAvailable() returns 0 for IdentityInputFilter
so we still need to invoke READ event if there is a body, and it hasn't been processes by the servlet

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@677473 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/connector/CoyoteAdapter.java
java/org/apache/catalina/connector/Request.java

index b06c5fb..f29564e 100644 (file)
@@ -206,6 +206,13 @@ public class CoyoteAdapter
                     connector.getContainer().getPipeline().getFirst().event(request, response, request.getEvent());
                 }
                 if (response.isClosed() || !request.isComet()) {
+                    if (status==SocketStatus.OPEN) {
+                        //CometEvent.close was called during an event.
+                        request.getEvent().setEventType(CometEvent.EventType.END);
+                        request.getEvent().setEventSubType(null);
+                        error = true;
+                        connector.getContainer().getPipeline().getFirst().event(request, response, request.getEvent());
+                    }
                     res.action(ActionCode.ACTION_COMET_END, null);
                 } else if (!error && read && request.getAvailable()) {
                     // If this was a read and not all bytes have been read, or if no data
@@ -287,7 +294,7 @@ public class CoyoteAdapter
 
                 if (request.isComet()) {
                     if (!response.isClosed() && !response.isError()) {
-                        if (request.getAvailable()) {
+                        if (request.getAvailable() || (request.getContentLength() > 0 && (!request.isParametersParsed()))) {
                             // Invoke a read event right away if there are available bytes
                             if (event(req, res, SocketStatus.OPEN)) {
                                 comet = true;
index 2b3ed3f..b53d646 100644 (file)
@@ -2248,6 +2248,12 @@ public class Request
         this.comet = comet;
     }
 
+    /**
+     * return true if we have parsed parameters
+     */
+    public boolean isParametersParsed() {
+        return parametersParsed;
+    }    
     
     /**
      * Return true if bytes are available.