diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2018-01-23 10:54:52 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2018-01-23 10:54:52 +0300 |
commit | ba2b650464bd3aae2b6b0f3a3177476360cb6d08 (patch) | |
tree | 5d55501f76edcdcfe145ba0c3367a54ea0314e5c /src/mod_multicast.erl | |
parent | Do 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.erl | 31 |
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")}]. |