aboutsummaryrefslogtreecommitdiffstats
path: root/src/gun_http2.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2020-07-27 17:24:16 +0200
committerLoïc Hoguin <[email protected]>2020-09-21 15:51:56 +0200
commit048224a888b3331796e66dd974c6d75234e09036 (patch)
tree05c8fb099619cd6d8a2cfd57d9dd87fed47686d0 /src/gun_http2.erl
parent323bd167fd33f322ab8747e398e54a8a36f5b753 (diff)
downloadgun-048224a888b3331796e66dd974c6d75234e09036.tar.gz
gun-048224a888b3331796e66dd974c6d75234e09036.tar.bz2
gun-048224a888b3331796e66dd974c6d75234e09036.zip
Add HTTP/2 CONNECT tests with Cowboy as origin
Diffstat (limited to 'src/gun_http2.erl')
-rw-r--r--src/gun_http2.erl21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/gun_http2.erl b/src/gun_http2.erl
index 7b6d1eb..b1dc1e6 100644
--- a/src/gun_http2.erl
+++ b/src/gun_http2.erl
@@ -330,13 +330,24 @@ data_frame(State, StreamID, IsFin, Data, EvHandler, EvHandlerState0) ->
%% This means that #stream{} must contain both the user-facing StreamRef and the reference.
- %% @todo Commands.
- {{state, ProtoState}, EvHandlerState} = Protocol:handle(Data, ProtoState0,
- EvHandler, EvHandlerState0),
- {store_stream(State, Stream#stream{tunnel={Protocol, ProtoState, TunnelInfo}}),
- EvHandlerState}
+ {Commands, EvHandlerState} = Protocol:handle(Data, ProtoState0, EvHandler, EvHandlerState0),
+ {tunnel_commands(Commands, Stream, Protocol, TunnelInfo, State), EvHandlerState}
end.
+tunnel_commands(Command, Stream, Protocol, TunnelInfo, State) when not is_list(Command) ->
+ tunnel_commands([Command], Stream, Protocol, TunnelInfo, State);
+tunnel_commands([], Stream, _, _, State) ->
+ store_stream(State, Stream);
+tunnel_commands([{state, ProtoState}|Tail], Stream, Protocol, TunnelInfo, State) ->
+ tunnel_commands(Tail, Stream#stream{tunnel={Protocol, ProtoState, TunnelInfo}},
+ Protocol, TunnelInfo, State);
+tunnel_commands([SetCookie={set_cookie, _, _, _, _}|Tail], Stream, Protocol, TunnelInfo,
+ State=#http2_state{commands_queue=Queue}) ->
+ tunnel_commands(Tail, Stream, Protocol, TunnelInfo,
+ State#http2_state{commands_queue=[SetCookie|Queue]});
+tunnel_commands([{active, true}|Tail], Stream, Protocol, TunnelInfo, State) ->
+ tunnel_commands(Tail, Stream, Protocol, TunnelInfo, State).
+
data_frame(State0, StreamID, IsFin, Data, EvHandler, EvHandlerState0,
Stream=#stream{ref=StreamRef, reply_to=ReplyTo, flow=Flow0, handler_state=Handlers0}) ->
{ok, Dec, Handlers} = gun_content_handler:handle(IsFin, Data, Handlers0),