From ca32a22a55bd65525c78d44eff68ef58d59fd5bb Mon Sep 17 00:00:00 2001 From: Tony Han Date: Sun, 28 Apr 2019 10:46:17 +0800 Subject: [PATCH] Handle lingering_data --- src/cowboy_http2.erl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cowboy_http2.erl b/src/cowboy_http2.erl index d6f80e6f..13ed9396 100644 --- a/src/cowboy_http2.erl +++ b/src/cowboy_http2.erl @@ -255,6 +255,8 @@ frame(State=#state{http2_machine=HTTP2Machine0}, Frame) -> maybe_ack(State#state{http2_machine=HTTP2Machine}, Frame); {ok, {data, StreamID, IsFin, Data}, HTTP2Machine} -> data_frame(State#state{http2_machine=HTTP2Machine}, StreamID, IsFin, Data); + {ok, {lingering_data, StreamID, DataLen}, HTTP2Machine} -> + lingering_data_frame(State#state{http2_machine=HTTP2Machine}, StreamID, DataLen); {ok, {headers, StreamID, IsFin, Headers, PseudoHeaders, BodyLen}, HTTP2Machine} -> headers_frame(State#state{http2_machine=HTTP2Machine}, StreamID, IsFin, Headers, PseudoHeaders, BodyLen); @@ -287,6 +289,13 @@ maybe_ack(State=#state{socket=Socket, transport=Transport}, Frame) -> end, State. +lingering_data_frame(State=#state{socket=Socket, transport=Transport, http2_machine=HTTP2Machine0}, _StreamID, DataLen) -> + Transport:send(Socket, [ + cow_http2:window_update(DataLen) + ]), + HTTP2Machine1 = cow_http2_machine:update_window(DataLen, HTTP2Machine0), + State#state{http2_machine=HTTP2Machine1}. + data_frame(State=#state{opts=Opts, streams=Streams}, StreamID, IsFin, Data) -> case Streams of #{StreamID := {running, StreamState0}} ->