diff options
-rw-r--r-- | src/cowboy_protocol.erl | 16 | ||||
-rw-r--r-- | src/cowboy_req.erl | 11 |
2 files changed, 17 insertions, 10 deletions
diff --git a/src/cowboy_protocol.erl b/src/cowboy_protocol.erl index 9b04ec3..8323b80 100644 --- a/src/cowboy_protocol.erl +++ b/src/cowboy_protocol.erl @@ -182,20 +182,16 @@ wait_header(Req, State=#state{socket=Socket, -spec header({http_header, integer(), cowboy_http:header(), any(), binary()} | http_eoh, cowboy_req:req(), #state{}) -> ok. -header({http_header, _I, 'Host', _R, RawHost}, Req=#http_req{ - transport=Transport}, State=#state{host_tokens=undefined}) -> +header({http_header, _I, 'Host', _R, RawHost}, Req, + State=#state{host_tokens=undefined, transport=Transport}) -> RawHost2 = cowboy_bstr:to_lower(RawHost), case catch cowboy_dispatcher:split_host(RawHost2) of - {HostTokens, RawHost3, undefined} -> + {HostTokens, Host, undefined} -> Port = default_port(Transport:name()), - parse_header(Req#http_req{ - host=RawHost3, port=Port, - headers=[{'Host', RawHost}|Req#http_req.headers]}, + parse_header(cowboy_req:set_host(Host, Port, RawHost, Req), State#state{host_tokens=HostTokens}); - {HostTokens, RawHost3, Port} -> - parse_header(Req#http_req{ - host=RawHost3, port=Port, - headers=[{'Host', RawHost}|Req#http_req.headers]}, + {HostTokens, Host, Port} -> + parse_header(cowboy_req:set_host(Host, Port, RawHost, Req), State#state{host_tokens=HostTokens}); {'EXIT', _Reason} -> error_terminate(400, State) diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl index 80d68a9..08e4155 100644 --- a/src/cowboy_req.erl +++ b/src/cowboy_req.erl @@ -102,6 +102,9 @@ -export([upgrade_reply/3]). -export([ensure_response/2]). +%% Private setter/getter API. +-export([set_host/4]). + %% Misc API. -export([compact/1]). -export([lock/1]). @@ -908,6 +911,14 @@ ensure_response(#http_req{socket=Socket, transport=Transport, Transport:send(Socket, <<"0\r\n\r\n">>), ok. +%% Private setter/getter API. + +%% @private +-spec set_host(binary(), inet:port_number(), binary(), Req) + -> Req when Req::req(). +set_host(Host, Port, RawHost, Req=#http_req{headers=Headers}) -> + Req#http_req{host=Host, port=Port, headers=[{'Host', RawHost}|Headers]}. + %% Misc API. %% @doc Compact the request data by removing all non-system information. |