0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00
cowboy/test/old_http_SUITE_data/http_loop_stream_recv.erl
Loïc Hoguin 5964273cc4
Fix the flushing of messages when switching to Websocket
We now flush messages that are specific to cowboy_http only.

Stream handlers should also flush their own specific messages
if necessary, although timeouts will be flushed regardless
of where they originate from.

Also renames the http_SUITE to old_http_SUITE to distinguish
new tests from old tests. Most old tests need to be removed
or converted eventually as they're legacy tests from Cowboy 1.0.
2018-03-26 18:53:07 +02:00

34 lines
693 B
Erlang

%% Feel free to use, reuse and abuse the code in this file.
-module(http_loop_stream_recv).
-export([init/2]).
-export([info/3]).
-export([terminate/3]).
init(Req, _) ->
receive after 100 -> ok end,
self() ! stream,
{cowboy_loop, Req, undefined}.
info(stream, Req, undefined) ->
stream(Req, 1, <<>>).
stream(Req, ID, Acc) ->
case cowboy_req:read_body(Req) of
{ok, <<>>, Req2} ->
{stop, cowboy_req:reply(200, Req2), undefined};
{_, Data, Req2} ->
parse_id(Req2, ID, << Acc/binary, Data/binary >>)
end.
parse_id(Req, ID, Data) ->
case Data of
<< ID:32, Rest/bits >> ->
parse_id(Req, ID + 1, Rest);
_ ->
stream(Req, ID, Data)
end.
terminate(stop, _, _) ->
ok.