diff options
author | Ingela Anderton Andin <[email protected]> | 2015-12-01 10:01:16 +0100 |
---|---|---|
committer | Ingela Anderton Andin <[email protected]> | 2015-12-01 10:01:16 +0100 |
commit | 552818fd16f1a842e5d206d43bb442de685356da (patch) | |
tree | 24f9bbb61dd8bc1700b49fc6dcbf8b381f04d04c /lib/inets/src/http_lib/http_chunk.erl | |
parent | 16801311ad52b6d50b4c462da26b3d34f0736e48 (diff) | |
parent | ebbbd714ad2398858b09065bce82830d8affe2a4 (diff) | |
download | otp-552818fd16f1a842e5d206d43bb442de685356da.tar.gz otp-552818fd16f1a842e5d206d43bb442de685356da.tar.bz2 otp-552818fd16f1a842e5d206d43bb442de685356da.zip |
Merge branch 'ia/inets/esi-timeout/OTP-13110' into maint
* ia/inets/esi-timeout/OTP-13110:
inets: Add warning header in "chunk trailer" when mod_esi callback times out or fails
inets: Remove exit that generates an incorrect internal server error
Diffstat (limited to 'lib/inets/src/http_lib/http_chunk.erl')
-rw-r--r-- | lib/inets/src/http_lib/http_chunk.erl | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/inets/src/http_lib/http_chunk.erl b/lib/inets/src/http_lib/http_chunk.erl index 9699856bf8..7325f24809 100644 --- a/lib/inets/src/http_lib/http_chunk.erl +++ b/lib/inets/src/http_lib/http_chunk.erl @@ -25,7 +25,7 @@ -include("http_internal.hrl"). %% API --export([decode/3, encode/1, encode_last/0, handle_headers/2]). +-export([decode/3, encode/1, encode_last/0, encode_last/1, handle_headers/2]). %% Callback API - used for example if the chunkedbody is received a %% little at a time on a socket. -export([decode_size/1, ignore_extensions/1, decode_data/1, decode_trailer/1]). @@ -85,6 +85,11 @@ encode(Chunk) when is_list(Chunk)-> encode_last() -> <<$0, ?CR, ?LF, ?CR, ?LF >>. +encode_last([]) -> + encode_last(); +encode_last(Trailers0) -> + Trailers = list_to_binary(encode_trailers(Trailers0)), + <<$0, ?CR, ?LF, Trailers/binary>>. %%------------------------------------------------------------------------- %% handle_headers(HeaderRecord, ChunkedHeaders) -> NewHeaderRecord @@ -276,10 +281,18 @@ decode_trailer(<<?CR, ?LF, Rest/binary>>, Header, Headers, Body, BodyLength, Rem Body, BodyLength, RemainingSize, TotalMaxHeaderSize); decode_trailer(<<Octet, Rest/binary>>, Header, Headers, Body, BodyLength, RemainingSize, TotalMaxHeaderSize) -> - decode_trailer(Rest, [Octet | Header], Headers, - Body, BodyLength, RemainingSize - 1, TotalMaxHeaderSize). + decode_trailer(Rest, [Octet | Header], Headers, + Body, BodyLength, remaing_size(RemainingSize, 1), TotalMaxHeaderSize). remaing_size(nolimit, _) -> nolimit; remaing_size(Total, Consumed) -> Total - Consumed. + +encode_trailers(Trailers) -> + encode_trailers(Trailers, ""). + +encode_trailers([], Acc) -> + Acc ++ ?CRLF ++ ?CRLF; +encode_trailers([{Header, Value} | Rest], Acc) -> + encode_trailers(Rest, Header ++ ":" ++ Value ++ ?CRLF ++ Acc). |