You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/06/02 14:58:37 UTC
svn commit: r1683096 - in /tomcat/trunk:
java/org/apache/coyote/UpgradeProtocol.java
java/org/apache/coyote/http11/Http11Processor.java
java/org/apache/coyote/http2/Http2Protocol.java
test/org/apache/coyote/http2/TestHttp2Section_3_2_1.java
Author: markt
Date: Tue Jun 2 12:58:37 2015
New Revision: 1683096
URL: http://svn.apache.org/r1683096
Log:
Correctly implement the section 3.2.1 test, add a new one and then fix the bug they highlight.
Modified:
tomcat/trunk/java/org/apache/coyote/UpgradeProtocol.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java
tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_3_2_1.java
Modified: tomcat/trunk/java/org/apache/coyote/UpgradeProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/UpgradeProtocol.java?rev=1683096&r1=1683095&r2=1683096&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/UpgradeProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/UpgradeProtocol.java Tue Jun 2 12:58:37 2015
@@ -77,4 +77,17 @@ public interface UpgradeProtocol {
* @return An instance of the HTTP upgrade handler for this protocol
*/
public InternalHttpUpgradeHandler getInteralUpgradeHandler(Adapter adapter, Request request);
+
+
+ /**
+ * Allows the implementation to examine the request and accept or reject it
+ * based on what it finds.
+ *
+ * @param request The request that included an upgrade header for this
+ * protocol
+ *
+ * @return <code>true</code> if the request is accepted, otherwise
+ * <code>false</code>
+ */
+ public boolean accept(Request request);
}
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1683096&r1=1683095&r2=1683096&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Tue Jun 2 12:58:37 2015
@@ -1035,14 +1035,16 @@ public class Http11Processor extends Abs
UpgradeProtocol upgradeProtocol = httpUpgradeProtocols.get(requestedProtocol);
if (upgradeProtocol != null) {
- // TODO Figure out how to handle request bodies at this
- // point.
+ if (upgradeProtocol.accept(request)) {
+ // TODO Figure out how to handle request bodies at this
+ // point.
- InternalHttpUpgradeHandler upgradeHandler =
- upgradeProtocol.getInteralUpgradeHandler(
- getAdapter(), cloneRequest(request));
- action(ActionCode.UPGRADE, upgradeHandler);
- return SocketState.UPGRADING;
+ InternalHttpUpgradeHandler upgradeHandler =
+ upgradeProtocol.getInteralUpgradeHandler(
+ getAdapter(), cloneRequest(request));
+ action(ActionCode.UPGRADE, upgradeHandler);
+ return SocketState.UPGRADING;
+ }
}
}
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=1683096&r1=1683095&r2=1683096&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2Protocol.java Tue Jun 2 12:58:37 2015
@@ -17,6 +17,7 @@
package org.apache.coyote.http2;
import java.nio.charset.StandardCharsets;
+import java.util.Enumeration;
import org.apache.coyote.Adapter;
import org.apache.coyote.Processor;
@@ -77,6 +78,23 @@ public class Http2Protocol implements Up
}
+ @Override
+ public boolean accept(Request request) {
+ // Should only be one HTTP2-Settings header
+ Enumeration<String> headers = request.getMimeHeaders().values("HTTP2-Settings");
+ int count = 0;
+ while (headers.hasMoreElements()) {
+ count++;
+ headers.nextElement();
+ }
+ if (count != 1) {
+ return false;
+ }
+
+ return true;
+ }
+
+
public long getReadTimeout() {
return readTimeout;
}
Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_3_2_1.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_3_2_1.java?rev=1683096&r1=1683095&r2=1683096&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_3_2_1.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_3_2_1.java Tue Jun 2 12:58:37 2015
@@ -25,14 +25,21 @@ public class TestHttp2Section_3_2_1 exte
enableHttp2();
configureAndStartWebApplication();
openClientConnection();
- doHttpUpgrade("h2", "", false);
+ doHttpUpgrade("h2c", "", false);
parseHttp11Response();
}
- // TODO: Test zero Http2-Settings headers
+ @Test
+ public void testMultipleHttp2Settings() throws Exception{
+ enableHttp2();
+ configureAndStartWebApplication();
+ openClientConnection();
+ doHttpUpgrade("h2c", Http2TestBase.EMPTY_HTTP2_SETTINGS + Http2TestBase.EMPTY_HTTP2_SETTINGS,
+ false);
+ parseHttp11Response();
+ }
- // TODO: Test multiple Http2-Settings headers
// TODO: Test trailing '=' are omitted
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org