diff options
Diffstat (limited to 'src/mod_disco.erl')
-rw-r--r-- | src/mod_disco.erl | 85 |
1 files changed, 37 insertions, 48 deletions
diff --git a/src/mod_disco.erl b/src/mod_disco.erl index f0d23a0ca..fd992d49d 100644 --- a/src/mod_disco.erl +++ b/src/mod_disco.erl @@ -37,8 +37,7 @@ get_local_features/5, get_local_services/5, process_sm_iq_items/1, process_sm_iq_info/1, get_sm_identity/5, get_sm_features/5, get_sm_items/5, - get_info/5, transform_module_options/1, mod_opt_type/1, - mod_options/1, depends/2]). + get_info/5, mod_opt_type/1, mod_options/1, depends/2]). -include("logger.hrl"). -include("translate.hrl"). @@ -63,7 +62,7 @@ start(Host, Opts) -> catch ets:new(disco_extra_domains, [named_table, ordered_set, public, {heir, erlang:group_leader(), none}]), - ExtraDomains = gen_mod:get_opt(extra_domains, Opts), + ExtraDomains = mod_disco_opt:extra_domains(Opts), lists:foreach(fun (Domain) -> register_extra_domain(Host, Domain) end, @@ -112,19 +111,16 @@ stop(Host) -> ok. reload(Host, NewOpts, OldOpts) -> - case gen_mod:is_equal_opt(extra_domains, NewOpts, OldOpts) of - {false, NewDomains, OldDomains} -> - lists:foreach( - fun(Domain) -> - register_extra_domain(Host, Domain) - end, NewDomains -- OldDomains), - lists:foreach( - fun(Domain) -> - unregister_extra_domain(Host, Domain) - end, OldDomains -- NewDomains); - true -> - ok - end. + NewDomains = mod_disco_opt:extra_domains(NewOpts), + OldDomains = mod_disco_opt:extra_domains(OldOpts), + lists:foreach( + fun(Domain) -> + register_extra_domain(Host, Domain) + end, NewDomains -- OldDomains), + lists:foreach( + fun(Domain) -> + unregister_extra_domain(Host, Domain) + end, OldDomains -- NewDomains). -spec register_extra_domain(binary(), binary()) -> true. register_extra_domain(Host, Domain) -> @@ -177,7 +173,7 @@ process_local_iq_info(#iq{type = get, lang = Lang, binary(), binary()) -> [identity()]. get_local_identity(Acc, _From, To, <<"">>, _Lang) -> Host = To#jid.lserver, - Name = gen_mod:get_module_opt(Host, ?MODULE, name), + Name = mod_disco_opt:name(Host), Acc ++ [#identity{category = <<"server">>, type = <<"im">>, name = Name}]; @@ -238,7 +234,7 @@ get_vh_services(Host) -> Hosts = lists:sort(fun (H1, H2) -> byte_size(H1) >= byte_size(H2) end, - ejabberd_config:get_myhosts()), + ejabberd_option:hosts()), lists:filter(fun (H) -> case lists:dropwhile(fun (VH) -> not @@ -374,23 +370,6 @@ get_user_resources(User, Server) -> [#disco_item{jid = jid:make(User, Server, Resource), name = User} || Resource <- lists:sort(Rs)]. --spec transform_module_options(gen_mod:opts()) -> gen_mod:opts(). -transform_module_options(Opts) -> - lists:map( - fun({server_info, Infos}) -> - NewInfos = lists:map( - fun({Modules, Name, URLs}) -> - [[{modules, Modules}, - {name, Name}, - {urls, URLs}]]; - (Opt) -> - Opt - end, Infos), - {server_info, NewInfos}; - (Opt) -> - Opt - end, Opts). - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% Support for: XEP-0157 Contact Addresses for XMPP Services @@ -411,7 +390,7 @@ get_info(Acc, _, _, _Node, _) -> Acc. -spec get_fields(binary(), module()) -> [xdata_field()]. get_fields(Host, Module) -> - Fields = gen_mod:get_module_opt(Host, ?MODULE, server_info), + Fields = mod_disco_opt:server_info(Host), Fields1 = lists:filter(fun ({Modules, _, _}) -> case Modules of all -> true; @@ -429,19 +408,29 @@ depends(_Host, _Opts) -> []. mod_opt_type(extra_domains) -> - fun (Hs) -> [iolist_to_binary(H) || H <- Hs] end; -mod_opt_type(name) -> fun iolist_to_binary/1; + econf:list(econf:binary()); +mod_opt_type(name) -> + econf:binary(); mod_opt_type(server_info) -> - fun (L) -> - lists:map(fun (Opts) -> - Mods = proplists:get_value(modules, Opts, all), - Name = proplists:get_value(name, Opts, <<>>), - URLs = proplists:get_value(urls, Opts, []), - {Mods, Name, URLs} - end, - L) - end. - + econf:list( + econf:and_then( + econf:options( + #{name => econf:binary(), + urls => econf:list(econf:binary()), + modules => + econf:either( + all, + econf:list(econf:beam()))}), + fun(Opts) -> + Mods = proplists:get_value(modules, Opts, all), + Name = proplists:get_value(name, Opts, <<>>), + URLs = proplists:get_value(urls, Opts, []), + {Mods, Name, URLs} + end)). + +-spec mod_options(binary()) -> [{server_info, + [{all | [module()], binary(), [binary()]}]} | + {atom(), any()}]. mod_options(_Host) -> [{extra_domains, []}, {server_info, []}, |