Author: markt
Date: Tue Aug 18 17:06:22 2015
New Revision: 1696459

URL: http://svn.apache.org/r1696459
Log:
Switch the Http2UpgradeHandler to using ConnectionSettingsLocal
Fix TODO for sending non-default values in initial settings frame including 
updating tests
 

Added:
    tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsRemote.java
      - copied, changed from r1696447, 
tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettings.java
Modified:
    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/TestHttp2Section_5_1.java

Copied: tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsRemote.java 
(from r1696447, 
tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettings.java)
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsRemote.java?p2=tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsRemote.java&p1=tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettings.java&r1=1696447&r2=1696459&rev=1696459&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettings.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/ConnectionSettingsRemote.java Tue 
Aug 18 17:06:22 2015
@@ -20,13 +20,17 @@ import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.res.StringManager;
 
-public class ConnectionSettings {
+/**
+ * Represents the remote connection settings: i.e. the settings the server must
+ * use when communicating with the client.
+ */
+public class ConnectionSettingsRemote {
 
-    private final Log log = LogFactory.getLog(ConnectionSettings.class);
-    private final StringManager sm = 
StringManager.getManager(ConnectionSettings.class);
+    private final Log log = LogFactory.getLog(ConnectionSettingsRemote.class);
+    private final StringManager sm = 
StringManager.getManager(ConnectionSettingsRemote.class);
 
-    public static final int DEFAULT_WINDOW_SIZE = (1 << 16) - 1;
-    private static final long UNLIMITED = ((long)1 << 32); // Use the maximum 
possible
+    public static final int DEFAULT_INITIAL_WINDOW_SIZE = (1 << 16) - 1;
+    static final long UNLIMITED = ((long)1 << 32); // Use the maximum possible
     private static final int MAX_WINDOW_SIZE = (1 << 31) - 1;
 
     private static final int MIN_MAX_FRAME_SIZE = 1 << 14;
@@ -38,7 +42,7 @@ public class ConnectionSettings {
 
     private volatile boolean enablePush = true;
     private volatile long maxConcurrentStreams = UNLIMITED;
-    private volatile int initialWindowSize = DEFAULT_WINDOW_SIZE;
+    private volatile int initialWindowSize = DEFAULT_INITIAL_WINDOW_SIZE;
     private volatile int maxFrameSize = DEFAULT_MAX_FRAME_SIZE;
     private volatile long maxHeaderListSize = UNLIMITED;
 

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=1696459&r1=1696458&r2=1696459&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Tue Aug 
18 17:06:22 2015
@@ -115,7 +115,7 @@ public class Http2UpgradeHandler extends
     private volatile long pausedNanoTime = Long.MAX_VALUE;
 
     private final ConnectionSettingsRemote remoteSettings = new 
ConnectionSettingsRemote();
-    private final ConnectionSettingsRemote localSettings = new 
ConnectionSettingsRemote();
+    private final ConnectionSettingsLocal localSettings = new 
ConnectionSettingsLocal();
 
     private HpackDecoder hpackDecoder;
     private HpackEncoder hpackEncoder;
@@ -205,9 +205,9 @@ 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);
+            byte[] settings = localSettings.getSettingsFrameForPending();
+            socketWrapper.write(true, settings, 0, settings.length);
             socketWrapper.flush(true);
         } catch (IOException ioe) {
             throw new 
IllegalStateException(sm.getString("upgradeHandler.sendPrefaceFail"), ioe);
@@ -810,25 +810,13 @@ 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)));
-        }
+        localSettings.setInitialWindowSize(initialWindowSize);
     }
 
 
@@ -995,7 +983,7 @@ public class Http2UpgradeHandler extends
     @Override
     public void settingsEnd(boolean ack) throws IOException {
         if (ack) {
-            // TODO Process ACK
+            localSettings.ack();
         } else {
             synchronized (socketWrapper) {
                 socketWrapper.write(true, SETTINGS_ACK, 0, 
SETTINGS_ACK.length);

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=1696459&r1=1696458&r2=1696459&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java Tue Aug 18 
17:06:22 2015
@@ -92,9 +92,10 @@ public abstract class Http2TestBase exte
 
     protected void validateHttp2InitialResponse() throws Exception {
         // - 101 response acts as acknowledgement of the HTTP2-Settings header
-        // Need to read 4 frames
+        // Need to read 5 frames
         // - settings (server settings - must be first)
         // - settings ack (for the settings frame in the client preface)
+        // - ping
         // - headers (for response)
         // - data (for response body)
         parser.readFrame(true);
@@ -103,7 +104,8 @@ public abstract class Http2TestBase exte
         parser.readFrame(true);
         parser.readFrame(true);
 
-        Assert.assertEquals("0-Settings-End\n" +
+        Assert.assertEquals("0-Settings-[3]-[200]\n" +
+                "0-Settings-End\n" +
                 "0-Settings-Ack\n" +
                 "0-Ping-[0,0,0,0,0,0,0,1]\n" +
                 getSimpleResponseTrace(1)
@@ -596,9 +598,7 @@ public abstract class Http2TestBase exte
 
 
     void sendSettings(int streamId, boolean ack, Setting... settings) throws 
IOException {
-        byte[] settingFrame = new byte[15];
         // length
-
         int settingsCount;
         if (settings == null) {
             settingsCount = 0;
@@ -606,6 +606,8 @@ public abstract class Http2TestBase exte
             settingsCount = settings.length;
         }
 
+        byte[] settingFrame = new byte[9 + 6 * settingsCount];
+
         ByteUtil.setThreeBytes(settingFrame, 0, 6 * settingsCount);
         // type
         settingFrame[3] = FrameType.SETTINGS.getIdByte();
@@ -732,6 +734,12 @@ public abstract class Http2TestBase exte
                 trace.append("0-Settings-Ack\n");
             } else {
                 trace.append("0-Settings-End\n");
+                try {
+                    sendSettings(0,  true);
+                } catch (IOException ioe) {
+                    // Convert to uncaught exception
+                    throw new IllegalStateException(ioe);
+                }
             }
         }
 

Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java?rev=1696459&r1=1696458&r2=1696459&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java 
(original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java Tue Aug 
18 17:06:22 2015
@@ -199,7 +199,21 @@ public class TestHttp2Section_5_1 extend
         openClientConnection();
         doHttpUpgrade();
         sendClientPreface();
-        validateHttp2InitialResponse();
+
+        // validateHttp2InitialResponse() - modified
+        parser.readFrame(true);
+        parser.readFrame(true);
+        parser.readFrame(true);
+        parser.readFrame(true);
+        parser.readFrame(true);
+
+        Assert.assertEquals("0-Settings-[3]-[1]\n" +
+                "0-Settings-End\n" +
+                "0-Settings-Ack\n" +
+                "0-Ping-[0,0,0,0,0,0,0,1]\n" +
+                getSimpleResponseTrace(1)
+                , output.getTrace());
+        output.clearTrace();
 
         sendLargeGetRequest(3);
 



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

Reply via email to