Author: markt
Date: Tue Mar 8 10:29:44 2016
New Revision: 1734047
URL: http://svn.apache.org/viewvc?rev=1734047&view=rev
Log:
Based on EG discussion, add a method to allow applications to determine if push
requests are supported. This is provided because populating a PushBuilder is a
relatively expensive exercise.
Modified:
tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java
tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java
tomcat/trunk/java/org/apache/catalina/connector/Request.java
tomcat/trunk/java/org/apache/coyote/ActionCode.java
tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
tomcat/trunk/java/org/apache/coyote/http2/Stream.java
tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
Modified: tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java?rev=1734047&r1=1734046&r2=1734047&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java (original)
+++ tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java Tue Mar 8
10:29:44 2016
@@ -215,6 +215,18 @@ public interface HttpServletRequest exte
public String getPathTranslated();
/**
+ * Does the current request allow push requests. This will return {@code
+ * true} only if the underlying protocol supports server push and if pushes
+ * are permitted from the current request.
+ *
+ * @return {@code true} if server push is supported for the current request
+ * otherwise {@code false}
+ */
+ public default boolean isPushSupported() {
+ return false;
+ }
+
+ /**
* Obtain a builder for generating push requests. {@link PushBuilder}
* documents how this request will be used as the basis for a push request.
* Each call to this method will return a new instance, independent of any
Modified: tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java?rev=1734047&r1=1734046&r2=1734047&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java
(original)
+++ tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java Tue Mar
8 10:29:44 2016
@@ -374,4 +374,17 @@ public class HttpServletRequestWrapper e
Class<T> httpUpgradeHandlerClass) throws IOException,
ServletException {
return this._getHttpServletRequest().upgrade(httpUpgradeHandlerClass);
}
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * The default behavior of this method is to return
+ * {@link HttpServletRequest#isPushSupported()} on the wrapped request
object.
+ *
+ * @since Servlet 4.0
+ */
+ @Override
+ public boolean isPushSupported() {
+ return this._getHttpServletRequest().isPushSupported();
+ }
}
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1734047&r1=1734046&r2=1734047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Tue Mar 8
10:29:44 2016
@@ -1896,6 +1896,19 @@ public class Request implements HttpServ
* @since Servlet 4.0
*/
@Override
+ public boolean isPushSupported() {
+ AtomicBoolean result = new AtomicBoolean();
+ coyoteRequest.action(ActionCode.IS_PUSH_SUPPORTED, result);
+ return result.get();
+ }
+
+
+ /**
+ * {@inheritDoc}
+ *
+ * @since Servlet 4.0
+ */
+ @Override
public PushBuilder getPushBuilder() {
return new ApplicationPushBuilder(this);
}
Modified: tomcat/trunk/java/org/apache/coyote/ActionCode.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ActionCode.java?rev=1734047&r1=1734046&r2=1734047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ActionCode.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ActionCode.java Tue Mar 8 10:29:44 2016
@@ -239,6 +239,11 @@ public enum ActionCode {
END_REQUEST,
/**
+ * Is server push supported and allowed for the current request?
+ */
+ IS_PUSH_SUPPORTED,
+
+ /**
* Push a request on behalf of the client of the current request.
*/
PUSH_REQUEST
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1734047&r1=1734046&r2=1734047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Tue Mar 8
10:29:44 2016
@@ -636,6 +636,12 @@ public class AjpProcessor extends Abstra
}
// Servlet 4.0 Push requests
+ case IS_PUSH_SUPPORTED: {
+ // HTTP2 connections only. Unsupported for AJP.
+ AtomicBoolean result = (AtomicBoolean) param;
+ result.set(false);
+ break;
+ }
case PUSH_REQUEST: {
// HTTP2 connections only. Unsupported for AJP.
throw new UnsupportedOperationException(
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=1734047&r1=1734046&r2=1734047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Tue Mar 8
10:29:44 2016
@@ -942,6 +942,12 @@ public class Http11Processor extends Abs
}
// Servlet 4.0 Push requests
+ case IS_PUSH_SUPPORTED: {
+ // HTTP2 connections only. Unsupported for HTTP/1.x
+ AtomicBoolean result = (AtomicBoolean) param;
+ result.set(false);
+ break;
+ }
case PUSH_REQUEST: {
// HTTP2 connections only. Unsupported for AJP.
throw new UnsupportedOperationException(
Modified: tomcat/trunk/java/org/apache/coyote/http2/Stream.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Stream.java?rev=1734047&r1=1734046&r2=1734047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Tue Mar 8 10:29:44
2016
@@ -382,8 +382,13 @@ public class Stream extends AbstractStre
}
+ boolean isPushSupported() {
+ return handler.getRemoteSettings().getEnablePush();
+ }
+
+
boolean push(Request request) throws IOException {
- if (!handler.getRemoteSettings().getEnablePush()) {
+ if (!isPushSupported()) {
return false;
}
// Set the special HTTP/2 headers
Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java?rev=1734047&r1=1734046&r2=1734047&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Tue Mar 8
10:29:44 2016
@@ -353,6 +353,11 @@ public class StreamProcessor extends Abs
}
// Servlet 4.0 Push requests
+ case IS_PUSH_SUPPORTED: {
+ AtomicBoolean result = (AtomicBoolean) param;
+ result.set(stream.isPushSupported());
+ break;
+ }
case PUSH_REQUEST: {
try {
PushToken pushToken = (PushToken) param;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]