Author: markt
Date: Fri May 29 11:43:00 2015
New Revision: 1682428

URL: http://svn.apache.org/r1682428
Log:
And now remove the hard-coded support for HTTP/2 with a configuration option in 
server.xml.
This supports any UpgradeProtocol implementation - not just HTTP/2.

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/Connector.java
    tomcat/trunk/java/org/apache/catalina/startup/Catalina.java
    tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java
    tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java
    tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties
    tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java
    tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java

Modified: tomcat/trunk/java/org/apache/catalina/connector/Connector.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Connector.java?rev=1682428&r1=1682427&r2=1682428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Connector.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Connector.java Fri May 29 
11:43:00 2015
@@ -32,6 +32,7 @@ import org.apache.catalina.core.AprLifec
 import org.apache.catalina.util.LifecycleMBeanBase;
 import org.apache.coyote.Adapter;
 import org.apache.coyote.ProtocolHandler;
+import org.apache.coyote.UpgradeProtocol;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.IntrospectionUtils;
@@ -856,6 +857,12 @@ public class Connector extends Lifecycle
     public void addSslHostConfig(SSLHostConfig sslHostConfig) {
         protocolHandler.addSslHostConfig(sslHostConfig);
     }
+
+
+    public void addUpgradeProtocol(UpgradeProtocol upgradeProtocol) {
+        protocolHandler.addUpgradeProtocol(upgradeProtocol);
+    }
+
     // --------------------------------------------------------- Public Methods
 
 

Modified: tomcat/trunk/java/org/apache/catalina/startup/Catalina.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/Catalina.java?rev=1682428&r1=1682427&r2=1682428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/Catalina.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/Catalina.java Fri May 29 
11:43:00 2015
@@ -351,7 +351,15 @@ public class Catalina {
                             "addLifecycleListener",
                             "org.apache.catalina.LifecycleListener");
 
-        // Add RuleSets for nested elements
+        digester.addObjectCreate("Server/Service/Connector/UpgradeProtocol",
+                                  null, // MUST be specified in the element
+                                  "className");
+        digester.addSetProperties("Server/Service/Connector/UpgradeProtocol");
+        digester.addSetNext("Server/Service/Connector/UpgradeProtocol",
+                            "addUpgradeProtocol",
+                            "org.apache.coyote.UpgradeProtocol");
+
+// Add RuleSets for nested elements
         digester.addRuleSet(new 
NamingRuleSet("Server/GlobalNamingResources/"));
         digester.addRuleSet(new EngineRuleSet("Server/Service/"));
         digester.addRuleSet(new HostRuleSet("Server/Service/Engine/"));

Modified: tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java?rev=1682428&r1=1682427&r2=1682428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ProtocolHandler.java Fri May 29 
11:43:00 2015
@@ -99,4 +99,7 @@ public interface ProtocolHandler {
 
 
     public void addSslHostConfig(SSLHostConfig sslHostConfig);
+
+
+    public void addUpgradeProtocol(UpgradeProtocol upgradeProtocol);
 }

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java?rev=1682428&r1=1682427&r2=1682428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java Fri May 29 
11:43:00 2015
@@ -135,6 +135,12 @@ public abstract class AbstractAjpProtoco
     }
 
 
+    @Override
+    public void addUpgradeProtocol(UpgradeProtocol upgradeProtocol) {
+        getLog().warn(sm.getString("ajpprotocol.noUpgrade", 
upgradeProtocol.getClass().getName()));
+    }
+
+
     protected void configureProcessor(AjpProcessor processor) {
         processor.setAdapter(getAdapter());
         processor.setTomcatAuthentication(getTomcatAuthentication());

Modified: tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties?rev=1682428&r1=1682427&r2=1682428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/LocalStrings.properties Fri May 29 
11:43:00 2015
@@ -13,6 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ajpprotocol.noSSL=SSL is not supported with AJP. The SSL host configuration 
for [{0}] was ignored
+ajpprotocol.noUpgrade=Upgrade is not supported with AJP. The UpgradeProtocol 
configuration for [{0}] was ignored
 
 ajpnioprotocol.releaseStart=Iterating through our connections to release a 
socket channel [{0}]
 ajpnioprotocol.releaseEnd=Done iterating through our connections to release a 
socket channel [{0}] released [{1}]

Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java?rev=1682428&r1=1682427&r2=1682428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Protocol.java Fri 
May 29 11:43:00 2015
@@ -37,7 +37,6 @@ import org.apache.coyote.UpgradeProtocol
 import org.apache.coyote.http11.upgrade.InternalHttpUpgradeHandler;
 import org.apache.coyote.http11.upgrade.UpgradeProcessorExternal;
 import org.apache.coyote.http11.upgrade.UpgradeProcessorInternal;
-import org.apache.coyote.http2.Http2Protocol;
 import org.apache.tomcat.util.net.AbstractEndpoint;
 import org.apache.tomcat.util.net.SSLHostConfig;
 import org.apache.tomcat.util.net.SocketWrapperBase;
@@ -57,9 +56,9 @@ public abstract class AbstractHttp11Prot
 
     @Override
     public void init() throws Exception {
-        // TODO: Make this configurable via nested UpgradeProtocol elements in
-        //       the Connector.
-        addUpgradeProtocol(new Http2Protocol());
+        for (UpgradeProtocol upgradeProtocol : upgradeProtocols) {
+            configureUpgradeProtocol(upgradeProtocol);
+        }
 
         super.init();
     }
@@ -291,6 +290,14 @@ public abstract class AbstractHttp11Prot
 
 
     /**
+     * The upgrade protocol instances configured.
+     */
+    private final List<UpgradeProtocol> upgradeProtocols = new ArrayList<>();
+    public void addUpgradeProtocol(UpgradeProtocol upgradeProtocol) {
+        upgradeProtocols.add(upgradeProtocol);
+    }
+
+    /**
      * The protocols that are available via internal Tomcat support for access
      * via HTTP upgrade.
      */
@@ -300,7 +307,7 @@ public abstract class AbstractHttp11Prot
      * via ALPN negotiation.
      */
     private final Map<String,UpgradeProtocol> negotiatedProtocols = new 
HashMap<>();
-    public void addUpgradeProtocol(UpgradeProtocol upgradeProtocol) {
+    private void configureUpgradeProtocol(UpgradeProtocol upgradeProtocol) {
         boolean secure = getEndpoint().isSSLEnabled();
         // HTTP Upgrade
         String httpUpgradeName = upgradeProtocol.getHttpUpgradeName(secure);

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=1682428&r1=1682427&r2=1682428&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Fri May 
29 11:43:00 2015
@@ -52,10 +52,17 @@ import org.apache.tomcat.util.res.String
  * For reading, this implementation is blocking within frames and non-blocking
  * between frames.
  * <br>
- * Note that unless Tomcat is configured with an ECC certificate, FireFox
- * (tested with v37.0.2) needs to be configured with
- * network.http.spdy.enforce-tls-profile=false in order for FireFox to be able
- * to connect.
+ * Note:
+ * <ul>
+ * <li>Unless Tomcat is configured with an ECC certificate, FireFox (tested 
with
+ *     v37.0.2) needs to be configured with
+ *     network.http.spdy.enforce-tls-profile=false in order for FireFox to be
+ *     able to connect.</li>
+ * <li>You will need to nest an &lt;UpgradeProtocol
+ *     className="org.apache.coyote.http2.Http2Protocol" /&gt; element inside
+ *     a TLS enabled Connector element in server.xml to enable HTTP/2 support.
+ *     </li>
+ * </ul>
  *
  * TODO: Review cookie parsing
  */



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

Reply via email to