summaryrefslogtreecommitdiff
path: root/src/mod_mam.erl
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2015-12-16 00:08:23 +0100
committerHolger Weiss <holger@zedat.fu-berlin.de>2015-12-16 00:08:23 +0100
commit5fd1aa0d046aedc4d3b61a150899085ad863ca0f (patch)
tree032bee60f8c36ef7f7f852a4a21ee952631ea956 /src/mod_mam.erl
parentUse MUC domain for 'by' attribute of <stanza-id/> (diff)
Advertise MAM in disco info for account/room JID
As per XEP-0313 version 0.2 and newer, advertise the MAM feature in the service discovery information for the bare account (or MUC room) JID. Some clients check the server's discovery information instead, so we'll continue to advertise the feature there as well.
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r--src/mod_mam.erl17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl
index 54572fb0..dba8b1cb 100644
--- a/src/mod_mam.erl
+++ b/src/mod_mam.erl
@@ -34,8 +34,8 @@
-export([start/2, stop/1]).
-export([user_send_packet/4, user_receive_packet/5,
- process_iq_v0_2/3, process_iq_v0_3/3, remove_user/2,
- remove_user/3, mod_opt_type/1, muc_process_iq/4,
+ process_iq_v0_2/3, process_iq_v0_3/3, disco_sm_features/5,
+ remove_user/2, remove_user/3, mod_opt_type/1, muc_process_iq/4,
muc_filter_message/5]).
-include_lib("stdlib/include/ms_transform.hrl").
@@ -88,6 +88,8 @@ start(Host, Opts) ->
muc_filter_message, 50),
ejabberd_hooks:add(muc_process_iq, Host, ?MODULE,
muc_process_iq, 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(anonymous_purge_hook, Host, ?MODULE,
@@ -130,6 +132,8 @@ stop(Host) ->
gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MAM_0),
gen_iq_handler:remove_iq_handler(ejabberd_local, Host, ?NS_MAM_1),
gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_MAM_1),
+ 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(anonymous_purge_hook, Host,
@@ -276,6 +280,15 @@ get_xdata_fields(SubEl) ->
[]
end.
+disco_sm_features(empty, From, To, Node, Lang) ->
+ disco_sm_features({result, []}, From, To, Node, Lang);
+disco_sm_features({result, OtherFeatures},
+ #jid{luser = U, lserver = S},
+ #jid{luser = U, lserver = S}, <<>>, _Lang) ->
+ {result, [?NS_MAM_TMP, ?NS_MAM_0, ?NS_MAM_1 | OtherFeatures]};
+disco_sm_features(Acc, _From, _To, _Node, _Lang) ->
+ Acc.
+
%%%===================================================================
%%% Internal functions
%%%===================================================================