Author: markt
Date: Sun Jul 26 18:34:42 2015
New Revision: 1692743

URL: http://svn.apache.org/r1692743
Log:
Make initial Window size configurable.
Define some constants for default configuration settings

Modified:
    tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java
    tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
    tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties

Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java?rev=1692743&r1=1692742&r2=1692743&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java Sun Jul 26 
18:34:42 2015
@@ -29,17 +29,26 @@ import org.apache.tomcat.util.net.Socket
 
 public class Http2Protocol implements UpgradeProtocol {
 
-    private static final long DEFAULT_MAX_CONCURRENT_STREAMS = 200;
+    static final long DEFAULT_READ_TIMEOUT = 10000;
+    static final long DEFAULT_KEEP_ALIVE_TIMEOUT = 30000;
+    static final long DEFAULT_WRITE_TIMEOUT = 10000;
+    // The HTTP/2 specification recommends a minimum default of 100
+    static final long DEFAULT_MAX_CONCURRENT_STREAMS = 200;
+    // This default is defined by the HTTP/2 specification
+    static final int DEFAULT_INITIAL_WINDOW_SIZE = (1 << 16) - 1;
 
     private static final String HTTP_UPGRADE_NAME = "h2c";
     private static final String ALPN_NAME = "h2";
     private static final byte[] ALPN_IDENTIFIER = 
ALPN_NAME.getBytes(StandardCharsets.UTF_8);
 
     // All timeouts in milliseconds
-    private long readTimeout = 10000;
-    private long keepAliveTimeout = 30000;
-    private long writeTimeout = 10000;
+    private long readTimeout = DEFAULT_READ_TIMEOUT;
+    private long keepAliveTimeout = DEFAULT_KEEP_ALIVE_TIMEOUT;
+    private long writeTimeout = DEFAULT_WRITE_TIMEOUT;
     private long maxConcurrentStreams = DEFAULT_MAX_CONCURRENT_STREAMS;
+    // If a lower initial value is required, set it here but DO NOT change the
+    // default defined above.
+    private int initialWindowSize = DEFAULT_INITIAL_WINDOW_SIZE;
 
     @Override
     public String getHttpUpgradeName(boolean isSecure) {
@@ -77,6 +86,7 @@ public class Http2Protocol implements Up
         result.setKeepAliveTimeout(getKeepAliveTimeout());
         result.setWriteTimeout(getWriteTimeout());
         result.setMaxConcurrentStreams(getMaxConcurrentStreams());
+        result.setInitialWindowSize(getInitialWindowSize());
 
         return result;
     }
@@ -142,4 +152,14 @@ public class Http2Protocol implements Up
     public void setMaxConcurrentStreams(long maxConcurrentStreams) {
         this.maxConcurrentStreams = maxConcurrentStreams;
     }
+
+
+    public int getInitialWindowSize() {
+        return initialWindowSize;
+    }
+
+
+    public void setInitialWindowSize(int initialWindowSize) {
+        this.initialWindowSize = initialWindowSize;
+    }
 }

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=1692743&r1=1692742&r2=1692743&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Sun Jul 
26 18:34:42 2015
@@ -121,9 +121,9 @@ public class Http2UpgradeHandler extends
     private HpackEncoder hpackEncoder;
 
     // All timeouts in milliseconds
-    private long readTimeout = 10000;
-    private long keepAliveTimeout = 30000;
-    private long writeTimeout = 10000;
+    private long readTimeout = Http2Protocol.DEFAULT_READ_TIMEOUT;
+    private long keepAliveTimeout = Http2Protocol.DEFAULT_KEEP_ALIVE_TIMEOUT;
+    private long writeTimeout = Http2Protocol.DEFAULT_WRITE_TIMEOUT;
 
     private final Map<Integer,Stream> streams = new HashMap<>();
     private final AtomicInteger activeRemoteStreamCount = new AtomicInteger(0);
@@ -205,6 +205,7 @@ public class Http2UpgradeHandler extends
         }
 
         // Send the initial settings frame
+        // TODO: Need to send non-default settings values
         try {
             socketWrapper.write(true, SETTINGS_EMPTY, 0, 
SETTINGS_EMPTY.length);
             socketWrapper.flush(true);
@@ -809,11 +810,28 @@ public class Http2UpgradeHandler extends
     }
 
 
+    /*
+     * This only has an effect if called before the connection is established
+     */
     public void setMaxConcurrentStreams(long maxConcurrentStreams) {
         localSettings.setMaxConcurrentStreams(maxConcurrentStreams);
     }
 
 
+    /*
+     * This only has an effect if called before the connection is established
+     */
+    public void setInitialWindowSize(int initialWindowSize) {
+        try {
+            localSettings.setInitialWindowSize(initialWindowSize);
+        } catch (ConnectionException e) {
+            // Illegal setting. Ignore it but log a warning.
+            log.warn(sm.getString("upgradeHandler.initialWindowSize.invalid",
+                    connectionId, Integer.toString(initialWindowSize)));
+        }
+    }
+
+
     // ----------------------------------------------- Http2Parser.Input 
methods
 
     @Override

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=1692743&r1=1692742&r2=1692743&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/LocalStrings.properties Sun Jul 
26 18:34:42 2015
@@ -81,6 +81,7 @@ upgradeHandler.noNewStreams=Connection [
 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.initialWindowSize.invalid=Connection [{0}], Illegal value of 
[{1}] ignored for initial window size
 upgradeHandler.invalidPreface=Connection [{0}], Invalid connection preface
 upgradeHandler.ioerror=Connection [{0}]
 upgradeHandler.pause.entry=Connection [{0}] Pausing



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

Reply via email to