Author: markt
Date: Sat Dec 24 17:52:22 2016
New Revision: 1775985
URL: http://svn.apache.org/viewvc?rev=1775985&view=rev
Log:
Fix HTTP/2 compression error.
Once a new size has been agreed for the dynamic hapck table, the next header
block must begin with a dynamic table update.
Modified:
tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java
tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java
tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java
tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java
Modified: tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsBase.java Sat
Dec 24 17:52:22 2016
@@ -38,7 +38,7 @@ abstract class ConnectionSettingsBase<T
static final int MAX_HEADER_TABLE_SIZE = 1 << 16;
// Defaults
- static final int DEFAULT_HEADER_TABLE_SIZE = 4096;
+ static final int DEFAULT_HEADER_TABLE_SIZE = Hpack.DEFAULT_TABLE_SIZE;
static final boolean DEFAULT_ENABLE_PUSH = true;
static final long DEFAULT_MAX_CONCURRENT_STREAMS = UNLIMITED;
static final int DEFAULT_INITIAL_WINDOW_SIZE = (1 << 16) - 1;
Modified: tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/HpackEncoder.java Sat Dec 24
17:52:22 2016
@@ -95,7 +95,7 @@ class HpackEncoder {
/**
* The maximum table size
*/
- private int maxTableSize;
+ private int maxTableSize = Hpack.DEFAULT_TABLE_SIZE;
/**
* The current table size
@@ -104,8 +104,7 @@ class HpackEncoder {
private final HpackHeaderFunction hpackHeaderFunction;
- HpackEncoder(int maxTableSize) {
- this.maxTableSize = maxTableSize;
+ HpackEncoder() {
this.hpackHeaderFunction = DEFAULT_HEADER_FUNCTION;
}
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=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Sat Dec
24 17:52:22 2016
@@ -635,8 +635,10 @@ class Http2UpgradeHandler extends Abstra
private HpackEncoder getHpackEncoder() {
if (hpackEncoder == null) {
- hpackEncoder = new
HpackEncoder(remoteSettings.getHeaderTableSize());
+ hpackEncoder = new HpackEncoder();
}
+ // Ensure latest agreed table size is used
+ hpackEncoder.setMaxTableSize(remoteSettings.getHeaderTableSize());
return hpackEncoder;
}
Modified: tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java Sat Dec 24
17:52:22 2016
@@ -513,7 +513,7 @@ public abstract class Http2TestBase exte
input = new TestInput(is);
output = new TestOutput();
parser = new Http2Parser("-1", input, output);
- hpackEncoder = new
HpackEncoder(ConnectionSettingsBase.DEFAULT_HEADER_TABLE_SIZE);
+ hpackEncoder = new HpackEncoder();
}
Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java?rev=1775985&r1=1775984&r2=1775985&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHpack.java Sat Dec 24
17:52:22 2016
@@ -32,7 +32,7 @@ public class TestHpack {
headers.setValue(":status").setString("200");
headers.setValue("header2").setString("value2");
ByteBuffer output = ByteBuffer.allocate(512);
- HpackEncoder encoder = new HpackEncoder(1024);
+ HpackEncoder encoder = new HpackEncoder();
encoder.encode(headers, output);
output.flip();
// Size is supposed to be 33 without huffman, or 27 with it
@@ -52,7 +52,7 @@ public class TestHpack {
headers.setValue(":status").setString("200");
headers.setValue("header2").setString("value2");
ByteBuffer output = ByteBuffer.allocate(512);
- HpackEncoder encoder = new HpackEncoder(1024);
+ HpackEncoder encoder = new HpackEncoder();
encoder.encode(headers, output);
output.flip();
MimeHeaders headers2 = new MimeHeaders();
@@ -111,7 +111,7 @@ public class TestHpack {
MimeHeaders headers = new MimeHeaders();
headers.setValue(headerName).setString(headerValue);
ByteBuffer output = ByteBuffer.allocate(512);
- HpackEncoder encoder = new HpackEncoder(1024);
+ HpackEncoder encoder = new HpackEncoder();
encoder.encode(headers, output);
output.flip();
MimeHeaders headers2 = new MimeHeaders();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]