0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 20:30:23 +00:00

Use default port when not given in :authority

This commit is contained in:
Loïc Hoguin 2018-05-16 10:42:25 +02:00
parent 93e8744e22
commit d732e74dd5
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
3 changed files with 13 additions and 2 deletions

View file

@ -1119,7 +1119,8 @@ stream_req_init(State=#state{ref=Ref, peer=Peer, sock=Sock, cert=Cert},
StreamID, IsFin, Headers, PseudoHeaders=#{method := Method, scheme := Scheme, StreamID, IsFin, Headers, PseudoHeaders=#{method := Method, scheme := Scheme,
authority := Authority, path := PathWithQs}, BodyLength) -> authority := Authority, path := PathWithQs}, BodyLength) ->
try cow_http_hd:parse_host(Authority) of try cow_http_hd:parse_host(Authority) of
{Host, Port} -> {Host, Port0} ->
Port = ensure_port(Scheme, Port0),
try cow_http:parse_fullpath(PathWithQs) of try cow_http:parse_fullpath(PathWithQs) of
{<<>>, _} -> {<<>>, _} ->
stream_malformed(State, StreamID, stream_malformed(State, StreamID,
@ -1160,6 +1161,10 @@ stream_req_init(State=#state{ref=Ref, peer=Peer, sock=Sock, cert=Cert},
'The :authority pseudo-header is invalid. (RFC7540 8.1.2.3)') 'The :authority pseudo-header is invalid. (RFC7540 8.1.2.3)')
end. end.
ensure_port(<<"http">>, undefined) -> 80;
ensure_port(<<"https">>, undefined) -> 443;
ensure_port(_, Port) -> Port.
stream_closed(State=#state{socket=Socket, transport=Transport}, StreamID, _) -> stream_closed(State=#state{socket=Socket, transport=Transport}, StreamID, _) ->
Transport:send(Socket, cow_http2:rst_stream(StreamID, stream_closed)), Transport:send(Socket, cow_http2:rst_stream(StreamID, stream_closed)),
State. State.

View file

@ -110,7 +110,7 @@
method => binary(), method => binary(),
scheme => binary(), scheme => binary(),
host => binary(), host => binary(),
port => binary(), port => inet:port_number(),
qs => binary() qs => binary()
}. }.
-export_type([push_opts/0]). -export_type([push_opts/0]).

View file

@ -334,6 +334,12 @@ port(Config) ->
Port = integer_to_binary(config(port, Config)), Port = integer_to_binary(config(port, Config)),
Port = do_get_body("/port", Config), Port = do_get_body("/port", Config),
Port = do_get_body("/direct/port", Config), Port = do_get_body("/direct/port", Config),
ExpectedPort = case config(type, Config) of
tcp -> <<"80">>;
ssl -> <<"443">>
end,
ExpectedPort = do_get_body("/port", [{<<"host">>, <<"localhost">>}], Config),
ExpectedPort = do_get_body("/direct/port", [{<<"host">>, <<"localhost">>}], Config),
ok. ok.
qs(Config) -> qs(Config) ->