]> granicus.if.org Git - ejabberd/commitdiff
Add announcement of offline feature to service discovery (EJAB-234)
authorBadlop <badlop@process-one.net>
Tue, 30 Jun 2009 16:51:15 +0000 (16:51 +0000)
committerBadlop <badlop@process-one.net>
Tue, 30 Jun 2009 16:51:15 +0000 (16:51 +0000)
SVN Revision: 2344

src/mod_offline.erl
src/mod_offline_odbc.erl

index c9fe276c13233c39ee450934b3d855b0e60e1eaf..0a79d6a2846dbdc1cd429e945195204b7752b6f9 100644 (file)
@@ -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() ->
index 507da1f11f4e241bf83c45c735b811e77519fc40..9add941df7e398b6e5ad7189d476aee0a5fe32cd 100644 (file)
@@ -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