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

Reply via email to