2016-03-08 11:11 GMT+01:00 <ma...@apache.org>: > 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. >
That was scary when some other guy suggested to throw an ISE. This stuff is best effort, and that's it. Rémy > > 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 > >