aboutsummaryrefslogtreecommitdiffstats
path: root/test/http_SUITE_data/http_multipart_stream.erl
blob: bde75313c5708b7eabf4155ef8556729011a11c4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
%% Feel free to use, reuse and abuse the code in this file.

-module(http_multipart_stream).
-behaviour(cowboy_http_handler).
-export([init/3, handle/2, terminate/3]).

init(_, Req, []) ->
	{ok, Req, undefined}.

handle(Req, State) ->
	Req2 = multipart(Req),
	{ok, cowboy_req:reply(200, Req2), State}.

terminate(_, _, _) ->
	ok.

multipart(Req) ->
	case cowboy_req:part(Req) of
		{ok, [{<<"content-length">>, BinLength}], Req2} ->
			Length = list_to_integer(binary_to_list(BinLength)),
			{Length, Req3} = stream_body(Req2, 0),
			multipart(Req3);
		{done, Req2} ->
			Req2
	end.

stream_body(Req, N) ->
	case cowboy_req:part_body(Req) of
		{ok, Data, Req2} ->
			{N + byte_size(Data), Req2};
		{more, Data, Req2} ->
			stream_body(Req2, N + byte_size(Data))
	end.