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: [email protected]
For additional commands, e-mail: [email protected]