diff options
Diffstat (limited to 'jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpChannelOverHTTP2.java')
-rw-r--r-- | jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpChannelOverHTTP2.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpChannelOverHTTP2.java b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpChannelOverHTTP2.java index 92e1158e9d..df999131b7 100644 --- a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpChannelOverHTTP2.java +++ b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpChannelOverHTTP2.java @@ -24,8 +24,11 @@ import org.eclipse.jetty.client.HttpExchange; import org.eclipse.jetty.client.HttpReceiver; import org.eclipse.jetty.client.HttpSender; import org.eclipse.jetty.client.api.Result; +import org.eclipse.jetty.http2.ErrorCode; import org.eclipse.jetty.http2.api.Session; import org.eclipse.jetty.http2.api.Stream; +import org.eclipse.jetty.http2.frames.ResetFrame; +import org.eclipse.jetty.util.Callback; public class HttpChannelOverHTTP2 extends HttpChannel { @@ -33,6 +36,7 @@ public class HttpChannelOverHTTP2 extends HttpChannel private final Session session; private final HttpSenderOverHTTP2 sender; private final HttpReceiverOverHTTP2 receiver; + private Stream stream; public HttpChannelOverHTTP2(HttpDestination destination, HttpConnectionOverHTTP2 connection, Session session) { @@ -65,6 +69,16 @@ public class HttpChannelOverHTTP2 extends HttpChannel return receiver; } + public Stream getStream() + { + return stream; + } + + public void setStream(Stream stream) + { + this.stream = stream; + } + @Override public void send() { @@ -80,6 +94,19 @@ public class HttpChannelOverHTTP2 extends HttpChannel } @Override + public boolean abort(HttpExchange exchange, Throwable requestFailure, Throwable responseFailure) + { + boolean aborted = super.abort(exchange, requestFailure, responseFailure); + if (aborted) + { + Stream stream = getStream(); + if (stream != null) + stream.reset(new ResetFrame(stream.getId(), ErrorCode.CANCEL_STREAM_ERROR.code), Callback.NOOP); + } + return aborted; + } + + @Override public void exchangeTerminated(HttpExchange exchange, Result result) { super.exchangeTerminated(exchange, result); |