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: [email protected]
For additional commands, e-mail: [email protected]