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