mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-20 16:15:59 +01:00
Add misc:uri_parse/2 to allow declaring default ports for protocols
This commit is contained in:
parent
d49b50a055
commit
80477f71b3
26
src/misc.erl
26
src/misc.erl
@ -41,7 +41,7 @@
|
||||
intersection/2, format_val/1, cancel_timer/1, unique_timestamp/0,
|
||||
is_mucsub_message/1, best_match/2, pmap/2, peach/2, format_exception/4,
|
||||
get_my_ipv4_address/0, get_my_ipv6_address/0, parse_ip_mask/1,
|
||||
crypto_hmac/3, crypto_hmac/4, uri_parse/1,
|
||||
crypto_hmac/3, crypto_hmac/4, uri_parse/1, uri_parse/2,
|
||||
match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1,
|
||||
semver_to_xxyy/1, logical_processors/0]).
|
||||
|
||||
@ -61,23 +61,37 @@
|
||||
uri_parse(URL) when is_binary(URL) ->
|
||||
uri_parse(binary_to_list(URL));
|
||||
uri_parse(URL) ->
|
||||
case http_uri:parse(URL) of
|
||||
uri_parse(URL, []).
|
||||
|
||||
uri_parse(URL, Protocols) when is_binary(URL) ->
|
||||
uri_parse(binary_to_list(URL), Protocols);
|
||||
uri_parse(URL, Protocols) ->
|
||||
case http_uri:parse(URL, [{scheme_defaults, Protocols}]) of
|
||||
{ok, {Scheme, UserInfo, Host, Port, Path, Query}} ->
|
||||
{ok, atom_to_list(Scheme), UserInfo, Host, Port, Path, Query};
|
||||
{error, _} = E ->
|
||||
E
|
||||
end.
|
||||
|
||||
-else.
|
||||
uri_parse(URL) when is_binary(URL) ->
|
||||
uri_parse(binary_to_list(URL));
|
||||
uri_parse(URL) ->
|
||||
uri_parse(URL, [{http, 80}, {https, 443}]).
|
||||
|
||||
uri_parse(URL, Protocols) when is_binary(URL) ->
|
||||
uri_parse(binary_to_list(URL), Protocols);
|
||||
uri_parse(URL, Protocols) ->
|
||||
case uri_string:parse(URL) of
|
||||
#{scheme := Scheme, host := Host, port := Port, path := Path} = M1 ->
|
||||
{ok, Scheme, maps:get(userinfo, M1, ""), Host, Port, Path, maps:get(query, M1, "")};
|
||||
#{scheme := "https", host := Host, path := Path} = M2 ->
|
||||
{ok, "https", maps:get(userinfo, M2, ""), Host, 443, Path, maps:get(query, M2, "")};
|
||||
#{scheme := "http", host := Host, path := Path} = M3 ->
|
||||
{ok, "http", maps:get(userinfo, M3, ""), Host, 80, Path, maps:get(query, M3, "")};
|
||||
#{scheme := Scheme, host := Host, path := Path} = M2 ->
|
||||
case lists:keyfind(list_to_atom(Scheme), 1, Protocols) of
|
||||
{_, Port} ->
|
||||
{ok, Scheme, maps:get(userinfo, M2, ""), Host, Port, Path, maps:get(query, M2, "")};
|
||||
_ ->
|
||||
{error, unknown_protocol}
|
||||
end;
|
||||
{error, Atom, _} ->
|
||||
{error, Atom}
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user