Author: markt Date: Mon Jun 8 20:32:34 2015 New Revision: 1684271 URL: http://svn.apache.org/r1684271 Log: Implement stream closure on StreamError
Modified: 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/Stream.java 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=1684271&r1=1684270&r2=1684271&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:32:34 2015 @@ -338,8 +338,32 @@ public class Http2UpgradeHandler extends } - private void closeStream(StreamError se) { - // TODO + private void closeStream(StreamError se) throws IOException { + + if (log.isDebugEnabled()) { + log.debug(sm.getString("upgradeHandler.rst.debug", connectionId, + Integer.toString(se.getStreamId()), se.getError())); + } + + Stream stream = getStream(se.getStreamId()); + stream.sendRst(); + + // Write a RST frame + byte[] rstFrame = new byte[13]; + // Length + ByteUtil.setThreeBytes(rstFrame, 0, 4); + // Type + rstFrame[3] = FrameType.RST.getIdByte(); + // No flags + // Stream ID + ByteUtil.set31Bits(rstFrame, 5, se.getStreamId()); + // Payload + ByteUtil.setFourBytes(rstFrame, 9, se.getError().getCode()); + + synchronized (socketWrapper) { + socketWrapper.write(true, rstFrame, 0, rstFrame.length); + socketWrapper.flush(true); + } } 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=1684271&r1=1684270&r2=1684271&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:32:34 2015 @@ -63,6 +63,7 @@ streamProcessor.httpupgrade.notsupported streamStateMachine.debug.change=Connection [{0}], Stream [{1}], State changed from [{2}] to [{3}] streamStateMachine.invalidFrame=Connection [{0}], Stream [{1}], State [{2}], Frame type [{3}] +upgradeHandler.rst.debug=Connection [{0}], Stream [{1}], Error [{2}], RST (closing stream) upgradeHandler.goaway.debug=Connection [{0}], Goaway, Last stream [{1}], Error code [{2}], Debug data [{3}] upgradeHandler.init=Connection [{0}] upgradeHandler.ioerror=Connection [{0}] 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=1684271&r1=1684270&r2=1684271&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Mon Jun 8 20:32:34 2015 @@ -255,6 +255,11 @@ public class Stream extends AbstractStre } + void sendRst() { + state.sendReset(); + } + + class StreamOutputBuffer implements OutputBuffer { private final ByteBuffer buffer = ByteBuffer.allocate(8 * 1024); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org