You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/06/09 15:43:16 UTC

svn commit: r1684421 - in /tomcat/trunk: java/org/apache/coyote/http2/Http2Parser.java java/org/apache/coyote/http2/StreamStateMachine.java test/org/apache/coyote/http2/TestHttp2Section_5_1.java

Author: markt
Date: Tue Jun  9 13:43:15 2015
New Revision: 1684421

URL: http://svn.apache.org/r1684421
Log:
Enable ignored test now handling for stream errors has been implemented.
More clarifications around sub-states for closed streams (these need some unit tests)

Modified:
    tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java
    tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java
    tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java

Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java?rev=1684421&r1=1684420&r2=1684421&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java Tue Jun  9 13:43:15 2015
@@ -236,6 +236,8 @@ class Http2Parser {
 
         long errorCode = ByteUtil.getFourBytes(payload, 0);
         output.reset(streamId, errorCode);
+        headersCurrentStream = -1;
+        headersEndStream = false;
     }
 
 
@@ -427,7 +429,9 @@ class Http2Parser {
                         connectionId, Integer.toString(headersCurrentStream),
                         Integer.toString(streamId)), Error.COMPRESSION_ERROR);
             }
-            if (frameType != FrameType.CONTINUATION) {
+            if (frameType == FrameType.RST) {
+                // NO-OP: RST is OK here
+            } else if (frameType != FrameType.CONTINUATION) {
                 throw new ConnectionError(sm.getString("http2Parser.headers.wrongFrameType",
                         connectionId, Integer.toString(headersCurrentStream),
                         frameType), Error.COMPRESSION_ERROR);

Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java?rev=1684421&r1=1684420&r2=1684421&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java Tue Jun  9 13:43:15 2015
@@ -83,12 +83,12 @@ public class StreamStateMachine {
 
 
     public synchronized void sendReset() {
-        stateChange(state, State.CLOSED_TX);
+        stateChange(state, State.CLOSED_RST_TX);
     }
 
 
     public synchronized void receiveReset() {
-        stateChange(state, State.CLOSED_RST);
+        stateChange(state, State.CLOSED_RST_RX);
     }
 
 
@@ -140,9 +140,13 @@ public class StreamStateMachine {
         HALF_CLOSED_REMOTE (true,  Error.STREAM_CLOSED, FrameType.PRIORITY, FrameType.RST,
                                     FrameType.WINDOW_UPDATE),
         CLOSED_RX          (true,  Error.STREAM_CLOSED, FrameType.PRIORITY),
-        CLOSED_RST         (false, Error.STREAM_CLOSED, FrameType.PRIORITY),
         CLOSED_TX          (true,  Error.STREAM_CLOSED, FrameType.PRIORITY, FrameType.RST,
-                                    FrameType.WINDOW_UPDATE);
+                                    FrameType.WINDOW_UPDATE),
+        CLOSED_RST_RX      (false, Error.STREAM_CLOSED, FrameType.PRIORITY),
+        CLOSED_RST_TX      (false, Error.STREAM_CLOSED, FrameType.DATA, FrameType.HEADERS,
+                                    FrameType.PRIORITY, FrameType.RST, FrameType.PUSH_PROMISE,
+                                    FrameType.WINDOW_UPDATE),
+        CLOSED_FINAL       (true,  Error.PROTOCOL_ERROR, FrameType.PRIORITY);
 
         private final boolean connectionErrorForInvalidFrame;
         private final Error errorCodeForInvalidFrame;

Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java?rev=1684421&r1=1684420&r2=1684421&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java Tue Jun  9 13:43:15 2015
@@ -19,7 +19,6 @@ package org.apache.coyote.http2;
 import java.nio.ByteBuffer;
 
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -85,7 +84,6 @@ public class TestHttp2Section_5_1 extend
 
 
     @Test
-    @Ignore // Need to handle stream closes
     public void testClosedInvalidFrame01() throws Exception {
         hpackEncoder = new HpackEncoder(ConnectionSettings.DEFAULT_HEADER_TABLE_SIZE);
 
@@ -111,8 +109,7 @@ public class TestHttp2Section_5_1 extend
         parser.readFrame(true);
 
         Assert.assertTrue(output.getTrace(),
-                output.getTrace().startsWith("0-Goaway-[2147483647]-[" +
-                        Error.STREAM_CLOSED.getCode() + "]-["));
+                output.getTrace().startsWith("3-RST-[" + Error.STREAM_CLOSED.getCode() + "]"));
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org