aboutsummaryrefslogtreecommitdiff
path: root/src/mod_avatar.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_avatar.erl')
-rw-r--r--src/mod_avatar.erl27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/mod_avatar.erl b/src/mod_avatar.erl
index 640f5f6b4..e92a87594 100644
--- a/src/mod_avatar.erl
+++ b/src/mod_avatar.erl
@@ -23,10 +23,13 @@
-module(mod_avatar).
-behaviour(gen_mod).
+-protocol({xep, 398, '0.2.0'}).
+
%% gen_mod API
-export([start/2, stop/1, reload/3, depends/2, mod_opt_type/1, mod_options/1]).
%% Hooks
--export([pubsub_publish_item/6, vcard_iq_convert/1, vcard_iq_publish/1]).
+-export([pubsub_publish_item/6, vcard_iq_convert/1, vcard_iq_publish/1,
+ get_sm_features/5]).
-include("xmpp.hrl").
-include("logger.hrl").
@@ -43,13 +46,17 @@ start(Host, _Opts) ->
ejabberd_hooks:add(vcard_iq_set, Host, ?MODULE,
vcard_iq_convert, 30),
ejabberd_hooks:add(vcard_iq_set, Host, ?MODULE,
- vcard_iq_publish, 100).
+ vcard_iq_publish, 100),
+ ejabberd_hooks:add(disco_sm_features, Host, ?MODULE,
+ get_sm_features, 50).
stop(Host) ->
ejabberd_hooks:delete(pubsub_publish_item, Host, ?MODULE,
pubsub_publish_item, 50),
ejabberd_hooks:delete(vcard_iq_set, Host, ?MODULE, vcard_iq_convert, 30),
- ejabberd_hooks:delete(vcard_iq_set, Host, ?MODULE, vcard_iq_publish, 100).
+ ejabberd_hooks:delete(vcard_iq_set, Host, ?MODULE, vcard_iq_publish, 100),
+ ejabberd_hooks:delete(disco_sm_features, Host, ?MODULE,
+ get_sm_features, 50).
reload(_Host, _NewOpts, _OldOpts) ->
ok.
@@ -144,6 +151,20 @@ vcard_iq_publish(#iq{sub_els = [#vcard_temp{
vcard_iq_publish(Acc) ->
Acc.
+-spec get_sm_features({error, stanza_error()} | empty | {result, [binary()]},
+ jid(), jid(), binary(), binary()) ->
+ {error, stanza_error()} | empty | {result, [binary()]}.
+get_sm_features({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
+ Acc;
+get_sm_features(Acc, _From, _To, <<"">>, _Lang) ->
+ {result, [?NS_DISCO_INFO, ?NS_PEP_VCARD_CONVERSION_0 |
+ case Acc of
+ {result, Features} -> Features;
+ empty -> []
+ end]};
+get_sm_features(Acc, _From, _To, _Node, _Lang) ->
+ Acc.
+
%%%===================================================================
%%% Internal functions
%%%===================================================================