Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-10-30 23:54:02 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-10-30 23:57:15 +0300
commit9a0b951855c649a2aeb262389d7479f42067d86f (patch)
tree5476cd6f3f56b929a49d95eb34d1c0f0b9423b6d /tools
parent7819986ec0de206af7c777589c34c392a1bea2ef (diff)
Add tests for mod_vcard_xupdate
Diffstat (limited to 'tools')
-rw-r--r--tools/xmpp_codec.erl84
-rw-r--r--tools/xmpp_codec.hrl2
-rw-r--r--tools/xmpp_codec.spec12
3 files changed, 98 insertions, 0 deletions
diff --git a/tools/xmpp_codec.erl b/tools/xmpp_codec.erl
index 58749af28..1d5cd88e0 100644
--- a/tools/xmpp_codec.erl
+++ b/tools/xmpp_codec.erl
@@ -287,6 +287,12 @@ decode({xmlel, _name, _attrs, _} = _el, Opts) ->
{<<"required">>, <<"jabber:x:data">>} ->
decode_xdata_field_required(<<"jabber:x:data">>,
IgnoreEls, _el);
+ {<<"x">>, <<"vcard-temp:x:update">>} ->
+ decode_vcard_xupdate(<<"vcard-temp:x:update">>,
+ IgnoreEls, _el);
+ {<<"photo">>, <<"vcard-temp:x:update">>} ->
+ decode_vcard_xupdate_photo(<<"vcard-temp:x:update">>,
+ IgnoreEls, _el);
{<<"vCard">>, <<"vcard-temp">>} ->
decode_vcard(<<"vcard-temp">>, IgnoreEls, _el);
{<<"CLASS">>, <<"vcard-temp">>} ->
@@ -1182,6 +1188,8 @@ is_known_tag({xmlel, _name, _attrs, _} = _el) ->
{<<"value">>, <<"jabber:x:data">>} -> true;
{<<"desc">>, <<"jabber:x:data">>} -> true;
{<<"required">>, <<"jabber:x:data">>} -> true;
+ {<<"x">>, <<"vcard-temp:x:update">>} -> true;
+ {<<"photo">>, <<"vcard-temp:x:update">>} -> true;
{<<"vCard">>, <<"vcard-temp">>} -> true;
{<<"CLASS">>, <<"vcard-temp">>} -> true;
{<<"CATEGORIES">>, <<"vcard-temp">>} -> true;
@@ -1841,6 +1849,9 @@ encode({vcard, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _} =
Vcard) ->
encode_vcard(Vcard, [{<<"xmlns">>, <<"vcard-temp">>}]);
+encode({vcard_xupdate, _} = X) ->
+ encode_vcard_xupdate(X,
+ [{<<"xmlns">>, <<"vcard-temp:x:update">>}]);
encode({xdata_field, _, _, _, _, _, _, _} = Field) ->
encode_xdata_field(Field,
[{<<"xmlns">>, <<"jabber:x:data">>}]);
@@ -2126,6 +2137,7 @@ get_ns({vcard_key, _, _}) -> <<"vcard-temp">>;
get_ns({vcard, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _}) ->
<<"vcard-temp">>;
+get_ns({vcard_xupdate, _}) -> <<"vcard-temp:x:update">>;
get_ns({xdata_field, _, _, _, _, _, _, _}) ->
<<"jabber:x:data">>;
get_ns({xdata, _, _, _, _, _, _}) ->
@@ -2339,6 +2351,7 @@ pp(vcard, 29) ->
email, jabberid, mailer, tz, geo, title, role, logo,
org, categories, note, prodid, rev, sort_string, sound,
uid, url, class, key, desc];
+pp(vcard_xupdate, 1) -> [photo];
pp(xdata_field, 7) ->
[label, type, var, required, desc, values, options];
pp(xdata, 6) ->
@@ -7515,6 +7528,77 @@ encode_xdata_field_required(true, _xmlns_attrs) ->
_attrs = _xmlns_attrs,
{xmlel, <<"required">>, _attrs, _els}.
+decode_vcard_xupdate(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"x">>, _attrs, _els}) ->
+ Photo = decode_vcard_xupdate_els(__TopXMLNS,
+ __IgnoreEls, _els, undefined),
+ {vcard_xupdate, Photo}.
+
+decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, [],
+ Photo) ->
+ Photo;
+decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls,
+ [{xmlel, <<"photo">>, _attrs, _} = _el | _els],
+ Photo) ->
+ _xmlns = get_attr(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>; _xmlns == __TopXMLNS ->
+ decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, _els,
+ decode_vcard_xupdate_photo(__TopXMLNS,
+ __IgnoreEls,
+ _el));
+ true ->
+ decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, _els,
+ Photo)
+ end;
+decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls,
+ [_ | _els], Photo) ->
+ decode_vcard_xupdate_els(__TopXMLNS, __IgnoreEls, _els,
+ Photo).
+
+encode_vcard_xupdate({vcard_xupdate, Photo},
+ _xmlns_attrs) ->
+ _els =
+ lists:reverse('encode_vcard_xupdate_$photo'(Photo, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"x">>, _attrs, _els}.
+
+'encode_vcard_xupdate_$photo'(undefined, _acc) -> _acc;
+'encode_vcard_xupdate_$photo'(Photo, _acc) ->
+ [encode_vcard_xupdate_photo(Photo, []) | _acc].
+
+decode_vcard_xupdate_photo(__TopXMLNS, __IgnoreEls,
+ {xmlel, <<"photo">>, _attrs, _els}) ->
+ Cdata = decode_vcard_xupdate_photo_els(__TopXMLNS,
+ __IgnoreEls, _els, <<>>),
+ Cdata.
+
+decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
+ [], Cdata) ->
+ decode_vcard_xupdate_photo_cdata(__TopXMLNS, Cdata);
+decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
+ [{xmlcdata, _data} | _els], Cdata) ->
+ decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
+ _els, <<Cdata/binary, _data/binary>>);
+decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
+ [_ | _els], Cdata) ->
+ decode_vcard_xupdate_photo_els(__TopXMLNS, __IgnoreEls,
+ _els, Cdata).
+
+encode_vcard_xupdate_photo(Cdata, _xmlns_attrs) ->
+ _els = encode_vcard_xupdate_photo_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"photo">>, _attrs, _els}.
+
+decode_vcard_xupdate_photo_cdata(__TopXMLNS, <<>>) ->
+ undefined;
+decode_vcard_xupdate_photo_cdata(__TopXMLNS, _val) ->
+ _val.
+
+encode_vcard_xupdate_photo_cdata(undefined, _acc) ->
+ _acc;
+encode_vcard_xupdate_photo_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
+
decode_vcard(__TopXMLNS, __IgnoreEls,
{xmlel, <<"vCard">>, _attrs, _els}) ->
{Mailer, Adr, Class, Categories, Desc, Uid, Prodid,
diff --git a/tools/xmpp_codec.hrl b/tools/xmpp_codec.hrl
index c421aa1d6..4098a7fd6 100644
--- a/tools/xmpp_codec.hrl
+++ b/tools/xmpp_codec.hrl
@@ -252,6 +252,8 @@
status_codes = [] :: [pos_integer()],
password :: binary()}).
+-record(vcard_xupdate, {photo :: binary()}).
+
-record(carbons_disable, {}).
-record(bytestreams, {hosts = [] :: [#streamhost{}],
diff --git a/tools/xmpp_codec.spec b/tools/xmpp_codec.spec
index f8ed72af9..61f438cbe 100644
--- a/tools/xmpp_codec.spec
+++ b/tools/xmpp_codec.spec
@@ -1486,6 +1486,18 @@
label = '$categories'},
#ref{name = vcard_CLASS, min = 0, max = 1, label = '$class'}]}).
+-xml(vcard_xupdate_photo,
+ #elem{name = <<"photo">>,
+ xmlns = <<"vcard-temp:x:update">>,
+ result = '$cdata'}).
+
+-xml(vcard_xupdate,
+ #elem{name = <<"x">>,
+ xmlns = <<"vcard-temp:x:update">>,
+ result = {vcard_xupdate, '$photo'},
+ refs = [#ref{name = vcard_xupdate_photo, min = 0, max = 1,
+ label = '$photo'}]}).
+
-xml(xdata_field_required,
#elem{name = <<"required">>,
xmlns = <<"jabber:x:data">>,