Просмотр исходного кода

Fix connection state being ignored for unknown length streaming

Loïc Hoguin 12 лет назад
Родитель
Сommit
20329a6e9e
1 измененных файлов с 5 добавлено и 2 удалено
  1. 5 2
      src/cowboy_req.erl

+ 5 - 2
src/cowboy_req.erl

@@ -911,7 +911,6 @@ reply(Status, Headers, Body, Req=#http_req{
 		version=Version, connection=Connection,
 		method=Method, resp_compress=Compress,
 		resp_state=waiting, resp_headers=RespHeaders}) ->
-	RespConn = response_connection(Headers, Connection),
 	HTTP11Headers = case Version of
 		{1, 1} -> [{<<"connection">>, atom_to_connection(Connection)}];
 		_ -> []
@@ -919,18 +918,20 @@ reply(Status, Headers, Body, Req=#http_req{
 	case Body of
 		BodyFun when is_function(BodyFun) ->
 			%% We stream the response body until we close the connection.
+			RespConn = close,
 			{RespType, Req2} = response(Status, Headers, RespHeaders, [
 					{<<"connection">>, <<"close">>},
 					{<<"date">>, cowboy_clock:rfc1123()},
 					{<<"server">>, <<"Cowboy">>},
 					{<<"transfer-encoding">>, <<"identity">>}
-				], <<>>, Req#http_req{connection=close}),
+				], <<>>, Req),
 			if	RespType =/= hook, Method =/= <<"HEAD">> ->
 					BodyFun(Socket, Transport);
 				true -> ok
 			end;
 		{ContentLength, BodyFun} ->
 			%% We stream the response body for ContentLength bytes.
+			RespConn = response_connection(Headers, Connection),
 			{RespType, Req2} = response(Status, Headers, RespHeaders, [
 					{<<"content-length">>, integer_to_list(ContentLength)},
 					{<<"date">>, cowboy_clock:rfc1123()},
@@ -941,9 +942,11 @@ reply(Status, Headers, Body, Req=#http_req{
 				true -> ok
 			end;
 		_ when Compress ->
+			RespConn = response_connection(Headers, Connection),
 			Req2 = reply_may_compress(Status, Headers, Body, Req,
 				RespHeaders, HTTP11Headers, Method);
 		_ ->
+			RespConn = response_connection(Headers, Connection),
 			Req2 = reply_no_compress(Status, Headers, Body, Req,
 				RespHeaders, HTTP11Headers, Method, iolist_size(Body))
 	end,