Author: markt
Date: Tue Mar  8 10:11:12 2016
New Revision: 1734044

URL: http://svn.apache.org/viewvc?rev=1734044&view=rev
Log:
Based on EG discussion, add a boolean return value to push() so the application 
can tell if the push was sent or not.

Modified:
    tomcat/trunk/java/javax/servlet/http/PushBuilder.java
    tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.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/PushBuilder.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/PushBuilder.java?rev=1734044&r1=1734043&r2=1734044&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/PushBuilder.java (original)
+++ tomcat/trunk/java/javax/servlet/http/PushBuilder.java Tue Mar  8 10:11:12 
2016
@@ -159,7 +159,8 @@ public interface PushBuilder {
     PushBuilder lastModified(String lastModified);
 
     /**
-     * Generates the push request. After calling this method the following
+     * Generates the push request and sends it to the client unless pushes are
+     * not available for some reason. After calling this method the following
      * fields are set to {@code null}:
      * <ul>
      * <li>{@code path}</li>
@@ -167,11 +168,14 @@ public interface PushBuilder {
      * <li>{@code lastModified}</li>
      * </ul>
      *
+     * @return {@code true} if the push request was sent to the client,
+     *         otherwise {@code false}
+     *
      * @throws IllegalStateException If this method is called when {@code path}
      *         is {@code null}
      * @throws IllegalArgumentException If the request to push requires a body
      */
-    void push();
+    boolean push();
 
     /**
      * Obtain the name of the HTTP method that will be used for push requests

Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java?rev=1734044&r1=1734043&r2=1734044&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java Tue 
Mar  8 10:11:12 2016
@@ -38,6 +38,7 @@ import org.apache.catalina.Context;
 import org.apache.catalina.connector.Request;
 import org.apache.catalina.util.SessionConfig;
 import org.apache.coyote.ActionCode;
+import org.apache.coyote.PushToken;
 import org.apache.tomcat.util.buf.B2CConverter;
 import org.apache.tomcat.util.buf.HexUtils;
 import org.apache.tomcat.util.collections.CaseInsensitiveKeyMap;
@@ -322,7 +323,7 @@ public class ApplicationPushBuilder impl
 
 
     @Override
-    public void push() {
+    public boolean push() {
         if (path == null) {
             throw new 
IllegalStateException(sm.getString("pushBuilder.noPath"));
         }
@@ -392,7 +393,8 @@ public class ApplicationPushBuilder impl
         setHeader("cookie", generateCookieHeader(cookies,
                 catalinaRequest.getContext().getCookieProcessor()));
 
-        coyoteRequest.action(ActionCode.PUSH_REQUEST, pushTarget);
+        PushToken pushToken = new PushToken(pushTarget);
+        coyoteRequest.action(ActionCode.PUSH_REQUEST, pushToken);
 
         // Reset for next call to this method
         pushTarget = null;
@@ -401,6 +403,8 @@ public class ApplicationPushBuilder impl
         lastModified = null;
         headers.remove("if-none-match");
         headers.remove("if-modified-since");
+
+        return pushToken.getResult();
     }
 
 

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=1734044&r1=1734043&r2=1734044&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:11:12 
2016
@@ -382,7 +382,10 @@ public class Stream extends AbstractStre
     }
 
 
-    void push(Request request) throws IOException {
+    boolean push(Request request) throws IOException {
+        if (!handler.getRemoteSettings().getEnablePush()) {
+            return false;
+        }
         // Set the special HTTP/2 headers
         
request.getMimeHeaders().addValue(":method").duplicate(request.method());
         
request.getMimeHeaders().addValue(":scheme").duplicate(request.scheme());
@@ -404,6 +407,8 @@ public class Stream extends AbstractStre
         }
 
         push(handler, request, this);
+
+        return true;
     }
 
 

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=1734044&r1=1734043&r2=1734044&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:11:12 2016
@@ -26,7 +26,7 @@ import org.apache.coyote.Adapter;
 import org.apache.coyote.AsyncContextCallback;
 import org.apache.coyote.ContainerThreadMarker;
 import org.apache.coyote.ErrorState;
-import org.apache.coyote.Request;
+import org.apache.coyote.PushToken;
 import org.apache.coyote.UpgradeToken;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
@@ -355,7 +355,8 @@ public class StreamProcessor extends Abs
         // Servlet 4.0 Push requests
         case PUSH_REQUEST: {
             try {
-                stream.push((Request) param);
+                PushToken pushToken = (PushToken) param;
+                pushToken.setResult(stream.push(pushToken.getPushTarget()));
             } catch (IOException ioe) {
                 response.setErrorException(ioe);
                 setErrorState(ErrorState.CLOSE_CONNECTION_NOW, ioe);



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

Reply via email to