0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-15 04:30:25 +00:00

Remove usage of the inflate buffer

This commit is contained in:
Ali Sabil 2013-07-02 10:58:12 +02:00
parent 39caf34fe3
commit 4edef3c45c

View file

@ -57,9 +57,8 @@
frag_state = undefined :: frag_state(), frag_state = undefined :: frag_state(),
utf8_state = <<>> :: binary(), utf8_state = <<>> :: binary(),
deflate_frame = false :: boolean(), deflate_frame = false :: boolean(),
inflate_state :: any(), inflate_state :: undefined | port(),
inflate_buffer = <<>> :: binary(), deflate_state :: undefined | port()
deflate_state :: any()
}). }).
%% @doc Upgrade an HTTP request to the Websocket protocol. %% @doc Upgrade an HTTP request to the Websocket protocol.
@ -121,7 +120,6 @@ websocket_extensions(State, Req) ->
{ok, State#state{ {ok, State#state{
deflate_frame = true, deflate_frame = true,
inflate_state = Inflate, inflate_state = Inflate,
inflate_buffer = <<>>,
deflate_state = Deflate deflate_state = Deflate
}, Req2}; }, Req2};
_ -> _ ->
@ -450,14 +448,13 @@ websocket_inflate_frame(Data, << Rsv1:1, _:2 >>, _,
#state{deflate_frame = DeflateFrame} = State) #state{deflate_frame = DeflateFrame} = State)
when DeflateFrame =:= false orelse Rsv1 =:= 0 -> when DeflateFrame =:= false orelse Rsv1 =:= 0 ->
{Data, State}; {Data, State};
websocket_inflate_frame(Data, << 1:1, _:2 >>, false, websocket_inflate_frame(Data, << 1:1, _:2 >>, false, State) ->
#state{inflate_buffer = Buffer} = State) -> Result = zlib:inflate(State#state.inflate_state, Data),
{<<>>, State#state{inflate_buffer = << Buffer/binary, Data/binary >>}}; {iolist_to_binary(Result), State};
websocket_inflate_frame(Data, << 1:1, _:2 >>, true, websocket_inflate_frame(Data, << 1:1, _:2 >>, true, State) ->
#state{inflate_state = Inflate, inflate_buffer = Buffer} = State) -> Result = zlib:inflate(State#state.inflate_state,
Deflated = << Buffer/binary, Data/binary, 0:8, 0:8, 255:8, 255:8 >>, << Data/binary, 0:8, 0:8, 255:8, 255:8 >>),
Result = zlib:inflate(Inflate, Deflated), {iolist_to_binary(Result), State}.
{iolist_to_binary(Result), State#state{inflate_buffer = <<>>}}.
-spec websocket_unmask(B, mask_key(), B) -> B when B::binary(). -spec websocket_unmask(B, mask_key(), B) -> B when B::binary().
websocket_unmask(<<>>, _, Unmasked) -> websocket_unmask(<<>>, _, Unmasked) ->