aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_config_transformer.erl22
-rw-r--r--src/ejabberd_stun.erl15
-rw-r--r--src/mod_stun_disco.erl20
3 files changed, 39 insertions, 18 deletions
diff --git a/src/ejabberd_config_transformer.erl b/src/ejabberd_config_transformer.erl
index 26a475f3d..2256d48c3 100644
--- a/src/ejabberd_config_transformer.erl
+++ b/src/ejabberd_config_transformer.erl
@@ -245,8 +245,9 @@ filter(_, _, _, _) ->
%%%===================================================================
transform_listener(Opts, Acc) ->
Opts1 = transform_request_handlers(Opts),
- Opts2 = remove_inet_options(Opts1),
- collect_listener_certfiles(Opts2, Acc).
+ Opts2 = transform_turn_ip(Opts1),
+ Opts3 = remove_inet_options(Opts2),
+ collect_listener_certfiles(Opts3, Acc).
transform_request_handlers(Opts) ->
case lists:keyfind(module, 1, Opts) of
@@ -258,6 +259,14 @@ transform_request_handlers(Opts) ->
Opts
end.
+transform_turn_ip(Opts) ->
+ case lists:keyfind(module, 1, Opts) of
+ {_, ejabberd_stun} ->
+ replace_turn_ip(Opts);
+ _ ->
+ Opts
+ end.
+
replace_request_handlers(Opts) ->
Handlers = proplists:get_value(request_handlers, Opts, []),
Handlers1 =
@@ -322,6 +331,15 @@ remove_xmlrpc_access_commands(Opts) ->
true
end, Opts).
+replace_turn_ip(Opts) ->
+ lists:filtermap(
+ fun({turn_ip, Val}) ->
+ warn_replaced_option(turn_ip, turn_v4_ip),
+ {true, {turn_v4_ip, Val}};
+ (_) ->
+ true
+ end, Opts).
+
remove_inet_options(Opts) ->
lists:filter(
fun({Opt, _}) when Opt == inet; Opt == inet6 ->
diff --git a/src/ejabberd_stun.erl b/src/ejabberd_stun.erl
index 459697255..68e74d861 100644
--- a/src/ejabberd_stun.erl
+++ b/src/ejabberd_stun.erl
@@ -101,20 +101,20 @@ prepare_turn_opts(Opts, _UseTurn = false) ->
set_certfile(Opts);
prepare_turn_opts(Opts, _UseTurn = true) ->
NumberOfMyHosts = length(ejabberd_option:hosts()),
- TurnIP = case proplists:get_value(turn_ip, Opts) of
+ TurnIP = case proplists:get_value(turn_v4_ip, Opts) of
undefined ->
MyIP = misc:get_my_ip(),
case MyIP of
{127, _, _, _} ->
- ?WARNING_MSG("Option 'turn_ip' is undefined and "
- "the server's hostname doesn't "
+ ?WARNING_MSG("Option 'turn_v4_ip' is undefined "
+ "and the server's hostname doesn't "
"resolve to a public IPv4 address, "
"most likely the TURN relay won't be "
"working properly", []);
_ ->
ok
end,
- [{turn_ip, MyIP}];
+ [{turn_v4_ip, MyIP}];
_ ->
[]
end,
@@ -161,8 +161,10 @@ listen_opt_type(use_turn) ->
econf:bool();
listen_opt_type(ip) ->
econf:ip();
-listen_opt_type(turn_ip) ->
+listen_opt_type(turn_v4_ip) ->
econf:ipv4();
+listen_opt_type(turn_v6_ip) ->
+ econf:ipv6();
listen_opt_type(auth_type) ->
econf:enum([anonymous, user]);
listen_opt_type(auth_realm) ->
@@ -183,7 +185,8 @@ listen_opt_type(certfile) ->
listen_options() ->
[{shaper, none},
{use_turn, false},
- {turn_ip, undefined},
+ {turn_v4_ip, undefined},
+ {turn_v6_ip, undefined},
{auth_type, user},
{auth_realm, undefined},
{tls, false},
diff --git a/src/mod_stun_disco.erl b/src/mod_stun_disco.erl
index 377d25227..32b0cae98 100644
--- a/src/mod_stun_disco.erl
+++ b/src/mod_stun_disco.erl
@@ -602,8 +602,8 @@ parse_listener({{Port, _Addr, Transport}, ?STUN_MODULE, Opts}) ->
case get_listener_ip(Opts) of
{127, _, _, _} = Addr ->
?INFO_MSG("Won't auto-announce STUN/TURN service with loopback "
- "address: ~s:~B (~s), please specify a public 'turn_ip'",
- [misc:ip_to_list(Addr), Port, Transport]),
+ "address: ~s:~B (~s), please specify a public "
+ "'turn_v4_ip'", [misc:ip_to_list(Addr), Port, Transport]),
[];
Addr ->
Host = maybe_resolve(Addr),
@@ -632,16 +632,16 @@ parse_listener({_EndPoint, Module, _Opts}) ->
[].
-spec get_listener_ip(map()) -> inet:ip_address().
-get_listener_ip(#{ip := { 0, 0, 0, 0}} = Opts) -> get_turn_ip(Opts);
-get_listener_ip(#{ip := {127, _, _, _}} = Opts) -> get_turn_ip(Opts);
-get_listener_ip(#{ip := { 10, _, _, _}} = Opts) -> get_turn_ip(Opts);
-get_listener_ip(#{ip := {172, 16, _, _}} = Opts) -> get_turn_ip(Opts);
-get_listener_ip(#{ip := {192, 168, _, _}} = Opts) -> get_turn_ip(Opts);
+get_listener_ip(#{ip := { 0, 0, 0, 0}} = Opts) -> get_turn_v4_ip(Opts);
+get_listener_ip(#{ip := {127, _, _, _}} = Opts) -> get_turn_v4_ip(Opts);
+get_listener_ip(#{ip := { 10, _, _, _}} = Opts) -> get_turn_v4_ip(Opts);
+get_listener_ip(#{ip := {172, 16, _, _}} = Opts) -> get_turn_v4_ip(Opts);
+get_listener_ip(#{ip := {192, 168, _, _}} = Opts) -> get_turn_v4_ip(Opts);
get_listener_ip(#{ip := IP}) -> IP.
--spec get_turn_ip(map()) -> inet:ip_address().
-get_turn_ip(#{turn_ip := {_, _, _, _} = TurnIP}) -> TurnIP;
-get_turn_ip(#{turn_ip := undefined}) -> misc:get_my_ip().
+-spec get_turn_v4_ip(map()) -> inet:ip_address().
+get_turn_v4_ip(#{turn_v4_ip := {_, _, _, _} = TurnIP}) -> TurnIP;
+get_turn_v4_ip(#{turn_v4_ip := undefined}) -> misc:get_my_ip().
-spec is_restricted(map()) -> boolean().
is_restricted(#{auth_type := user}) -> true;