aboutsummaryrefslogtreecommitdiff
path: root/src/mod_multicast.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-01-23 10:54:52 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-01-23 10:54:52 +0300
commitba2b650464bd3aae2b6b0f3a3177476360cb6d08 (patch)
tree5d55501f76edcdcfe145ba0c3367a54ea0314e5c /src/mod_multicast.erl
parentDo not try to start ezlib application too frequently (diff)
Introduce new gen_mod callback: mod_options/1
The callback is supposed to provide known options and their default values, as long as the documentation. Passing default values into get_mod functions is now deprecated: all defaults should be provided by the Mod:mod_options/1 callback.
Diffstat (limited to 'src/mod_multicast.erl')
-rw-r--r--src/mod_multicast.erl31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/mod_multicast.erl b/src/mod_multicast.erl
index f2a48ecaf..e6b2a93d2 100644
--- a/src/mod_multicast.erl
+++ b/src/mod_multicast.erl
@@ -40,7 +40,7 @@
-export([init/1, handle_info/2, handle_call/3,
handle_cast/2, terminate/2, code_change/3]).
--export([purge_loop/1, mod_opt_type/1, depends/2]).
+-export([purge_loop/1, mod_opt_type/1, mod_options/1, depends/2]).
-include("ejabberd.hrl").
-include("logger.hrl").
@@ -132,10 +132,9 @@ reload(LServerS, NewOpts, OldOpts) ->
init([LServerS, Opts]) ->
process_flag(trap_exit, true),
- LServiceS = gen_mod:get_opt_host(LServerS, Opts,
- <<"multicast.@HOST@">>),
- Access = gen_mod:get_opt(access, Opts, all),
- SLimits = build_service_limit_record(gen_mod:get_opt(limits, Opts, [])),
+ [LServiceS|_] = gen_mod:get_opt_hosts(LServerS, Opts),
+ Access = gen_mod:get_opt(access, Opts),
+ SLimits = build_service_limit_record(gen_mod:get_opt(limits, Opts)),
create_cache(),
try_start_loop(),
create_pool(),
@@ -150,10 +149,9 @@ handle_call(stop, _From, State) ->
handle_cast({reload, NewOpts, NewOpts},
#state{lserver = LServerS, lservice = OldLServiceS} = State) ->
- Access = gen_mod:get_opt(access, NewOpts, all),
- SLimits = build_service_limit_record(gen_mod:get_opt(limits, NewOpts, [])),
- NewLServiceS = gen_mod:get_opt_host(LServerS, NewOpts,
- <<"multicast.@HOST@">>),
+ Access = gen_mod:get_opt(access, NewOpts),
+ SLimits = build_service_limit_record(gen_mod:get_opt(limits, NewOpts)),
+ [NewLServiceS|_] = gen_mod:get_opt_hosts(LServerS, NewOpts),
if NewLServiceS /= OldLServiceS ->
ejabberd_router:register_route(NewLServiceS, LServerS),
ejabberd_router:unregister_route(OldLServiceS);
@@ -261,8 +259,7 @@ process_iq(_, _) ->
-define(FEATURE(Feat), Feat).
iq_disco_info(From, Lang, State) ->
- Name = gen_mod:get_module_opt(State#state.lserver, ?MODULE,
- name, ?T("Multicast")),
+ Name = gen_mod:get_module_opt(State#state.lserver, ?MODULE, name),
#disco_info{
identities = [#identity{category = <<"service">>,
type = <<"multicast">>,
@@ -1121,6 +1118,8 @@ depends(_Host, _Opts) ->
mod_opt_type(access) ->
fun acl:access_rules_validator/1;
mod_opt_type(host) -> fun iolist_to_binary/1;
+mod_opt_type(hosts) ->
+ fun(L) -> lists:map(fun iolist_to_binary/1, L) end;
mod_opt_type(name) -> fun iolist_to_binary/1;
mod_opt_type({limits, Type}) when (Type == local) or (Type == remote) ->
fun(L) ->
@@ -1130,5 +1129,11 @@ mod_opt_type({limits, Type}) when (Type == local) or (Type == remote) ->
({message, I} = O) when is_integer(I) -> O;
({presence, I} = O) when is_integer(I) -> O
end, L)
- end;
-mod_opt_type(_) -> [access, host, {limits, local}, {limits, remote}, name].
+ end.
+
+mod_options(_Host) ->
+ [{access, all},
+ {host, <<"multicast.@HOST@">>},
+ {hosts, []},
+ {limits, [{local, []}, {remote, []}]},
+ {name, ?T("Multicast")}].