aboutsummaryrefslogtreecommitdiffstats
path: root/test/handlers/decompress_h.erl
blob: 346200bad57cb98f2480a2fb6395982e07a23267 (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
%% This module echoes a request body of to test
%% the cowboy_decompress_h stream handler.

-module(decompress_h).

-export([init/2]).

init(Req0, State=[]) ->
	case cowboy_req:binding(what, Req0) of
		<<"decompress_ignore">> ->
			cowboy_req:cast({set_options, #{decompress_ignore => true}}, Req0);
		<<"decompress_ratio_limit">> ->
			cowboy_req:cast({set_options, #{decompress_ratio_limit => 0.5}}, Req0);
		<<"normal">> -> ok
	end,
	{ok, Body, Req1} = read_body(Req0),
	Req = cowboy_req:reply(200, #{}, Body, Req1),
	{ok, Req, State};

init(Req0, State=header_command) ->
	{ok, Body, Req1} = read_body(Req0),
	Req2 = cowboy_req:stream_reply(200, #{}, Req1),
	Req = cowboy_req:stream_body(Body, fin, Req2),
	{ok, Req, State};

init(Req0, State=accept_identity) ->
	{ok, Body, Req1} = read_body(Req0),
	Req = cowboy_req:reply(200, #{<<"accept-encoding">> => <<"identity">>}, Body, Req1),
	{ok, Req, State};

init(Req0, State=invalid_header) ->
	{ok, Body, Req1} = read_body(Req0),
	Req = cowboy_req:reply(200, #{<<"accept-encoding">> => <<";">>}, Body, Req1),
	{ok, Req, State};

init(Req0, State=reject_explicit_header) ->
	{ok, Body, Req1} = read_body(Req0),
	Req = cowboy_req:reply(200, #{<<"accept-encoding">> => <<"identity, gzip;q=0">>},
		Body, Req1),
	{ok, Req, State};

init(Req0, State=reject_implicit_header) ->
	{ok, Body, Req1} = read_body(Req0),
	Req = cowboy_req:reply(200, #{<<"accept-encoding">> => <<"identity, *;q=0">>},
		Body, Req1),
	{ok, Req, State};

init(Req0, State=accept_explicit_header) ->
	{ok, Body, Req1} = read_body(Req0),
	Req = cowboy_req:reply(200, #{<<"accept-encoding">> => <<"identity, gzip;q=0.5">>},
		Body, Req1),
	{ok, Req, State};

init(Req0, State=accept_implicit_header) ->
	{ok, Body, Req1} = read_body(Req0),
	Req = cowboy_req:reply(200, #{<<"accept-encoding">> => <<"identity, *;q=0.5">>},
		Body, Req1),
	{ok, Req, State}.

read_body(Req0) ->
	{Status, Data, Req} = cowboy_req:read_body(Req0, #{length => 1000}),
	do_read_body(Status, Req, Data).

do_read_body(more, Req0, Acc) ->
	{Status, Data, Req} = cowboy_req:read_body(Req0),
	do_read_body(Status, Req, << Acc/binary, Data/binary >>);
do_read_body(ok, Req, Acc) ->
	{ok, Acc, Req}.