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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org