1
0
Fork 0
mirror of https://github.com/processone/ejabberd synced 2025-10-03 01:39:35 +02:00

Register hooks and iq_handler using the gen_mod support for registrations

This commit is contained in:
Badlop 2025-03-21 12:46:05 +01:00
parent b8cb1bbdcf
commit d9e86600dc
2 changed files with 26 additions and 67 deletions

View file

@ -64,29 +64,22 @@ start(Host, Opts) ->
case Mod:init(Host, Opts) of case Mod:init(Host, Opts) of
ok -> ok ->
init_cache(Mod, Host, Opts), init_cache(Mod, Host, Opts),
ejabberd_hooks:add(bounce_sm_packet, Host, ?MODULE, bounce_sm_packet, 50), {ok,
ejabberd_hooks:add(disco_sm_features, Host, ?MODULE, disco_sm_features, 50), [{hook, bounce_sm_packet, bounce_sm_packet, 50},
ejabberd_hooks:add(remove_user, Host, ?MODULE, remove_user, 50), {hook, disco_sm_features, disco_sm_features, 50},
ejabberd_hooks:add(roster_get, Host, ?MODULE, get_mix_roster_items, 50), {hook, remove_user, remove_user, 50},
ejabberd_hooks:add(webadmin_user, Host, ?MODULE, webadmin_user, 50), {hook, roster_get, get_mix_roster_items, 50},
ejabberd_hooks:add(webadmin_menu_hostuser, Host, ?MODULE, webadmin_menu_hostuser, 50), {hook, webadmin_user, webadmin_user, 50},
ejabberd_hooks:add(webadmin_page_hostuser, Host, ?MODULE, webadmin_page_hostuser, 50), {hook, webadmin_menu_hostuser, webadmin_menu_hostuser, 50},
gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_MIX_PAM_0, ?MODULE, process_iq), {hook, webadmin_page_hostuser, webadmin_page_hostuser, 50},
gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_MIX_PAM_2, ?MODULE, process_iq); {iq_handler, ejabberd_sm, ?NS_MIX_PAM_0, process_iq},
{iq_handler, ejabberd_sm, ?NS_MIX_PAM_2, process_iq}]};
Err -> Err ->
Err Err
end. end.
stop(Host) -> stop(_Host) ->
ejabberd_hooks:delete(bounce_sm_packet, Host, ?MODULE, bounce_sm_packet, 50), ok.
ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE, disco_sm_features, 50),
ejabberd_hooks:delete(remove_user, Host, ?MODULE, remove_user, 50),
ejabberd_hooks:delete(roster_get, Host, ?MODULE, get_mix_roster_items, 50),
ejabberd_hooks:delete(webadmin_user, Host, ?MODULE, webadmin_user, 50),
ejabberd_hooks:delete(webadmin_menu_hostuser, Host, ?MODULE, webadmin_menu_hostuser, 50),
ejabberd_hooks:delete(webadmin_page_hostuser, Host, ?MODULE, webadmin_page_hostuser, 50),
gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MIX_PAM_0),
gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MIX_PAM_2).
reload(Host, NewOpts, OldOpts) -> reload(Host, NewOpts, OldOpts) ->
NewMod = gen_mod:db_mod(NewOpts, ?MODULE), NewMod = gen_mod:db_mod(NewOpts, ?MODULE),

View file

@ -47,13 +47,22 @@
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% gen_mod callbacks. %% gen_mod callbacks.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
-spec start(binary(), gen_mod:opts()) -> ok. -spec start(binary(), gen_mod:opts()) -> {ok, [gen_mod:registration()]}.
start(Host, _Opts) -> start(_Host, _Opts) ->
register_hooks(Host). {ok,
[{hook, c2s_session_pending, c2s_session_pending, 50},
{hook, c2s_session_resumed, c2s_session_resumed, 50},
{hook, c2s_copy_session, c2s_copy_session, 50},
{hook, c2s_handle_cast, c2s_handle_cast, 40},
{hook, c2s_handle_info, c2s_handle_info, 50},
{hook, c2s_handle_send, c2s_stanza, 50},
%% Wait for ejabberd_pkix before running our ejabberd_started/0, so that we
%% don't initiate s2s connections before certificates are loaded:
{hook, ejabberd_started, ejabberd_started, 90, global}]}.
-spec stop(binary()) -> ok. -spec stop(binary()) -> ok.
stop(Host) -> stop(_Host) ->
unregister_hooks(Host). ok.
-spec reload(binary(), gen_mod:opts(), gen_mod:opts()) -> ok. -spec reload(binary(), gen_mod:opts(), gen_mod:opts()) -> ok.
reload(_Host, _NewOpts, _OldOpts) -> reload(_Host, _NewOpts, _OldOpts) ->
@ -119,49 +128,6 @@ mod_doc() ->
"out as per the 'resume_timeout' option. " "out as per the 'resume_timeout' option. "
"The default value is 'true'.")}}]}. "The default value is 'true'.")}}]}.
%%--------------------------------------------------------------------
%% Register/unregister hooks.
%%--------------------------------------------------------------------
-spec register_hooks(binary()) -> ok.
register_hooks(Host) ->
ejabberd_hooks:add(c2s_session_pending, Host, ?MODULE,
c2s_session_pending, 50),
ejabberd_hooks:add(c2s_session_resumed, Host, ?MODULE,
c2s_session_resumed, 50),
ejabberd_hooks:add(c2s_copy_session, Host, ?MODULE,
c2s_copy_session, 50),
ejabberd_hooks:add(c2s_handle_cast, Host, ?MODULE,
c2s_handle_cast, 40),
ejabberd_hooks:add(c2s_handle_info, Host, ?MODULE,
c2s_handle_info, 50),
ejabberd_hooks:add(c2s_handle_send, Host, ?MODULE,
c2s_stanza, 50),
% Wait for ejabberd_pkix before running our ejabberd_started/0, so that we
% don't initiate s2s connections before certificates are loaded:
ejabberd_hooks:add(ejabberd_started, ?MODULE, ejabberd_started, 90).
-spec unregister_hooks(binary()) -> ok.
unregister_hooks(Host) ->
ejabberd_hooks:delete(c2s_session_pending, Host, ?MODULE,
c2s_session_pending, 50),
ejabberd_hooks:delete(c2s_session_resumed, Host, ?MODULE,
c2s_session_resumed, 50),
ejabberd_hooks:delete(c2s_copy_session, Host, ?MODULE,
c2s_copy_session, 50),
ejabberd_hooks:delete(c2s_handle_cast, Host, ?MODULE,
c2s_handle_cast, 40),
ejabberd_hooks:delete(c2s_handle_info, Host, ?MODULE,
c2s_handle_info, 50),
ejabberd_hooks:delete(c2s_handle_send, Host, ?MODULE,
c2s_stanza, 50),
case gen_mod:is_loaded_elsewhere(Host, ?MODULE) of
false ->
ejabberd_hooks:delete(
ejabberd_started, ?MODULE, ejabberd_started, 90);
true ->
ok
end.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Hook callbacks. %% Hook callbacks.
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------