From 4696fcde1fa7a9123f4ba0fa88157e3836933345 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Tue, 30 Oct 2012 08:48:09 +0100 Subject: [PATCH] [#691] Correctly handle SpdyRstStreamFrame --- .../spdy/SpdyHttpResponseStreamIdHandler.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpResponseStreamIdHandler.java b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpResponseStreamIdHandler.java index 342d3339c8..dc758bf9f2 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpResponseStreamIdHandler.java +++ b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpResponseStreamIdHandler.java @@ -20,6 +20,7 @@ import java.util.Queue; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageCodec; +import io.netty.handler.codec.http.HttpMessage; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; @@ -29,22 +30,27 @@ import io.netty.handler.codec.http.HttpResponse; * for HTTP. */ public class SpdyHttpResponseStreamIdHandler extends - MessageToMessageCodec { + MessageToMessageCodec { private static final Integer NO_ID = -1; private final Queue ids = new LinkedList(); public SpdyHttpResponseStreamIdHandler() { - super(new Class[] { HttpRequest.class }, new Class[] { HttpResponse.class }); + super(new Class[] { HttpRequest.class, SpdyRstStreamFrame.class }, new Class[] { HttpResponse.class }); } @Override - public HttpResponse encode(ChannelHandlerContext ctx, HttpResponse msg) throws Exception { - boolean contains = msg.containsHeader(SpdyHttpHeaders.Names.STREAM_ID); - if (!contains) { - ids.add(NO_ID); - } else { - ids.add(SpdyHttpHeaders.getStreamId(msg)); + public Object encode(ChannelHandlerContext ctx, Object msg) throws Exception { + if (msg instanceof HttpMessage) { + boolean contains = ((HttpMessage)msg).containsHeader(SpdyHttpHeaders.Names.STREAM_ID); + if (!contains) { + ids.add(NO_ID); + } else { + ids.add(SpdyHttpHeaders.getStreamId((HttpMessage) msg)); + } + } else if (msg instanceof SpdyRstStreamFrame) { + ids.remove(((SpdyRstStreamFrame)msg).getStreamId()); } + return msg; }