From f145a32b79c7c30fcaa5934ae77ae1bce9c12f2c Mon Sep 17 00:00:00 2001 From: Badlop Date: Tue, 30 Jun 2009 16:51:15 +0000 Subject: [PATCH] Add announcement of offline feature to service discovery (EJAB-234) SVN Revision: 2344 --- src/mod_offline.erl | 23 +++++++++++++++++++++++ src/mod_offline_odbc.erl | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/mod_offline.erl b/src/mod_offline.erl index c9fe276c1..0a79d6a28 100644 --- a/src/mod_offline.erl +++ b/src/mod_offline.erl @@ -35,6 +35,7 @@ store_packet/3, resend_offline_messages/2, pop_offline_messages/3, + get_sm_features/5, remove_expired_messages/0, remove_old_messages/1, remove_user/2, @@ -69,6 +70,10 @@ start(Host, Opts) -> ?MODULE, remove_user, 50), ejabberd_hooks:add(anonymous_purge_hook, Host, ?MODULE, remove_user, 50), + ejabberd_hooks:add(disco_sm_features, Host, + ?MODULE, get_sm_features, 50), + ejabberd_hooks:add(disco_local_features, Host, + ?MODULE, get_sm_features, 50), ejabberd_hooks:add(webadmin_page_host, Host, ?MODULE, webadmin_page, 50), ejabberd_hooks:add(webadmin_user, Host, @@ -144,6 +149,8 @@ stop(Host) -> ?MODULE, remove_user, 50), ejabberd_hooks:delete(anonymous_purge_hook, Host, ?MODULE, remove_user, 50), + ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE, get_sm_features, 50), + ejabberd_hooks:delete(disco_local_features, Host, ?MODULE, get_sm_features, 50), ejabberd_hooks:delete(webadmin_page_host, Host, ?MODULE, webadmin_page, 50), ejabberd_hooks:delete(webadmin_user, Host, @@ -154,6 +161,21 @@ stop(Host) -> exit(whereis(Proc), stop), {wait, Proc}. +get_sm_features(Acc, _From, _To, "", _Lang) -> + Feats = case Acc of + {result, I} -> I; + _ -> [] + end, + {result, Feats ++ [?NS_FEATURE_MSGOFFLINE]}; + +get_sm_features(_Acc, _From, _To, ?NS_FEATURE_MSGOFFLINE, _Lang) -> + %% override all lesser features... + {result, []}; + +get_sm_features(Acc, _From, _To, _Node, _Lang) -> + Acc. + + store_packet(From, To, Packet) -> Type = xml:get_tag_attr_s("type", Packet), if @@ -317,6 +339,7 @@ pop_offline_messages(Ls, User, Server) -> Ls end. + remove_expired_messages() -> TimeStamp = now(), F = fun() -> diff --git a/src/mod_offline_odbc.erl b/src/mod_offline_odbc.erl index 507da1f11..9add941df 100644 --- a/src/mod_offline_odbc.erl +++ b/src/mod_offline_odbc.erl @@ -36,6 +36,7 @@ stop/1, store_packet/3, pop_offline_messages/3, + get_sm_features/5, remove_user/2, webadmin_page/3, webadmin_user/4, @@ -63,6 +64,10 @@ start(Host, Opts) -> ?MODULE, remove_user, 50), ejabberd_hooks:add(anonymous_purge_hook, Host, ?MODULE, remove_user, 50), + ejabberd_hooks:add(disco_sm_features, Host, + ?MODULE, get_sm_features, 50), + ejabberd_hooks:add(disco_local_features, Host, + ?MODULE, get_sm_features, 50), ejabberd_hooks:add(webadmin_page_host, Host, ?MODULE, webadmin_page, 50), ejabberd_hooks:add(webadmin_user, Host, @@ -155,6 +160,8 @@ stop(Host) -> ?MODULE, remove_user, 50), ejabberd_hooks:delete(anonymous_purge_hook, Host, ?MODULE, remove_user, 50), + ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE, get_sm_features, 50), + ejabberd_hooks:delete(disco_local_features, Host, ?MODULE, get_sm_features, 50), ejabberd_hooks:delete(webadmin_page_host, Host, ?MODULE, webadmin_page, 50), ejabberd_hooks:delete(webadmin_user, Host, @@ -165,6 +172,21 @@ stop(Host) -> exit(whereis(Proc), stop), ok. +get_sm_features(Acc, _From, _To, "", _Lang) -> + Feats = case Acc of + {result, I} -> I; + _ -> [] + end, + {result, Feats ++ [?NS_FEATURE_MSGOFFLINE]}; + +get_sm_features(_Acc, _From, _To, ?NS_FEATURE_MSGOFFLINE, _Lang) -> + %% override all lesser features... + {result, []}; + +get_sm_features(Acc, _From, _To, _Node, _Lang) -> + Acc. + + store_packet(From, To, Packet) -> Type = xml:get_tag_attr_s("type", Packet), if