diff options
author | Loïc Hoguin <[email protected]> | 2013-01-20 18:57:42 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2013-01-20 19:06:28 +0100 |
commit | 823a82b8f2ebb5e00140ada1d1ba17e27df8d97a (patch) | |
tree | f895589544f76d4fe9b6ed4a4dc00980c6597e81 /src/cowboy_req.erl | |
parent | 4b15d8f6e3692caa796e7e7bf0bdfbd977d00e30 (diff) | |
download | cowboy-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.erl | 11 |
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 -> |