aboutsummaryrefslogtreecommitdiff
path: root/src/mod_vcard.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-11-13 14:17:21 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-11-13 14:17:21 +0300
commitebefd0d8d6bd0162f0067f85e565afde83a962ca (patch)
treea57ee60843688e46a7f805040f6951ae8c084041 /src/mod_vcard.erl
parentDon't auto-decode forwarded payload (diff)
Add more control for decoding IQ payloads
Diffstat (limited to '')
-rw-r--r--src/mod_vcard.erl10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl
index 8333d32cf..35b907f95 100644
--- a/src/mod_vcard.erl
+++ b/src/mod_vcard.erl
@@ -37,7 +37,7 @@
remove_user/2, export/1, import/1, import/3, depends/2,
process_search/1, process_vcard/1, get_vcard/2,
disco_items/5, disco_features/5, disco_identity/5,
- mod_opt_type/1, set_vcard/3, make_vcard_search/4]).
+ decode_iq_subel/1, mod_opt_type/1, set_vcard/3, make_vcard_search/4]).
-include("ejabberd.hrl").
-include("logger.hrl").
@@ -167,6 +167,14 @@ get_sm_features(Acc, _From, _To, Node, _Lang) ->
_ -> Acc
end.
+-spec decode_iq_subel(xmpp_element() | xmlel()) -> xmpp_element() | xmlel().
+%% Tell gen_iq_handler not to decode vcard elements
+decode_iq_subel(El) ->
+ case xmpp:get_ns(El) of
+ ?NS_VCARD -> xmpp:encode(El);
+ _ -> xmpp:decode(El)
+ end.
+
-spec process_local_iq(iq()) -> iq().
process_local_iq(#iq{type = set, lang = Lang} = IQ) ->
Txt = <<"Value 'set' of 'type' attribute is not allowed">>,