Author: markt
Date: Tue Jan 5 12:05:17 2016
New Revision: 1723048
URL: http://svn.apache.org/viewvc?rev=1723048&view=rev
Log:
Refactor common code
Modified:
tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.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=1723048&r1=1723047&r2=1723048&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Tue Jan
5 12:05:17 2016
@@ -359,20 +359,8 @@ public class Http2UpgradeHandler extends
if (connectionState.compareAndSet(ConnectionState.CONNECTED,
ConnectionState.PAUSING)) {
pausedNanoTime = System.nanoTime();
- // Write a GOAWAY frame.
- byte[] fixedPayload = new byte[8];
- ByteUtil.set31Bits(fixedPayload, 0, (1 << 31) - 1);
- ByteUtil.setFourBytes(fixedPayload, 4,
Http2Error.NO_ERROR.getCode());
- byte[] payloadLength = new byte[3];
- ByteUtil.setThreeBytes(payloadLength, 0, 8);
-
try {
- synchronized (socketWrapper) {
- socketWrapper.write(true, payloadLength, 0,
payloadLength.length);
- socketWrapper.write(true, GOAWAY, 0, GOAWAY.length);
- socketWrapper.write(true, fixedPayload, 0, 8);
- socketWrapper.flush(true);
- }
+ writeGoAwayFrame((1 << 31) - 1, Http2Error.NO_ERROR.getCode(),
null);
} catch (IOException ioe) {
// This is fatal for the connection. Ignore it here. There
will be
// further attempts at I/O in upgradeDispatch() and it can
better
@@ -392,20 +380,7 @@ public class Http2UpgradeHandler extends
if (connectionState.get() == ConnectionState.PAUSING) {
if (pausedNanoTime + pingManager.getRoundTripTimeNano() <
System.nanoTime()) {
connectionState.compareAndSet(ConnectionState.PAUSING,
ConnectionState.PAUSED);
-
- // Write a GOAWAY frame.
- byte[] fixedPayload = new byte[8];
- ByteUtil.set31Bits(fixedPayload, 0, maxProcessedStreamId);
- ByteUtil.setFourBytes(fixedPayload, 4,
Http2Error.NO_ERROR.getCode());
- byte[] payloadLength = new byte[3];
- ByteUtil.setThreeBytes(payloadLength, 0, 8);
-
- synchronized (socketWrapper) {
- socketWrapper.write(true, payloadLength, 0,
payloadLength.length);
- socketWrapper.write(true, GOAWAY, 0, GOAWAY.length);
- socketWrapper.write(true, fixedPayload, 0, 8);
- socketWrapper.flush(true);
- }
+ writeGoAwayFrame(maxProcessedStreamId,
Http2Error.NO_ERROR.getCode(), null);
}
}
}
@@ -438,22 +413,9 @@ public class Http2UpgradeHandler extends
void closeConnection(Http2Exception ce) {
- // Write a GOAWAY frame.
- byte[] fixedPayload = new byte[8];
- ByteUtil.set31Bits(fixedPayload, 0, maxProcessedStreamId);
- ByteUtil.setFourBytes(fixedPayload, 4, ce.getError().getCode());
- byte[] debugMessage = ce.getMessage().getBytes(StandardCharsets.UTF_8);
- byte[] payloadLength = new byte[3];
- ByteUtil.setThreeBytes(payloadLength, 0, debugMessage.length + 8);
-
try {
- synchronized (socketWrapper) {
- socketWrapper.write(true, payloadLength, 0,
payloadLength.length);
- socketWrapper.write(true, GOAWAY, 0, GOAWAY.length);
- socketWrapper.write(true, fixedPayload, 0, 8);
- socketWrapper.write(true, debugMessage, 0,
debugMessage.length);
- socketWrapper.flush(true);
- }
+ writeGoAwayFrame(maxProcessedStreamId, ce.getError().getCode(),
+ ce.getMessage().getBytes(StandardCharsets.UTF_8));
} catch (IOException ioe) {
// Ignore. GOAWAY is sent on a best efforts basis and the original
// error has already been logged.
@@ -462,6 +424,29 @@ public class Http2UpgradeHandler extends
}
+ private void writeGoAwayFrame(int maxStreamId, long errorCode, byte[]
debugMsg)
+ throws IOException {
+ byte[] fixedPayload = new byte[8];
+ ByteUtil.set31Bits(fixedPayload, 0, maxStreamId);
+ ByteUtil.setFourBytes(fixedPayload, 4, errorCode);
+ int len = 8;
+ if (debugMsg != null) {
+ len += debugMsg.length;
+ }
+ byte[] payloadLength = new byte[3];
+ ByteUtil.setThreeBytes(payloadLength, 0, len);
+
+ synchronized (socketWrapper) {
+ socketWrapper.write(true, payloadLength, 0, payloadLength.length);
+ socketWrapper.write(true, GOAWAY, 0, GOAWAY.length);
+ socketWrapper.write(true, fixedPayload, 0, 8);
+ if (debugMsg != null) {
+ socketWrapper.write(true, debugMsg, 0, debugMsg.length);
+ }
+ socketWrapper.flush(true);
+ }
+ }
+
void writeHeaders(Stream stream, Response coyoteResponse, int payloadSize)
throws IOException {
if (log.isDebugEnabled()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]