From 233cf43ab9c6c16d22e14039a79606fc935693d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 5 Mar 2013 17:49:58 +0100 Subject: Make streamed chunk size configurable Defaults to a maximum of 1000000 bytes. Also standardize the te_identity and te_chunked decoding functions. Now they both try to read as much as possible (up to the limit), making body reading much faster when not using chunked encoding. --- src/cowboy_http.erl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/cowboy_http.erl') diff --git a/src/cowboy_http.erl b/src/cowboy_http.erl index 1d19838..57dac0b 100644 --- a/src/cowboy_http.erl +++ b/src/cowboy_http.erl @@ -853,7 +853,7 @@ authorization_basic_password(<>, Fun, Acc) -> %% @doc Decode a stream of chunks. -spec te_chunked(Bin, TransferState) -> more | {more, non_neg_integer(), Bin, TransferState} - | {ok, Bin, TransferState} | {ok, Bin, Bin, TransferState} + | {ok, Bin, Bin, TransferState} | {done, non_neg_integer(), Bin} | {error, badarg} when Bin::binary(), TransferState::{non_neg_integer(), non_neg_integer()}. te_chunked(<< "0\r\n\r\n", Rest/binary >>, {0, Streamed}) -> @@ -879,11 +879,13 @@ te_chunked(Data, {ChunkRem, Streamed}) -> %% @doc Decode an identity stream. -spec te_identity(Bin, TransferState) - -> {ok, Bin, TransferState} | {done, Bin, non_neg_integer(), Bin} + -> {more, non_neg_integer(), Bin, TransferState} + | {done, Bin, non_neg_integer(), Bin} when Bin::binary(), TransferState::{non_neg_integer(), non_neg_integer()}. te_identity(Data, {Streamed, Total}) when Streamed + byte_size(Data) < Total -> - {ok, Data, {Streamed + byte_size(Data), Total}}; + Streamed2 = Streamed + byte_size(Data), + {more, Total - Streamed2, Data, {Streamed2, Total}}; te_identity(Data, {Streamed, Total}) -> Size = Total - Streamed, << Data2:Size/binary, Rest/binary >> = Data, -- cgit v1.2.3