diff --git a/src/mod_disco.erl b/src/mod_disco.erl index 2b77cf762..8f8093793 100644 --- a/src/mod_disco.erl +++ b/src/mod_disco.erl @@ -51,16 +51,6 @@ -export_type([features_acc/0, items_acc/0]). start(Host, Opts) -> - gen_iq_handler:add_iq_handler(ejabberd_local, Host, - ?NS_DISCO_ITEMS, ?MODULE, - process_local_iq_items), - gen_iq_handler:add_iq_handler(ejabberd_local, Host, - ?NS_DISCO_INFO, ?MODULE, - process_local_iq_info), - gen_iq_handler:add_iq_handler(ejabberd_sm, Host, - ?NS_DISCO_ITEMS, ?MODULE, process_sm_iq_items), - gen_iq_handler:add_iq_handler(ejabberd_sm, Host, - ?NS_DISCO_INFO, ?MODULE, process_sm_iq_info), catch ets:new(disco_extra_domains, [named_table, ordered_set, public, {heir, erlang:group_leader(), none}]), @@ -69,45 +59,23 @@ start(Host, Opts) -> register_extra_domain(Host, Domain) end, ExtraDomains), - ejabberd_hooks:add(disco_local_items, Host, ?MODULE, - get_local_services, 100), - ejabberd_hooks:add(disco_local_features, Host, ?MODULE, - get_local_features, 100), - ejabberd_hooks:add(disco_local_identity, Host, ?MODULE, - get_local_identity, 100), - ejabberd_hooks:add(disco_sm_items, Host, ?MODULE, - get_sm_items, 100), - ejabberd_hooks:add(disco_sm_features, Host, ?MODULE, - get_sm_features, 100), - ejabberd_hooks:add(disco_sm_identity, Host, ?MODULE, - get_sm_identity, 100), - ejabberd_hooks:add(disco_info, Host, ?MODULE, get_info, - 100), - ok. + {ok, [{iq_handler, ejabberd_local, ?NS_DISCO_ITEMS, + ?MODULE, process_local_iq_items}, + {iq_handler, ejabberd_local, ?NS_DISCO_INFO, + ?MODULE, process_local_iq_info}, + {iq_handler, ejabberd_sm, ?NS_DISCO_ITEMS, + ?MODULE, process_sm_iq_items}, + {iq_handler, ejabberd_sm, ?NS_DISCO_INFO, + ?MODULE, process_sm_iq_info}, + {hook, disco_local_items, ?MODULE, get_local_services, 100}, + {hook, disco_local_features, ?MODULE, get_local_features, 100}, + {hook, disco_local_identity, ?MODULE, get_local_identity, 100}, + {hook, disco_sm_items, ?MODULE, get_sm_items, 100}, + {hook, disco_sm_features, ?MODULE, get_sm_features, 100}, + {hook, disco_sm_identity, ?MODULE, get_sm_identity, 100}, + {hook, disco_info, ?MODULE, get_info, 100}]}. stop(Host) -> - ejabberd_hooks:delete(disco_sm_identity, Host, ?MODULE, - get_sm_identity, 100), - ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE, - get_sm_features, 100), - ejabberd_hooks:delete(disco_sm_items, Host, ?MODULE, - get_sm_items, 100), - ejabberd_hooks:delete(disco_local_identity, Host, - ?MODULE, get_local_identity, 100), - ejabberd_hooks:delete(disco_local_features, Host, - ?MODULE, get_local_features, 100), - ejabberd_hooks:delete(disco_local_items, Host, ?MODULE, - get_local_services, 100), - ejabberd_hooks:delete(disco_info, Host, ?MODULE, - get_info, 100), - gen_iq_handler:remove_iq_handler(ejabberd_local, Host, - ?NS_DISCO_ITEMS), - gen_iq_handler:remove_iq_handler(ejabberd_local, Host, - ?NS_DISCO_INFO), - gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, - ?NS_DISCO_ITEMS), - gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, - ?NS_DISCO_INFO), catch ets:match_delete(disco_extra_domains, {{'_', Host}}), ok.