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/04 22:54:44 UTC

svn commit: r1683640 - in /tomcat/trunk/java/org/apache/coyote/http2: Http2Parser.java Http2UpgradeHandler.java Stream.java

Author: markt
Date: Thu Jun  4 20:54:43 2015
New Revision: 1683640

URL: http://svn.apache.org/r1683640
Log:
First attempt (untested) at incoming flow control

Modified:
    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/Stream.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=1683640&r1=1683639&r2=1683640&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java Thu Jun  4 20:54:43 2015
@@ -134,7 +134,6 @@ class Http2Parser {
             padLength = b[0] & 0xFF;
         }
 
-        // TODO Flow control
         ByteBuffer dest = output.getInputByteBuffer(streamId, payloadSize);
         if (dest == null) {
             swallow(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=1683640&r1=1683639&r2=1683640&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Thu Jun  4 20:54:43 2015
@@ -439,6 +439,21 @@ public class Http2UpgradeHandler extends
     }
 
 
+    void writeWindowUpdate(Stream stream, int increment) throws IOException {
+        synchronized (socketWrapper) {
+            // Build window update frame for stream 0
+            byte[] frame = new byte[13];
+            ByteUtil.setThreeBytes(frame, 0,  4);
+            frame[3] = FrameType.WINDOW_UPDATE.getIdByte();
+            ByteUtil.set31Bits(frame, 9, increment);
+            socketWrapper.write(true, frame, 0, frame.length);
+            // Change stream Id and re-use
+            ByteUtil.set31Bits(frame, 5, stream.getIdentifier().intValue());
+            socketWrapper.write(true, frame, 0, frame.length);
+        }
+    }
+
+
     private void processWrites() throws IOException {
         synchronized (socketWrapper) {
             if (socketWrapper.flush(false)) {

Modified: tomcat/trunk/java/org/apache/coyote/http2/Stream.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Stream.java?rev=1683640&r1=1683639&r2=1683640&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Thu Jun  4 20:54:43 2015
@@ -413,6 +413,10 @@ public class Stream extends AbstractStre
 
             chunk.setBytes(outBuffer, 0,  written);
 
+            // Increment client-side flow control windows by the number of bytes
+            // read
+            handler.writeWindowUpdate(Stream.this, written);
+
             return written;
         }
 



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