diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Flusher.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Flusher.java index 4051cf9c11c..4ab47771e2e 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Flusher.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Flusher.java @@ -32,6 +32,7 @@ import java.util.Queue; import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.http2.frames.WindowUpdateFrame; import org.eclipse.jetty.io.ByteBufferPool; +import org.eclipse.jetty.io.EofException; import org.eclipse.jetty.util.ArrayQueue; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.IteratingCallback; @@ -346,7 +347,7 @@ public class HTTP2Flusher extends IteratingCallback public void reset() { - failed(new EOFException("reset")); + failed(new EofException("reset")); } @Override diff --git a/jetty-http2/http2-server/pom.xml b/jetty-http2/http2-server/pom.xml index 9b9a6c1047d..5d031f52b5e 100644 --- a/jetty-http2/http2-server/pom.xml +++ b/jetty-http2/http2-server/pom.xml @@ -44,6 +44,12 @@ ${project.version} test + + org.eclipse.jetty + jetty-servlets + ${project.version} + test + org.eclipse.jetty jetty-alpn-server diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java index 1160212541d..a41a269042b 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java @@ -94,6 +94,7 @@ public class HttpChannelOverHTTP2 extends HttpChannel public void onPushRequest(MetaData.Request request) { onRequest(request); + getRequest().setAttribute("org.eclipse.jetty.pushed",Boolean.TRUE); if (LOG.isDebugEnabled()) { diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java index 210cade784c..373524c00d0 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java @@ -96,7 +96,7 @@ public class HttpTransportOverHTTP2 implements HttpTransport } else { - callback.failed(new IllegalStateException()); + callback.failed(new IllegalStateException("committed")); } } else diff --git a/jetty-http2/http2-server/src/test/java/org/eclipse/jetty/http2/server/Http2Server.java b/jetty-http2/http2-server/src/test/java/org/eclipse/jetty/http2/server/Http2Server.java index 64a19e85eca..8169b541666 100644 --- a/jetty-http2/http2-server/src/test/java/org/eclipse/jetty/http2/server/Http2Server.java +++ b/jetty-http2/http2-server/src/test/java/org/eclipse/jetty/http2/server/Http2Server.java @@ -21,7 +21,9 @@ package org.eclipse.jetty.http2.server; import java.io.IOException; import java.util.Date; +import java.util.EnumSet; +import javax.servlet.DispatcherType; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.Cookie; @@ -42,6 +44,7 @@ import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.servlets.PushCacheFilter; import org.eclipse.jetty.util.ssl.SslContextFactory; @@ -56,6 +59,7 @@ public class Http2Server ServletContextHandler context = new ServletContextHandler(server, "/",ServletContextHandler.SESSIONS); context.setResourceBase("/tmp"); + context.addFilter(PushCacheFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST)); context.addServlet(new ServletHolder(servlet), "/test/*"); context.addServlet(DefaultServlet.class, "/"); server.setHandler(context); diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java index 8555b08f58f..30ab7e63919 100644 --- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java +++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java @@ -79,6 +79,14 @@ public class PushCacheFilter implements Filter public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; + + if (Boolean.TRUE==req.getAttribute("org.eclipse.jetty.pushed")) + { + LOG.debug("PUSH {}", request.getRequestURI()); + chain.doFilter(req,resp); + return; + } + // Iterating over fields is more efficient than multiple gets HttpFields fields = Request.getBaseRequest(req).getHttpFields();