Author: markt
Date: Mon Jun  8 20:11:36 2015
New Revision: 1684266

URL: http://svn.apache.org/r1684266
Log:
StreamError needs the stream ID (so we know which stream to close)

Modified:
    tomcat/trunk/java/org/apache/coyote/http2/FrameType.java
    tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java
    tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
    tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
    tomcat/trunk/java/org/apache/coyote/http2/StreamError.java
    tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java

Modified: tomcat/trunk/java/org/apache/coyote/http2/FrameType.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/FrameType.java?rev=1684266&r1=1684265&r2=1684266&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/FrameType.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/FrameType.java Mon Jun  8 
20:11:36 2015
@@ -56,22 +56,18 @@ public enum FrameType {
     }
 
 
-    public void checkStream(String connectionId, int streamId) throws 
Http2Exception {
-        if (streamId == 0 && !streamZero) {
-            throw new 
ConnectionError(sm.getString("frameType.checkStream.invalidForZero",
-                    connectionId, this), Error.PROTOCOL_ERROR);
-        } else if (streamId != 0 && !streamNonZero) {
-            throw new 
ConnectionError(sm.getString("frameType.checkStream.invalidForNonZero",
-                    connectionId, Integer.valueOf(streamId), this), 
Error.PROTOCOL_ERROR);
+    public void checkStream(int streamId) throws Http2Exception {
+        if (streamId == 0 && !streamZero || streamId != 0 && !streamNonZero) {
+            throw new ConnectionError(sm.getString("frameType.checkStream", 
this),
+                    Error.PROTOCOL_ERROR);
         }
     }
 
 
-    public void checkPayloadSize(String connectionId, int streamId, int 
payloadSize)
-            throws Http2Exception {
+    public void checkPayloadSize(int payloadSize) throws Http2Exception {
         if (payloadSizeValidator != null && 
!payloadSizeValidator.test(payloadSize)) {
             throw new 
ConnectionError(sm.getString("frameType.checkPayloadSize",
-                    connectionId, Integer.toString(streamId), this, 
Integer.toString(payloadSize)),
+                    Integer.toString(payloadSize), this),
                     Error.FRAME_SIZE_ERROR);
         }
     }

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=1684266&r1=1684265&r2=1684266&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java Mon Jun  8 
20:11:36 2015
@@ -86,9 +86,8 @@ class Http2Parser {
         try {
             validateFrame(expected, frameType, streamId, flags, payloadSize);
         } catch (StreamError se) {
-            // TODO debug log
             swallow(payloadSize);
-            return true;
+            throw se;
         }
 
         switch (frameType) {
@@ -313,7 +312,7 @@ class Http2Parser {
             } else {
                 throw new StreamError(
                         
sm.getString("http2Parser.processFrameWindowUpdate.invalidIncrement"),
-                        Error.PROTOCOL_ERROR);
+                        Error.PROTOCOL_ERROR, streamId);
             }
         }
 
@@ -413,7 +412,7 @@ class Http2Parser {
 
         if (expected != null && frameType != expected) {
             throw new 
StreamError(sm.getString("http2Parser.processFrame.unexpectedType",
-                    expected, frameType), Error.PROTOCOL_ERROR);
+                    expected, frameType), Error.PROTOCOL_ERROR, streamId);
         }
 
         if (payloadSize > maxPayloadSize) {
@@ -435,8 +434,8 @@ class Http2Parser {
             }
         }
 
-        frameType.checkStream(connectionId, streamId);
-        frameType.checkPayloadSize(connectionId, streamId, payloadSize);
+        frameType.checkStream(streamId);
+        frameType.checkPayloadSize(payloadSize);
     }
 
 

Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1684266&r1=1684265&r2=1684266&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Mon Jun  
8 20:11:36 2015
@@ -172,7 +172,7 @@ public class Http2UpgradeHandler extends
                 String base64Settings = 
stream.getCoyoteRequest().getHeader(HTTP2_SETTINGS_HEADER);
                 byte[] settings = Base64.decodeBase64(base64Settings);
 
-                FrameType.SETTINGS.checkPayloadSize(connectionId, 1, 
settings.length);
+                FrameType.SETTINGS.checkPayloadSize(settings.length);
 
                 for (int i = 0; i < settings.length % 6; i++) {
                     int id = ByteUtil.getTwoBytes(settings, i * 6);
@@ -239,13 +239,19 @@ public class Http2UpgradeHandler extends
         switch(status) {
         case OPEN_READ:
             try {
-                while (parser.readFrame(false)) {
+                while (true) {
+                    try {
+                        if (!parser.readFrame(false)) {
+                            break;
+                        }
+                    } catch (StreamError se) {
+                        // Stream errors are not fatal to the connection so
+                        // continue reading frames
+                        closeStream(se);
+                    }
                 }
-            } catch (StreamError se) {
-                // Stream error
-                // TODO Reset stream
             } catch (Http2Exception ce) {
-                // This should be a connection error
+                // Really ConnectionError
                 if (log.isDebugEnabled()) {
                     log.debug(sm.getString("upgradeHandler.connectionError"), 
ce);
                 }
@@ -332,6 +338,11 @@ public class Http2UpgradeHandler extends
     }
 
 
+    private void closeStream(StreamError se) {
+        // TODO
+    }
+
+
     private void closeConnecion(Http2Exception ce) {
         // Write a GOAWAY frame.
         byte[] fixedPayload = new byte[8];

Modified: tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties?rev=1684266&r1=1684265&r2=1684266&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Mon Jun  
8 20:11:36 2015
@@ -24,9 +24,8 @@ connectionSettings.maxFrameSizeInvalid=T
 connectionSettings.unknown=An unknown setting with identifier [{0}] and value 
[{1}] was ignored
 connectionSettings.windowSizeTooBig=The requested window size of [{0}] is 
bigger than the maximum permitted value of [{1}]
 
-frameType.checkPayloadSize=Connection [{0}], Stream [{1}], Frame type [{2}], 
Payload size of [{3}] is not valid for this frame type
-frameType.checkStream.invalidForZero=Connection [{0}], Stream [0], received a 
[{1}] frame which is not valid for stream zero
-frameType.checkStream.invalidForNonZero=Connection [{0}], Stream [{1}], 
received a [{2}] frame which is only valid for stream zero
+frameType.checkPayloadSize=Payload size of [{0}] is not valid for frame type 
[{1}]
+frameType.checkStream=Invalid frame type [{0}]
 
 hpack.integerEncodedOverTooManyOctets=HPACK variable length integer encoded 
over too many octets, max is {0}
 

Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamError.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamError.java?rev=1684266&r1=1684265&r2=1684266&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamError.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamError.java Mon Jun  8 
20:11:36 2015
@@ -20,7 +20,15 @@ public class StreamError extends Http2Ex
 
     private static final long serialVersionUID = 1L;
 
-    public StreamError(String msg, Error error) {
+    private final int streamId;
+
+    public StreamError(String msg, Error error, int streamId) {
         super(msg, error);
+        this.streamId = streamId;
+    }
+
+
+    public int getStreamId() {
+        return streamId;
     }
 }

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=1684266&r1=1684265&r2=1684266&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java Mon Jun  
8 20:11:36 2015
@@ -114,7 +114,7 @@ public class StreamStateMachine {
             } else {
                 throw new 
StreamError(sm.getString("streamStateMachine.invalidFrame",
                         stream.getConnectionId(), stream.getIdentifier(), 
state, frameType),
-                        state.errorCodeForInvalidFrame);
+                        state.errorCodeForInvalidFrame, 
stream.getIdentifier().intValue());
             }
         }
     }



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

Reply via email to