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 <UpgradeProtocol + * className="org.apache.coyote.http2.Http2Protocol" /> 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