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

openSUSE Build Service is sponsored by