File 0002-gun_http-put-transfer-encoding-and-content-length-in.patch of Package gun
From 7e85a27c9c9221287c041e372f153bce8ab1d6b6 Mon Sep 17 00:00:00 2001
From: Led <ledest@gmail.com>
Date: Thu, 20 Jan 2022 21:01:57 +0200
Subject: [PATCH 2/6] gun_http: put transfer-encoding and content-length
inplace in headers
- apply transform_header_names/2 after all
---
src/gun_http.erl | 36 +++++++++++++++++-------------------
1 file changed, 17 insertions(+), 19 deletions(-)
diff --git a/src/gun_http.erl b/src/gun_http.erl
index 58f4ed6..5165ca6 100644
--- a/src/gun_http.erl
+++ b/src/gun_http.erl
@@ -609,34 +609,32 @@ initial_flow(InitialFlow, _) -> InitialFlow.
send_request(State=#http_state{socket=Socket, transport=Transport, version=Version},
StreamRef, ReplyTo, Method, Host, Port, Path, Headers0, Body,
CookieStore0, EvHandler, EvHandlerState0, Function) ->
- Headers1 = lists:keydelete(<<"transfer-encoding">>, 1, Headers0),
- Headers2 = case Body of
- undefined -> Headers1;
- _ -> lists:keydelete(<<"content-length">>, 1, Headers1)
- end,
- %% We use Headers2 because this is the smallest list.
- Conn = conn_from_headers(Version, Headers2),
+ Conn = conn_from_headers(Version, Headers0),
Out = case Body of
undefined when Function =:= ws_upgrade -> head;
- undefined -> request_io_from_headers(Headers2);
+ undefined -> request_io_from_headers(Headers0);
_ -> head
end,
- {Authority, Headers3} = case lists:keyfind(<<"host">>, 1, Headers2) of
+ {Authority, Headers1} = case lists:keyfind(<<"host">>, 1, Headers0) of
false ->
Authority0 = host_header(Transport:name(), Host, Port),
- {Authority0, [{<<"host">>, Authority0}|Headers2]};
+ {Authority0, [{<<"host">>, Authority0}|Headers0]};
{_, Authority1} ->
- {Authority1, Headers2}
+ {Authority1, Headers0}
end,
- Headers4 = transform_header_names(State, Headers3),
- Headers5 = case {Body, Out} of
- {undefined, body_chunked} when Version =:= 'HTTP/1.0' -> Headers4;
- {undefined, body_chunked} -> [{<<"transfer-encoding">>, <<"chunked">>}|Headers4];
- {undefined, _} -> Headers4;
- _ -> [{<<"content-length">>, integer_to_binary(iolist_size(Body))}|Headers4]
+ Headers2 = case {Body, Out} of
+ {undefined, body_chunked} when Version =:= 'HTTP/1.0' -> Headers1;
+ {undefined, body_chunked} ->
+ lists:keystore(<<"transfer-encoding">>, 1, Headers1,
+ {<<"transfer-encoding">>, <<"chunked">>});
+ {undefined, _} -> Headers1;
+ _ ->
+ lists:keystore(<<"content-length">>, 1, Headers1,
+ {<<"content-length">>, integer_to_binary(iolist_size(Body))})
end,
- {Headers, CookieStore} = gun_cookies:add_cookie_header(
- scheme(State), Authority, Path, Headers5, CookieStore0),
+ {Headers3, CookieStore} = gun_cookies:add_cookie_header(
+ scheme(State), Authority, Path, Headers2, CookieStore0),
+ Headers = transform_header_names(State, Headers3),
RealStreamRef = stream_ref(State, StreamRef),
RequestEvent = #{
stream_ref => RealStreamRef,
--
2.43.0