aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_req.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2013-01-20 18:57:42 +0100
committerLoïc Hoguin <[email protected]>2013-01-20 19:06:28 +0100
commit823a82b8f2ebb5e00140ada1d1ba17e27df8d97a (patch)
treef895589544f76d4fe9b6ed4a4dc00980c6597e81 /src/cowboy_req.erl
parent4b15d8f6e3692caa796e7e7bf0bdfbd977d00e30 (diff)
downloadcowboy-823a82b8f2ebb5e00140ada1d1ba17e27df8d97a.tar.gz
cowboy-823a82b8f2ebb5e00140ada1d1ba17e27df8d97a.tar.bz2
cowboy-823a82b8f2ebb5e00140ada1d1ba17e27df8d97a.zip
Fix an issue for replies in onresponse mishandling headers
Reported and fixed over email by Adrian Roe.
Diffstat (limited to 'src/cowboy_req.erl')
-rw-r--r--src/cowboy_req.erl11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl
index 849831d..7f7ef32 100644
--- a/src/cowboy_req.erl
+++ b/src/cowboy_req.erl
@@ -163,7 +163,8 @@
| {non_neg_integer(), resp_body_fun()},
%% Functions.
- onresponse = undefined :: undefined | cowboy_protocol:onresponse_fun()
+ onresponse = undefined :: undefined | already_called
+ | cowboy_protocol:onresponse_fun()
}).
-opaque req() :: #http_req{}.
@@ -1162,13 +1163,17 @@ to_list(Req) ->
response(Status, Headers, RespHeaders, DefaultHeaders, Body, Req=#http_req{
socket=Socket, transport=Transport, version=Version,
pid=ReqPid, onresponse=OnResponse}) ->
- FullHeaders = response_merge_headers(Headers, RespHeaders, DefaultHeaders),
+ FullHeaders = case OnResponse of
+ already_called -> Headers;
+ _ -> response_merge_headers(Headers, RespHeaders, DefaultHeaders)
+ end,
Req2 = case OnResponse of
+ already_called -> Req;
undefined -> Req;
OnResponse -> OnResponse(Status, FullHeaders, Body,
%% Don't call 'onresponse' from the hook itself.
Req#http_req{resp_headers=[], resp_body= <<>>,
- onresponse=undefined})
+ onresponse=already_called})
end,
ReplyType = case Req2#http_req.resp_state of
waiting ->