diff options
author | Badlop <badlop@process-one.net> | 2009-06-30 16:51:15 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2009-06-30 16:51:15 +0000 |
commit | f145a32b79c7c30fcaa5934ae77ae1bce9c12f2c (patch) | |
tree | 34e164e22b910abb6feda9ae135f5d1458e86062 | |
parent | minor bugfixes on dag nodes (diff) |
Add announcement of offline feature to service discovery (EJAB-234)
SVN Revision: 2344
-rw-r--r-- | src/mod_offline.erl | 23 | ||||
-rw-r--r-- | src/mod_offline_odbc.erl | 22 |
2 files changed, 45 insertions, 0 deletions
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 |