From d9e86600dc0c1a043cf5a3cbf5557a7ab1493e41 Mon Sep 17 00:00:00 2001 From: Badlop Date: Fri, 21 Mar 2025 12:46:05 +0100 Subject: [PATCH] Register hooks and iq_handler using the gen_mod support for registrations --- src/mod_mix_pam.erl | 31 ++++++++----------- src/mod_push_keepalive.erl | 62 +++++++++----------------------------- 2 files changed, 26 insertions(+), 67 deletions(-) diff --git a/src/mod_mix_pam.erl b/src/mod_mix_pam.erl index 9738205de..bae6133fb 100644 --- a/src/mod_mix_pam.erl +++ b/src/mod_mix_pam.erl @@ -64,29 +64,22 @@ start(Host, Opts) -> case Mod:init(Host, Opts) of ok -> init_cache(Mod, Host, Opts), - ejabberd_hooks:add(bounce_sm_packet, Host, ?MODULE, bounce_sm_packet, 50), - ejabberd_hooks:add(disco_sm_features, Host, ?MODULE, disco_sm_features, 50), - ejabberd_hooks:add(remove_user, Host, ?MODULE, remove_user, 50), - ejabberd_hooks:add(roster_get, Host, ?MODULE, get_mix_roster_items, 50), - ejabberd_hooks:add(webadmin_user, Host, ?MODULE, webadmin_user, 50), - ejabberd_hooks:add(webadmin_menu_hostuser, Host, ?MODULE, webadmin_menu_hostuser, 50), - ejabberd_hooks:add(webadmin_page_hostuser, Host, ?MODULE, webadmin_page_hostuser, 50), - gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_MIX_PAM_0, ?MODULE, process_iq), - gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_MIX_PAM_2, ?MODULE, process_iq); + {ok, + [{hook, bounce_sm_packet, bounce_sm_packet, 50}, + {hook, disco_sm_features, disco_sm_features, 50}, + {hook, remove_user, remove_user, 50}, + {hook, roster_get, get_mix_roster_items, 50}, + {hook, webadmin_user, webadmin_user, 50}, + {hook, webadmin_menu_hostuser, webadmin_menu_hostuser, 50}, + {hook, webadmin_page_hostuser, webadmin_page_hostuser, 50}, + {iq_handler, ejabberd_sm, ?NS_MIX_PAM_0, process_iq}, + {iq_handler, ejabberd_sm, ?NS_MIX_PAM_2, process_iq}]}; Err -> Err end. -stop(Host) -> - ejabberd_hooks:delete(bounce_sm_packet, Host, ?MODULE, bounce_sm_packet, 50), - 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). +stop(_Host) -> + ok. reload(Host, NewOpts, OldOpts) -> NewMod = gen_mod:db_mod(NewOpts, ?MODULE), diff --git a/src/mod_push_keepalive.erl b/src/mod_push_keepalive.erl index 2c43282cd..33bd2b53e 100644 --- a/src/mod_push_keepalive.erl +++ b/src/mod_push_keepalive.erl @@ -47,13 +47,22 @@ %%-------------------------------------------------------------------- %% gen_mod callbacks. %%-------------------------------------------------------------------- --spec start(binary(), gen_mod:opts()) -> ok. -start(Host, _Opts) -> - register_hooks(Host). +-spec start(binary(), gen_mod:opts()) -> {ok, [gen_mod:registration()]}. +start(_Host, _Opts) -> + {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. -stop(Host) -> - unregister_hooks(Host). +stop(_Host) -> + ok. -spec reload(binary(), gen_mod:opts(), gen_mod:opts()) -> ok. reload(_Host, _NewOpts, _OldOpts) -> @@ -119,49 +128,6 @@ mod_doc() -> "out as per the 'resume_timeout' option. " "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. %%--------------------------------------------------------------------