aboutsummaryrefslogtreecommitdiff
path: root/tools/xmpp_codec.erl
diff options
context:
space:
mode:
Diffstat (limited to 'tools/xmpp_codec.erl')
-rw-r--r--tools/xmpp_codec.erl1934
1 files changed, 1719 insertions, 215 deletions
diff --git a/tools/xmpp_codec.erl b/tools/xmpp_codec.erl
index 25485f06f..cb113643a 100644
--- a/tools/xmpp_codec.erl
+++ b/tools/xmpp_codec.erl
@@ -1,13 +1,54 @@
%% Created automatically by XML generator (xml_gen.erl)
%% Source: xmpp_codec.spec
-%% Date: Sat, 15 Jun 2013 16:36:04 GMT
-module(xmpp_codec).
--export([decode/1, encode/1]).
+-export([pp/1, decode/1, encode/1]).
decode({xmlel, _name, _attrs, _} = _el) ->
case {_name, xml:get_attr_s(<<"xmlns">>, _attrs)} of
+ {<<"x">>, <<"http://jabber.org/protocol/muc">>} ->
+ decode_muc(_el);
+ {<<"query">>,
+ <<"http://jabber.org/protocol/muc#owner">>} ->
+ decode_muc_owner(_el);
+ {<<"destroy">>,
+ <<"http://jabber.org/protocol/muc#owner">>} ->
+ decode_muc_owner_destroy(_el);
+ {<<"reason">>,
+ <<"http://jabber.org/protocol/muc#owner">>} ->
+ decode_muc_owner_reason(_el);
+ {<<"password">>,
+ <<"http://jabber.org/protocol/muc#owner">>} ->
+ decode_muc_owner_password(_el);
+ {<<"x">>, <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user(_el);
+ {<<"item">>,
+ <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user_item(_el);
+ {<<"status">>,
+ <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user_status(_el);
+ {<<"continue">>,
+ <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user_continue(_el);
+ {<<"actor">>,
+ <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user_actor(_el);
+ {<<"invite">>,
+ <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user_invite(_el);
+ {<<"destroy">>,
+ <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user_destroy(_el);
+ {<<"decline">>,
+ <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user_decline(_el);
+ {<<"reason">>,
+ <<"http://jabber.org/protocol/muc#user">>} ->
+ decode_muc_user_reason(_el);
+ {<<"history">>, <<"http://jabber.org/protocol/muc">>} ->
+ decode_muc_history(_el);
{<<"query">>,
<<"http://jabber.org/protocol/bytestreams">>} ->
decode_bytestreams(_el);
@@ -630,6 +671,44 @@ decode({xmlel, _name, _attrs, _} = _el) ->
erlang:error({unknown_tag, _name, _xmlns})
end.
+encode({muc, _, _} = X) ->
+ encode_muc(X,
+ [{<<"xmlns">>, <<"http://jabber.org/protocol/muc">>}]);
+encode({muc_owner, _, _} = Query) ->
+ encode_muc_owner(Query,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/muc#owner">>}]);
+encode({muc_owner_destroy, _, _, _} = Destroy) ->
+ encode_muc_owner_destroy(Destroy,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/muc#owner">>}]);
+encode({muc_user, _, _, _, _, _, _} = X) ->
+ encode_muc_user(X,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_item, _, _, _, _, _, _, _} = Item) ->
+ encode_muc_user_item(Item,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_actor, _, _} = Actor) ->
+ encode_muc_user_actor(Actor,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_invite, _, _, _} = Invite) ->
+ encode_muc_user_invite(Invite,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_user_destroy, _, _} = Destroy) ->
+ encode_muc_user_destroy(Destroy,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_decline, _, _, _} = Decline) ->
+ encode_muc_user_decline(Decline,
+ [{<<"xmlns">>,
+ <<"http://jabber.org/protocol/muc#user">>}]);
+encode({muc_history, _, _, _, _} = History) ->
+ encode_muc_history(History,
+ [{<<"xmlns">>, <<"http://jabber.org/protocol/muc">>}]);
encode({bytestreams, _, _, _, _, _, _} = Query) ->
encode_bytestreams(Query,
[{<<"xmlns">>,
@@ -912,6 +991,131 @@ encode({last, _, _} = Query) ->
encode_last(Query,
[{<<"xmlns">>, <<"jabber:iq:last">>}]).
+pp(Term) -> io_lib_pretty:print(Term, fun pp/2).
+
+pp(last, 2) -> [seconds, text];
+pp(version, 3) ->
+ [version_name, version_ver, version_os];
+pp(roster_item, 5) ->
+ [jid, name, groups, subscription, ask];
+pp(roster, 2) -> [items, ver];
+pp(privacy_item, 5) ->
+ [order, action, type, value, kinds];
+pp(privacy_list, 2) -> [name, items];
+pp(privacy, 3) -> [lists, default, active];
+pp(block, 1) -> [items];
+pp(unblock, 1) -> [items];
+pp(block_list, 0) -> [];
+pp(identity, 3) -> [category, type, name];
+pp(disco_info, 4) -> [node, identity, feature, xdata];
+pp(disco_item, 3) -> [jid, name, node];
+pp(disco_items, 2) -> [node, items];
+pp(private, 1) -> [sub_els];
+pp(bookmark_conference, 5) ->
+ [name, jid, autojoin, nick, password];
+pp(bookmark_url, 2) -> [name, url];
+pp(bookmark_storage, 2) -> [conference, url];
+pp(stat, 4) -> [name, units, value, error];
+pp(stats, 1) -> [stat];
+pp(iq, 7) -> [id, type, lang, from, to, error, sub_els];
+pp(message, 10) ->
+ [id, type, lang, from, to, subject, body, thread, error,
+ sub_els];
+pp(presence, 10) ->
+ [id, type, lang, from, to, show, status, priority,
+ error, sub_els];
+pp(gone, 1) -> [uri];
+pp(redirect, 1) -> [uri];
+pp(error, 4) -> [type, by, reason, text];
+pp(bind, 2) -> [jid, resource];
+pp(sasl_auth, 2) -> [mechanism, text];
+pp(sasl_abort, 0) -> [];
+pp(sasl_challenge, 1) -> [text];
+pp(sasl_response, 1) -> [text];
+pp(sasl_success, 1) -> [text];
+pp(sasl_failure, 2) -> [reason, text];
+pp(sasl_mechanisms, 1) -> [list];
+pp(starttls, 1) -> [required];
+pp(starttls_proceed, 0) -> [];
+pp(starttls_failure, 0) -> [];
+pp(compress_failure, 1) -> [reason];
+pp(compress, 1) -> [methods];
+pp(compressed, 0) -> [];
+pp(compression, 1) -> [methods];
+pp(stream_features, 1) -> [sub_els];
+pp(p1_push, 0) -> [];
+pp(p1_rebind, 0) -> [];
+pp(p1_ack, 0) -> [];
+pp(caps, 3) -> [hash, node, ver];
+pp(feature_register, 0) -> [];
+pp(register, 20) ->
+ [registered, remove, instructions, username, nick,
+ password, name, first, last, email, address, city,
+ state, zip, phone, url, date, misc, text, key];
+pp(session, 0) -> [];
+pp(ping, 0) -> [];
+pp(time, 2) -> [tzo, utc];
+pp(text, 2) -> [lang, data];
+pp('see-other-host', 1) -> [host];
+pp(stream_error, 2) -> [reason, text];
+pp(vcard_name, 5) ->
+ [family, given, middle, prefix, suffix];
+pp(vcard_adr, 14) ->
+ [home, work, postal, parcel, dom, intl, pref, pobox,
+ extadd, street, locality, region, pcode, ctry];
+pp(vcard_label, 8) ->
+ [home, work, postal, parcel, dom, intl, pref, line];
+pp(vcard_tel, 14) ->
+ [home, work, voice, fax, pager, msg, cell, video, bbs,
+ modem, isdn, pcs, pref, number];
+pp(vcard_email, 6) ->
+ [home, work, internet, pref, x400, userid];
+pp(vcard_geo, 2) -> [lat, lon];
+pp(vcard_logo, 3) -> [type, binval, extval];
+pp(vcard_photo, 3) -> [type, binval, extval];
+pp(vcard_org, 2) -> [name, units];
+pp(vcard_sound, 3) -> [phonetic, binval, extval];
+pp(vcard_key, 2) -> [type, cred];
+pp(vcard_agent, 2) -> [vcard, extval];
+pp(vcard, 30) ->
+ [version, fn, n, nickname, photo, bday, adr, label, tel,
+ email, jabberid, mailer, tz, geo, title, role, logo,
+ org, categories, note, prodid, agent, rev, sort_string,
+ sound, uid, url, class, key, desc];
+pp(xdata_field, 7) ->
+ [label, type, var, required, desc, values, options];
+pp(xdata, 6) ->
+ [type, instructions, title, reported, items, fields];
+pp(pubsub_subscription, 4) -> [jid, node, subid, type];
+pp(pubsub_affiliation, 2) -> [node, type];
+pp(pubsub_item, 2) -> [id, sub_els];
+pp(pubsub_items, 4) -> [node, max_items, subid, items];
+pp(pubsub_event_item, 3) -> [id, node, publisher];
+pp(pubsub_event_items, 3) -> [node, retract, items];
+pp(pubsub_event, 1) -> [items];
+pp(pubsub, 4) ->
+ [subscriptions, affiliations, publish, subscribe];
+pp(delay, 2) -> [stamp, from];
+pp(legacy_delay, 2) -> [stamp, from];
+pp(streamhost, 3) -> [jid, host, port];
+pp(bytestreams, 6) ->
+ [hosts, used, activate, dstaddr, mode, sid];
+pp(muc_history, 4) ->
+ [maxchars, maxstanzas, seconds, since];
+pp(muc_decline, 3) -> [reason, from, to];
+pp(muc_user_destroy, 2) -> [reason, jid];
+pp(muc_invite, 3) -> [reason, from, to];
+pp(muc_actor, 2) -> [jid, nick];
+pp(muc_item, 7) ->
+ [actor, continue, reason, affiliation, role, jid, nick];
+pp(muc_user, 6) ->
+ [decline, destroy, invites, items, status_codes,
+ password];
+pp(muc_owner_destroy, 3) -> [jid, reason, password];
+pp(muc_owner, 2) -> [destroy, config];
+pp(muc, 2) -> [history, password];
+pp(_, _) -> no.
+
enc_bool(false) -> <<"false">>;
enc_bool(true) -> <<"true">>.
@@ -1185,7 +1389,10 @@ decode_roster_item_els([{xmlel, <<"group">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:iq:roster">> ->
decode_roster_item_els(_els,
- [decode_roster_group(_el) | Groups]);
+ case decode_roster_group(_el) of
+ undefined -> Groups;
+ _new_el -> [_new_el | Groups]
+ end);
true -> decode_roster_item_els(_els, Groups)
end;
decode_roster_item_els([_ | _els], Groups) ->
@@ -1296,7 +1503,10 @@ decode_roster_els([{xmlel, <<"item">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:iq:roster">> ->
decode_roster_els(_els,
- [decode_roster_item(_el) | Items]);
+ case decode_roster_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end);
true -> decode_roster_els(_els, Items)
end;
decode_roster_els([_ | _els], Items) ->
@@ -1366,57 +1576,55 @@ encode_privacy_presence_out('presence-out',
decode_privacy_item({xmlel, <<"item">>, _attrs,
_els}) ->
- Stanza = decode_privacy_item_els(_els, undefined),
+ Kinds = decode_privacy_item_els(_els, []),
{Action, Order, Type, Value} =
decode_privacy_item_attrs(_attrs, undefined, undefined,
undefined, undefined),
- {privacy_item, Order, Action, Type, Value, Stanza}.
+ {privacy_item, Order, Action, Type, Value, Kinds}.
-decode_privacy_item_els([], Stanza) -> Stanza;
+decode_privacy_item_els([], Kinds) ->
+ lists:reverse(Kinds);
decode_privacy_item_els([{xmlel, <<"message">>, _attrs,
_} =
_el
| _els],
- Stanza) ->
+ Kinds) ->
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
- decode_privacy_item_els(_els,
- decode_privacy_message(_el));
- true -> decode_privacy_item_els(_els, Stanza)
+ decode_privacy_item_els(_els, Kinds);
+ true -> decode_privacy_item_els(_els, Kinds)
end;
decode_privacy_item_els([{xmlel, <<"iq">>, _attrs, _} =
_el
| _els],
- Stanza) ->
+ Kinds) ->
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
- decode_privacy_item_els(_els, decode_privacy_iq(_el));
- true -> decode_privacy_item_els(_els, Stanza)
+ decode_privacy_item_els(_els, Kinds);
+ true -> decode_privacy_item_els(_els, Kinds)
end;
decode_privacy_item_els([{xmlel, <<"presence-in">>,
_attrs, _} =
_el
| _els],
- Stanza) ->
+ Kinds) ->
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
- decode_privacy_item_els(_els,
- decode_privacy_presence_in(_el));
- true -> decode_privacy_item_els(_els, Stanza)
+ decode_privacy_item_els(_els, Kinds);
+ true -> decode_privacy_item_els(_els, Kinds)
end;
decode_privacy_item_els([{xmlel, <<"presence-out">>,
_attrs, _} =
_el
| _els],
- Stanza) ->
+ Kinds) ->
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
- decode_privacy_item_els(_els,
- decode_privacy_presence_out(_el));
- true -> decode_privacy_item_els(_els, Stanza)
+ decode_privacy_item_els(_els, Kinds);
+ true -> decode_privacy_item_els(_els, Kinds)
end;
-decode_privacy_item_els([_ | _els], Stanza) ->
- decode_privacy_item_els(_els, Stanza).
+decode_privacy_item_els([_ | _els], Kinds) ->
+ decode_privacy_item_els(_els, Kinds).
decode_privacy_item_attrs([{<<"action">>, _val}
| _attrs],
@@ -1449,9 +1657,9 @@ decode_privacy_item_attrs([], Action, Order, Type,
decode_privacy_item_attr_value(Value)}.
encode_privacy_item({privacy_item, Order, Action, Type,
- Value, Stanza},
+ Value, Kinds},
_xmlns_attrs) ->
- _els = 'encode_privacy_item_$stanza'(Stanza, []),
+ _els = 'encode_privacy_item_$kinds'(Kinds, []),
_attrs = encode_privacy_item_attr_value(Value,
encode_privacy_item_attr_type(Type,
encode_privacy_item_attr_order(Order,
@@ -1459,17 +1667,27 @@ encode_privacy_item({privacy_item, Order, Action, Type,
_xmlns_attrs)))),
{xmlel, <<"item">>, _attrs, _els}.
-'encode_privacy_item_$stanza'(undefined, _acc) -> _acc;
-'encode_privacy_item_$stanza'(message = Stanza, _acc) ->
- [encode_privacy_message(Stanza, []) | _acc];
-'encode_privacy_item_$stanza'(iq = Stanza, _acc) ->
- [encode_privacy_iq(Stanza, []) | _acc];
-'encode_privacy_item_$stanza'('presence-in' = Stanza,
- _acc) ->
- [encode_privacy_presence_in(Stanza, []) | _acc];
-'encode_privacy_item_$stanza'('presence-out' = Stanza,
- _acc) ->
- [encode_privacy_presence_out(Stanza, []) | _acc].
+'encode_privacy_item_$kinds'([], _acc) -> _acc;
+'encode_privacy_item_$kinds'([message = Kinds | _els],
+ _acc) ->
+ 'encode_privacy_item_$kinds'(_els,
+ [encode_privacy_message(Kinds, []) | _acc]);
+'encode_privacy_item_$kinds'([iq = Kinds | _els],
+ _acc) ->
+ 'encode_privacy_item_$kinds'(_els,
+ [encode_privacy_iq(Kinds, []) | _acc]);
+'encode_privacy_item_$kinds'(['presence-in' = Kinds
+ | _els],
+ _acc) ->
+ 'encode_privacy_item_$kinds'(_els,
+ [encode_privacy_presence_in(Kinds, [])
+ | _acc]);
+'encode_privacy_item_$kinds'(['presence-out' = Kinds
+ | _els],
+ _acc) ->
+ 'encode_privacy_item_$kinds'(_els,
+ [encode_privacy_presence_out(Kinds, [])
+ | _acc]).
decode_privacy_item_attr_action(undefined) ->
erlang:error({missing_attr, <<"action">>, <<"item">>,
@@ -1537,7 +1755,10 @@ decode_privacy_list_els([{xmlel, <<"item">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
decode_privacy_list_els(_els,
- [decode_privacy_item(_el) | Items]);
+ case decode_privacy_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end);
true -> decode_privacy_list_els(_els, Items)
end;
decode_privacy_list_els([_ | _els], Items) ->
@@ -1643,8 +1864,11 @@ decode_privacy_els([{xmlel, <<"list">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:iq:privacy">> ->
decode_privacy_els(_els,
- [decode_privacy_list(_el) | Lists], Default,
- Active);
+ case decode_privacy_list(_el) of
+ undefined -> Lists;
+ _new_el -> [_new_el | Lists]
+ end,
+ Default, Active);
true -> decode_privacy_els(_els, Lists, Default, Active)
end;
decode_privacy_els([{xmlel, <<"default">>, _attrs, _} =
@@ -1733,7 +1957,10 @@ decode_block_els([{xmlel, <<"item">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"urn:xmpp:blocking">> ->
decode_block_els(_els,
- [decode_block_item(_el) | Items]);
+ case decode_block_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end);
true -> decode_block_els(_els, Items)
end;
decode_block_els([_ | _els], Items) ->
@@ -1759,7 +1986,10 @@ decode_unblock_els([{xmlel, <<"item">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"urn:xmpp:blocking">> ->
decode_unblock_els(_els,
- [decode_block_item(_el) | Items]);
+ case decode_block_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end);
true -> decode_unblock_els(_els, Items)
end;
decode_unblock_els([_ | _els], Items) ->
@@ -1893,7 +2123,10 @@ decode_disco_info_els([{xmlel, <<"identity">>, _attrs,
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/disco#info">> ->
decode_disco_info_els(_els, Xdata, Feature,
- [decode_disco_identity(_el) | Identity]);
+ case decode_disco_identity(_el) of
+ undefined -> Identity;
+ _new_el -> [_new_el | Identity]
+ end);
true ->
decode_disco_info_els(_els, Xdata, Feature, Identity)
end;
@@ -1906,7 +2139,10 @@ decode_disco_info_els([{xmlel, <<"feature">>, _attrs,
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/disco#info">> ->
decode_disco_info_els(_els, Xdata,
- [decode_disco_feature(_el) | Feature],
+ case decode_disco_feature(_el) of
+ undefined -> Feature;
+ _new_el -> [_new_el | Feature]
+ end,
Identity);
true ->
decode_disco_info_els(_els, Xdata, Feature, Identity)
@@ -1916,7 +2152,11 @@ decode_disco_info_els([{xmlel, <<"x">>, _attrs, _} = _el
Xdata, Feature, Identity) ->
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<"jabber:x:data">> ->
- decode_disco_info_els(_els, [decode_xdata(_el) | Xdata],
+ decode_disco_info_els(_els,
+ case decode_xdata(_el) of
+ undefined -> Xdata;
+ _new_el -> [_new_el | Xdata]
+ end,
Feature, Identity);
true ->
decode_disco_info_els(_els, Xdata, Feature, Identity)
@@ -1947,7 +2187,10 @@ encode_disco_info({disco_info, Node, Identity, Feature,
'encode_disco_info_$xdata'([], _acc) -> _acc;
'encode_disco_info_$xdata'([Xdata | _els], _acc) ->
'encode_disco_info_$xdata'(_els,
- [encode_xdata(Xdata, []) | _acc]).
+ [encode_xdata(Xdata,
+ [{<<"xmlns">>,
+ <<"jabber:x:data">>}])
+ | _acc]).
'encode_disco_info_$feature'([], _acc) -> _acc;
'encode_disco_info_$feature'([Feature | _els], _acc) ->
@@ -2044,7 +2287,10 @@ decode_disco_items_els([{xmlel, <<"item">>, _attrs, _} =
_xmlns ==
<<"http://jabber.org/protocol/disco#items">> ->
decode_disco_items_els(_els,
- [decode_disco_item(_el) | Items]);
+ case decode_disco_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end);
true -> decode_disco_items_els(_els, Items)
end;
decode_disco_items_els([_ | _els], Items) ->
@@ -2330,8 +2576,10 @@ decode_bookmarks_storage_els([{xmlel, <<"conference">>,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
decode_bookmarks_storage_els(_els,
- [decode_bookmark_conference(_el)
- | Conference],
+ case decode_bookmark_conference(_el) of
+ undefined -> Conference;
+ _new_el -> [_new_el | Conference]
+ end,
Url);
true ->
decode_bookmarks_storage_els(_els, Conference, Url)
@@ -2344,7 +2592,10 @@ decode_bookmarks_storage_els([{xmlel, <<"url">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"storage:bookmarks">> ->
decode_bookmarks_storage_els(_els, Conference,
- [decode_bookmark_url(_el) | Url]);
+ case decode_bookmark_url(_el) of
+ undefined -> Url;
+ _new_el -> [_new_el | Url]
+ end);
true ->
decode_bookmarks_storage_els(_els, Conference, Url)
end;
@@ -2438,7 +2689,11 @@ decode_stat_els([{xmlel, <<"error">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/stats">> ->
- decode_stat_els(_els, [decode_stat_error(_el) | Error]);
+ decode_stat_els(_els,
+ case decode_stat_error(_el) of
+ undefined -> Error;
+ _new_el -> [_new_el | Error]
+ end);
true -> decode_stat_els(_els, Error)
end;
decode_stat_els([_ | _els], Error) ->
@@ -2506,7 +2761,11 @@ decode_stats_els([{xmlel, <<"stat">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/stats">> ->
- decode_stats_els(_els, [decode_stat(_el) | Stat]);
+ decode_stats_els(_els,
+ case decode_stat(_el) of
+ undefined -> Stat;
+ _new_el -> [_new_el | Stat]
+ end);
true -> decode_stats_els(_els, Stat)
end;
decode_stats_els([_ | _els], Stat) ->
@@ -2644,18 +2903,18 @@ encode_iq_attr_to(_val, _acc) ->
decode_message_subject({xmlel, <<"subject">>, _attrs,
_els}) ->
- Cdata = decode_message_subject_els(_els, <<>>),
+ Data = decode_message_subject_els(_els, <<>>),
Lang = decode_message_subject_attrs(_attrs, undefined),
- {Lang, Cdata}.
+ {text, Lang, Data}.
-decode_message_subject_els([], Cdata) ->
- decode_message_subject_cdata(Cdata);
+decode_message_subject_els([], Data) ->
+ decode_message_subject_cdata(Data);
decode_message_subject_els([{xmlcdata, _data} | _els],
- Cdata) ->
+ Data) ->
decode_message_subject_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_message_subject_els([_ | _els], Cdata) ->
- decode_message_subject_els(_els, Cdata).
+ <<Data/binary, _data/binary>>);
+decode_message_subject_els([_ | _els], Data) ->
+ decode_message_subject_els(_els, Data).
decode_message_subject_attrs([{<<"xml:lang">>, _val}
| _attrs],
@@ -2666,8 +2925,9 @@ decode_message_subject_attrs([_ | _attrs], Lang) ->
decode_message_subject_attrs([], Lang) ->
'decode_message_subject_attr_xml:lang'(Lang).
-encode_message_subject({Lang, Cdata}, _xmlns_attrs) ->
- _els = encode_message_subject_cdata(Cdata, []),
+encode_message_subject({text, Lang, Data},
+ _xmlns_attrs) ->
+ _els = encode_message_subject_cdata(Data, []),
_attrs = 'encode_message_subject_attr_xml:lang'(Lang,
_xmlns_attrs),
{xmlel, <<"subject">>, _attrs, _els}.
@@ -2691,18 +2951,18 @@ encode_message_subject_cdata(_val, _acc) ->
decode_message_body({xmlel, <<"body">>, _attrs,
_els}) ->
- Cdata = decode_message_body_els(_els, <<>>),
+ Data = decode_message_body_els(_els, <<>>),
Lang = decode_message_body_attrs(_attrs, undefined),
- {Lang, Cdata}.
+ {text, Lang, Data}.
-decode_message_body_els([], Cdata) ->
- decode_message_body_cdata(Cdata);
+decode_message_body_els([], Data) ->
+ decode_message_body_cdata(Data);
decode_message_body_els([{xmlcdata, _data} | _els],
- Cdata) ->
+ Data) ->
decode_message_body_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_message_body_els([_ | _els], Cdata) ->
- decode_message_body_els(_els, Cdata).
+ <<Data/binary, _data/binary>>);
+decode_message_body_els([_ | _els], Data) ->
+ decode_message_body_els(_els, Data).
decode_message_body_attrs([{<<"xml:lang">>, _val}
| _attrs],
@@ -2713,8 +2973,8 @@ decode_message_body_attrs([_ | _attrs], Lang) ->
decode_message_body_attrs([], Lang) ->
'decode_message_body_attr_xml:lang'(Lang).
-encode_message_body({Lang, Cdata}, _xmlns_attrs) ->
- _els = encode_message_body_cdata(Cdata, []),
+encode_message_body({text, Lang, Data}, _xmlns_attrs) ->
+ _els = encode_message_body_cdata(Data, []),
_attrs = 'encode_message_body_attr_xml:lang'(Lang,
_xmlns_attrs),
{xmlel, <<"body">>, _attrs, _els}.
@@ -2793,8 +3053,11 @@ decode_message_els([{xmlel, <<"subject">>, _attrs, _} =
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
decode_message_els(_els, Error, Thread,
- [decode_message_subject(_el) | Subject], Body,
- __Els);
+ case decode_message_subject(_el) of
+ undefined -> Subject;
+ _new_el -> [_new_el | Subject]
+ end,
+ Body, __Els);
true ->
decode_message_els(_els, Error, Thread, Subject, Body,
__Els)
@@ -2817,7 +3080,11 @@ decode_message_els([{xmlel, <<"body">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
decode_message_els(_els, Error, Thread, Subject,
- [decode_message_body(_el) | Body], __Els);
+ case decode_message_body(_el) of
+ undefined -> Body;
+ _new_el -> [_new_el | Body]
+ end,
+ __Els);
true ->
decode_message_els(_els, Error, Thread, Subject, Body,
__Els)
@@ -2983,18 +3250,18 @@ encode_presence_show_cdata(_val, _acc) ->
decode_presence_status({xmlel, <<"status">>, _attrs,
_els}) ->
- Cdata = decode_presence_status_els(_els, <<>>),
+ Data = decode_presence_status_els(_els, <<>>),
Lang = decode_presence_status_attrs(_attrs, undefined),
- {Lang, Cdata}.
+ {text, Lang, Data}.
-decode_presence_status_els([], Cdata) ->
- decode_presence_status_cdata(Cdata);
+decode_presence_status_els([], Data) ->
+ decode_presence_status_cdata(Data);
decode_presence_status_els([{xmlcdata, _data} | _els],
- Cdata) ->
+ Data) ->
decode_presence_status_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_presence_status_els([_ | _els], Cdata) ->
- decode_presence_status_els(_els, Cdata).
+ <<Data/binary, _data/binary>>);
+decode_presence_status_els([_ | _els], Data) ->
+ decode_presence_status_els(_els, Data).
decode_presence_status_attrs([{<<"xml:lang">>, _val}
| _attrs],
@@ -3005,8 +3272,9 @@ decode_presence_status_attrs([_ | _attrs], Lang) ->
decode_presence_status_attrs([], Lang) ->
'decode_presence_status_attr_xml:lang'(Lang).
-encode_presence_status({Lang, Cdata}, _xmlns_attrs) ->
- _els = encode_presence_status_cdata(Cdata, []),
+encode_presence_status({text, Lang, Data},
+ _xmlns_attrs) ->
+ _els = encode_presence_status_cdata(Data, []),
_attrs = 'encode_presence_status_attr_xml:lang'(Lang,
_xmlns_attrs),
{xmlel, <<"status">>, _attrs, _els}.
@@ -3105,8 +3373,11 @@ decode_presence_els([{xmlel, <<"status">>, _attrs, _} =
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:client">> ->
decode_presence_els(_els, Error,
- [decode_presence_status(_el) | Status], Show,
- Priority, __Els);
+ case decode_presence_status(_el) of
+ undefined -> Status;
+ _new_el -> [_new_el | Status]
+ end,
+ Show, Priority, __Els);
true ->
decode_presence_els(_els, Error, Status, Show, Priority,
__Els)
@@ -3506,18 +3777,18 @@ encode_error_unexpected_request('unexpected-request',
{xmlel, <<"unexpected-request">>, _attrs, _els}.
decode_error_text({xmlel, <<"text">>, _attrs, _els}) ->
- Cdata = decode_error_text_els(_els, <<>>),
+ Data = decode_error_text_els(_els, <<>>),
Lang = decode_error_text_attrs(_attrs, undefined),
- {Lang, Cdata}.
+ {text, Lang, Data}.
-decode_error_text_els([], Cdata) ->
- decode_error_text_cdata(Cdata);
+decode_error_text_els([], Data) ->
+ decode_error_text_cdata(Data);
decode_error_text_els([{xmlcdata, _data} | _els],
- Cdata) ->
+ Data) ->
decode_error_text_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_error_text_els([_ | _els], Cdata) ->
- decode_error_text_els(_els, Cdata).
+ <<Data/binary, _data/binary>>);
+decode_error_text_els([_ | _els], Data) ->
+ decode_error_text_els(_els, Data).
decode_error_text_attrs([{<<"xml:lang">>, _val}
| _attrs],
@@ -3528,8 +3799,8 @@ decode_error_text_attrs([_ | _attrs], Lang) ->
decode_error_text_attrs([], Lang) ->
'decode_error_text_attr_xml:lang'(Lang).
-encode_error_text({Lang, Cdata}, _xmlns_attrs) ->
- _els = encode_error_text_cdata(Cdata, []),
+encode_error_text({text, Lang, Data}, _xmlns_attrs) ->
+ _els = encode_error_text_cdata(Data, []),
_attrs = 'encode_error_text_attr_xml:lang'(Lang,
_xmlns_attrs),
{xmlel, <<"text">>, _attrs, _els}.
@@ -3850,73 +4121,140 @@ encode_error({error, Type, By, Reason, Text},
'encode_error_$text'(undefined, _acc) -> _acc;
'encode_error_$text'(Text, _acc) ->
- [encode_error_text(Text, []) | _acc].
+ [encode_error_text(Text,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc].
'encode_error_$reason'(undefined, _acc) -> _acc;
'encode_error_$reason'('bad-request' = Reason, _acc) ->
- [encode_error_bad_request(Reason, []) | _acc];
+ [encode_error_bad_request(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'(conflict = Reason, _acc) ->
- [encode_error_conflict(Reason, []) | _acc];
+ [encode_error_conflict(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('feature-not-implemented' =
Reason,
_acc) ->
- [encode_error_feature_not_implemented(Reason, [])
+ [encode_error_feature_not_implemented(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
| _acc];
'encode_error_$reason'(forbidden = Reason, _acc) ->
- [encode_error_forbidden(Reason, []) | _acc];
+ [encode_error_forbidden(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'({gone, _} = Reason, _acc) ->
- [encode_error_gone(Reason, []) | _acc];
+ [encode_error_gone(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('internal-server-error' = Reason,
_acc) ->
- [encode_error_internal_server_error(Reason, []) | _acc];
+ [encode_error_internal_server_error(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('item-not-found' = Reason,
_acc) ->
- [encode_error_item_not_found(Reason, []) | _acc];
+ [encode_error_item_not_found(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('jid-malformed' = Reason,
_acc) ->
- [encode_error_jid_malformed(Reason, []) | _acc];
+ [encode_error_jid_malformed(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('not-acceptable' = Reason,
_acc) ->
- [encode_error_not_acceptable(Reason, []) | _acc];
+ [encode_error_not_acceptable(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('not-allowed' = Reason, _acc) ->
- [encode_error_not_allowed(Reason, []) | _acc];
+ [encode_error_not_allowed(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('not-authorized' = Reason,
_acc) ->
- [encode_error_not_authorized(Reason, []) | _acc];
+ [encode_error_not_authorized(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('policy-violation' = Reason,
_acc) ->
- [encode_error_policy_violation(Reason, []) | _acc];
+ [encode_error_policy_violation(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('recipient-unavailable' = Reason,
_acc) ->
- [encode_error_recipient_unavailable(Reason, []) | _acc];
+ [encode_error_recipient_unavailable(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'({redirect, _} = Reason, _acc) ->
- [encode_error_redirect(Reason, []) | _acc];
+ [encode_error_redirect(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('registration-required' = Reason,
_acc) ->
- [encode_error_registration_required(Reason, []) | _acc];
+ [encode_error_registration_required(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('remote-server-not-found' =
Reason,
_acc) ->
- [encode_error_remote_server_not_found(Reason, [])
+ [encode_error_remote_server_not_found(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
| _acc];
'encode_error_$reason'('remote-server-timeout' = Reason,
_acc) ->
- [encode_error_remote_server_timeout(Reason, []) | _acc];
+ [encode_error_remote_server_timeout(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('resource-constraint' = Reason,
_acc) ->
- [encode_error_resource_constraint(Reason, []) | _acc];
+ [encode_error_resource_constraint(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('service-unavailable' = Reason,
_acc) ->
- [encode_error_service_unavailable(Reason, []) | _acc];
+ [encode_error_service_unavailable(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('subscription-required' = Reason,
_acc) ->
- [encode_error_subscription_required(Reason, []) | _acc];
+ [encode_error_subscription_required(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('undefined-condition' = Reason,
_acc) ->
- [encode_error_undefined_condition(Reason, []) | _acc];
+ [encode_error_undefined_condition(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc];
'encode_error_$reason'('unexpected-request' = Reason,
_acc) ->
- [encode_error_unexpected_request(Reason, []) | _acc].
+ [encode_error_unexpected_request(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>}])
+ | _acc].
decode_error_attr_type(undefined) ->
erlang:error({missing_attr, <<"type">>, <<"error">>,
@@ -4204,19 +4542,19 @@ encode_sasl_success_cdata(_val, _acc) ->
decode_sasl_failure_text({xmlel, <<"text">>, _attrs,
_els}) ->
- Cdata = decode_sasl_failure_text_els(_els, <<>>),
+ Data = decode_sasl_failure_text_els(_els, <<>>),
Lang = decode_sasl_failure_text_attrs(_attrs,
undefined),
- {Lang, Cdata}.
+ {text, Lang, Data}.
-decode_sasl_failure_text_els([], Cdata) ->
- decode_sasl_failure_text_cdata(Cdata);
+decode_sasl_failure_text_els([], Data) ->
+ decode_sasl_failure_text_cdata(Data);
decode_sasl_failure_text_els([{xmlcdata, _data} | _els],
- Cdata) ->
+ Data) ->
decode_sasl_failure_text_els(_els,
- <<Cdata/binary, _data/binary>>);
-decode_sasl_failure_text_els([_ | _els], Cdata) ->
- decode_sasl_failure_text_els(_els, Cdata).
+ <<Data/binary, _data/binary>>);
+decode_sasl_failure_text_els([_ | _els], Data) ->
+ decode_sasl_failure_text_els(_els, Data).
decode_sasl_failure_text_attrs([{<<"xml:lang">>, _val}
| _attrs],
@@ -4227,8 +4565,9 @@ decode_sasl_failure_text_attrs([_ | _attrs], Lang) ->
decode_sasl_failure_text_attrs([], Lang) ->
'decode_sasl_failure_text_attr_xml:lang'(Lang).
-encode_sasl_failure_text({Lang, Cdata}, _xmlns_attrs) ->
- _els = encode_sasl_failure_text_cdata(Cdata, []),
+encode_sasl_failure_text({text, Lang, Data},
+ _xmlns_attrs) ->
+ _els = encode_sasl_failure_text_cdata(Data, []),
_attrs = 'encode_sasl_failure_text_attr_xml:lang'(Lang,
_xmlns_attrs),
{xmlel, <<"text">>, _attrs, _els}.
@@ -4383,7 +4722,10 @@ decode_sasl_failure_els([{xmlel, <<"text">>, _attrs,
if _xmlns == <<>>;
_xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
decode_sasl_failure_els(_els,
- [decode_sasl_failure_text(_el) | Text],
+ case decode_sasl_failure_text(_el) of
+ undefined -> Text;
+ _new_el -> [_new_el | Text]
+ end,
Reason);
true -> decode_sasl_failure_els(_els, Text, Reason)
end;
@@ -4627,7 +4969,10 @@ decode_sasl_mechanisms_els([{xmlel, <<"mechanism">>,
if _xmlns == <<>>;
_xmlns == <<"urn:ietf:params:xml:ns:xmpp-sasl">> ->
decode_sasl_mechanisms_els(_els,
- [decode_sasl_mechanism(_el) | List]);
+ case decode_sasl_mechanism(_el) of
+ undefined -> List;
+ _new_el -> [_new_el | List]
+ end);
true -> decode_sasl_mechanisms_els(_els, List)
end;
decode_sasl_mechanisms_els([_ | _els], List) ->
@@ -4844,7 +5189,10 @@ decode_compress_els([{xmlel, <<"method">>, _attrs, _} =
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/compress">> ->
decode_compress_els(_els,
- [decode_compress_method(_el) | Methods]);
+ case decode_compress_method(_el) of
+ undefined -> Methods;
+ _new_el -> [_new_el | Methods]
+ end);
true -> decode_compress_els(_els, Methods)
end;
decode_compress_els([_ | _els], Methods) ->
@@ -4913,7 +5261,10 @@ decode_compression_els([{xmlel, <<"method">>, _attrs,
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/features/compress">> ->
decode_compression_els(_els,
- [decode_compression_method(_el) | Methods]);
+ case decode_compression_method(_el) of
+ undefined -> Methods;
+ _new_el -> [_new_el | Methods]
+ end);
true -> decode_compression_els(_els, Methods)
end;
decode_compression_els([_ | _els], Methods) ->
@@ -6144,19 +6495,19 @@ encode_time({time, Tzo, Utc}, _xmlns_attrs) ->
decode_stream_error_text({xmlel, <<"text">>, _attrs,
_els}) ->
- Text = decode_stream_error_text_els(_els, <<>>),
+ Data = decode_stream_error_text_els(_els, <<>>),
Lang = decode_stream_error_text_attrs(_attrs,
undefined),
- {Lang, Text}.
+ {text, Lang, Data}.
-decode_stream_error_text_els([], Text) ->
- decode_stream_error_text_cdata(Text);
+decode_stream_error_text_els([], Data) ->
+ decode_stream_error_text_cdata(Data);
decode_stream_error_text_els([{xmlcdata, _data} | _els],
- Text) ->
+ Data) ->
decode_stream_error_text_els(_els,
- <<Text/binary, _data/binary>>);
-decode_stream_error_text_els([_ | _els], Text) ->
- decode_stream_error_text_els(_els, Text).
+ <<Data/binary, _data/binary>>);
+decode_stream_error_text_els([_ | _els], Data) ->
+ decode_stream_error_text_els(_els, Data).
decode_stream_error_text_attrs([{<<"xml:lang">>, _val}
| _attrs],
@@ -6167,8 +6518,9 @@ decode_stream_error_text_attrs([_ | _attrs], Lang) ->
decode_stream_error_text_attrs([], Lang) ->
'decode_stream_error_text_attr_xml:lang'(Lang).
-encode_stream_error_text({Lang, Text}, _xmlns_attrs) ->
- _els = encode_stream_error_text_cdata(Text, []),
+encode_stream_error_text({text, Lang, Data},
+ _xmlns_attrs) ->
+ _els = encode_stream_error_text_cdata(Data, []),
_attrs = 'encode_stream_error_text_attr_xml:lang'(Lang,
_xmlns_attrs),
{xmlel, <<"text">>, _attrs, _els}.
@@ -6805,112 +7157,175 @@ encode_stream_error({stream_error, Reason, Text},
'encode_stream_error_$text'(undefined, _acc) -> _acc;
'encode_stream_error_$text'(Text, _acc) ->
- [encode_stream_error_text(Text, []) | _acc].
+ [encode_stream_error_text(Text,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc].
'encode_stream_error_$reason'(undefined, _acc) -> _acc;
'encode_stream_error_$reason'('bad-format' = Reason,
_acc) ->
- [encode_stream_error_bad_format(Reason, []) | _acc];
+ [encode_stream_error_bad_format(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('bad-namespace-prefix' =
Reason,
_acc) ->
- [encode_stream_error_bad_namespace_prefix(Reason, [])
+ [encode_stream_error_bad_namespace_prefix(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'(conflict = Reason,
_acc) ->
- [encode_stream_error_conflict(Reason, []) | _acc];
+ [encode_stream_error_conflict(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('connection-timeout' =
Reason,
_acc) ->
- [encode_stream_error_connection_timeout(Reason, [])
+ [encode_stream_error_connection_timeout(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('host-gone' = Reason,
_acc) ->
- [encode_stream_error_host_gone(Reason, []) | _acc];
+ [encode_stream_error_host_gone(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('host-unknown' = Reason,
_acc) ->
- [encode_stream_error_host_unknown(Reason, []) | _acc];
+ [encode_stream_error_host_unknown(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('improper-addressing' =
Reason,
_acc) ->
- [encode_stream_error_improper_addressing(Reason, [])
+ [encode_stream_error_improper_addressing(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('internal-server-error' =
Reason,
_acc) ->
- [encode_stream_error_internal_server_error(Reason, [])
+ [encode_stream_error_internal_server_error(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('invalid-from' = Reason,
_acc) ->
- [encode_stream_error_invalid_from(Reason, []) | _acc];
+ [encode_stream_error_invalid_from(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('invalid-id' = Reason,
_acc) ->
- [encode_stream_error_invalid_id(Reason, []) | _acc];
+ [encode_stream_error_invalid_id(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('invalid-namespace' =
Reason,
_acc) ->
- [encode_stream_error_invalid_namespace(Reason, [])
+ [encode_stream_error_invalid_namespace(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('invalid-xml' = Reason,
_acc) ->
- [encode_stream_error_invalid_xml(Reason, []) | _acc];
+ [encode_stream_error_invalid_xml(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('not-authorized' = Reason,
_acc) ->
- [encode_stream_error_not_authorized(Reason, []) | _acc];
+ [encode_stream_error_not_authorized(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('not-well-formed' =
Reason,
_acc) ->
- [encode_stream_error_not_well_formed(Reason, [])
+ [encode_stream_error_not_well_formed(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('policy-violation' =
Reason,
_acc) ->
- [encode_stream_error_policy_violation(Reason, [])
+ [encode_stream_error_policy_violation(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('remote-connection-failed' =
Reason,
_acc) ->
[encode_stream_error_remote_connection_failed(Reason,
- [])
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'(reset = Reason, _acc) ->
- [encode_stream_error_reset(Reason, []) | _acc];
+ [encode_stream_error_reset(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('resource-constraint' =
Reason,
_acc) ->
- [encode_stream_error_resource_constraint(Reason, [])
+ [encode_stream_error_resource_constraint(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('restricted-xml' = Reason,
_acc) ->
- [encode_stream_error_restricted_xml(Reason, []) | _acc];
+ [encode_stream_error_restricted_xml(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'({'see-other-host', _} =
Reason,
_acc) ->
- [encode_stream_error_see_other_host(Reason, []) | _acc];
+ [encode_stream_error_see_other_host(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
+ | _acc];
'encode_stream_error_$reason'('system-shutdown' =
Reason,
_acc) ->
- [encode_stream_error_system_shutdown(Reason, [])
+ [encode_stream_error_system_shutdown(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('undefined-condition' =
Reason,
_acc) ->
- [encode_stream_error_undefined_condition(Reason, [])
+ [encode_stream_error_undefined_condition(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('unsupported-encoding' =
Reason,
_acc) ->
- [encode_stream_error_unsupported_encoding(Reason, [])
+ [encode_stream_error_unsupported_encoding(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('unsupported-stanza-type' =
Reason,
_acc) ->
- [encode_stream_error_unsupported_stanza_type(Reason, [])
+ [encode_stream_error_unsupported_stanza_type(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc];
'encode_stream_error_$reason'('unsupported-version' =
Reason,
_acc) ->
- [encode_stream_error_unsupported_version(Reason, [])
+ [encode_stream_error_unsupported_version(Reason,
+ [{<<"xmlns">>,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>}])
| _acc].
decode_vcard_HOME({xmlel, <<"HOME">>, _attrs, _els}) ->
@@ -8615,8 +9030,11 @@ decode_vcard_LABEL_els([{xmlel, <<"LINE">>, _attrs, _} =
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_LABEL_els(_els,
- [decode_vcard_LINE(_el) | Line], Home, Pref,
- Work, Intl, Parcel, Postal, Dom);
+ case decode_vcard_LINE(_el) of
+ undefined -> Line;
+ _new_el -> [_new_el | Line]
+ end,
+ Home, Pref, Work, Intl, Parcel, Postal, Dom);
true ->
decode_vcard_LABEL_els(_els, Line, Home, Pref, Work,
Intl, Parcel, Postal, Dom)
@@ -8892,9 +9310,12 @@ decode_vcard_TEL_els([{xmlel, <<"NUMBER">>, _attrs, _} =
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_TEL_els(_els,
- [decode_vcard_NUMBER(_el) | Number], Pager, Pcs,
- Bbs, Voice, Home, Pref, Msg, Fax, Work, Cell,
- Modem, Isdn, Video);
+ case decode_vcard_NUMBER(_el) of
+ undefined -> Number;
+ _new_el -> [_new_el | Number]
+ end,
+ Pager, Pcs, Bbs, Voice, Home, Pref, Msg, Fax,
+ Work, Cell, Modem, Isdn, Video);
true ->
decode_vcard_TEL_els(_els, Number, Pager, Pcs, Bbs,
Voice, Home, Pref, Msg, Fax, Work, Cell, Modem,
@@ -9063,8 +9484,11 @@ decode_vcard_EMAIL_els([{xmlel, <<"USERID">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_EMAIL_els(_els, X400,
- [decode_vcard_USERID(_el) | Userid], Internet,
- Home, Pref, Work);
+ case decode_vcard_USERID(_el) of
+ undefined -> Userid;
+ _new_el -> [_new_el | Userid]
+ end,
+ Internet, Home, Pref, Work);
true ->
decode_vcard_EMAIL_els(_els, X400, Userid, Internet,
Home, Pref, Work)
@@ -9122,7 +9546,11 @@ decode_vcard_GEO_els([{xmlel, <<"LAT">>, _attrs, _} =
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_GEO_els(_els,
- [decode_vcard_LAT(_el) | Lat], Lon);
+ case decode_vcard_LAT(_el) of
+ undefined -> Lat;
+ _new_el -> [_new_el | Lat]
+ end,
+ Lon);
true -> decode_vcard_GEO_els(_els, Lat, Lon)
end;
decode_vcard_GEO_els([{xmlel, <<"LON">>, _attrs, _} =
@@ -9132,7 +9560,10 @@ decode_vcard_GEO_els([{xmlel, <<"LON">>, _attrs, _} =
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_GEO_els(_els, Lat,
- [decode_vcard_LON(_el) | Lon]);
+ case decode_vcard_LON(_el) of
+ undefined -> Lon;
+ _new_el -> [_new_el | Lon]
+ end);
true -> decode_vcard_GEO_els(_els, Lat, Lon)
end;
decode_vcard_GEO_els([_ | _els], Lat, Lon) ->
@@ -9332,7 +9763,10 @@ decode_vcard_ORG_els([{xmlel, <<"ORGNAME">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_ORG_els(_els, Units,
- [decode_vcard_ORGNAME(_el) | Name]);
+ case decode_vcard_ORGNAME(_el) of
+ undefined -> Name;
+ _new_el -> [_new_el | Name]
+ end);
true -> decode_vcard_ORG_els(_els, Units, Name)
end;
decode_vcard_ORG_els([{xmlel, <<"ORGUNIT">>, _attrs,
@@ -9343,7 +9777,11 @@ decode_vcard_ORG_els([{xmlel, <<"ORGUNIT">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_ORG_els(_els,
- [decode_vcard_ORGUNIT(_el) | Units], Name);
+ case decode_vcard_ORGUNIT(_el) of
+ undefined -> Units;
+ _new_el -> [_new_el | Units]
+ end,
+ Name);
true -> decode_vcard_ORG_els(_els, Units, Name)
end;
decode_vcard_ORG_els([_ | _els], Units, Name) ->
@@ -9458,7 +9896,11 @@ decode_vcard_KEY_els([{xmlel, <<"CRED">>, _attrs, _} =
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_KEY_els(_els,
- [decode_vcard_CRED(_el) | Cred], Type);
+ case decode_vcard_CRED(_el) of
+ undefined -> Cred;
+ _new_el -> [_new_el | Cred]
+ end,
+ Type);
true -> decode_vcard_KEY_els(_els, Cred, Type)
end;
decode_vcard_KEY_els([_ | _els], Cred, Type) ->
@@ -9493,7 +9935,10 @@ decode_vcard_CATEGORIES_els([{xmlel, <<"KEYWORD">>,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_CATEGORIES_els(_els,
- [decode_vcard_KEYWORD(_el) | Keywords]);
+ case decode_vcard_KEYWORD(_el) of
+ undefined -> Keywords;
+ _new_el -> [_new_el | Keywords]
+ end);
true -> decode_vcard_CATEGORIES_els(_els, Keywords)
end;
decode_vcard_CATEGORIES_els([_ | _els], Keywords) ->
@@ -9667,11 +10112,14 @@ decode_vcard_els([{xmlel, <<"ADR">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"vcard-temp">> ->
decode_vcard_els(_els, Mailer,
- [decode_vcard_ADR(_el) | Adr], Class, Categories,
- Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
- Role, Title, Nickname, Rev, Sort_string, Org, Bday,
- Key, Tz, Url, Email, Tel, Label, Fn, Version, N,
- Photo, Logo, Geo);
+ case decode_vcard_ADR(_el) of
+ undefined -> Adr;
+ _new_el -> [_new_el | Adr]
+ end,
+ Class, Categories, Desc, Uid, Agent, Prodid,
+ Jabberid, Sound, Note, Role, Title, Nickname, Rev,
+ Sort_string, Org, Bday, Key, Tz, Url, Email, Tel,
+ Label, Fn, Version, N, Photo, Logo, Geo);
true ->
decode_vcard_els(_els, Mailer, Adr, Class, Categories,
Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
@@ -9691,8 +10139,11 @@ decode_vcard_els([{xmlel, <<"LABEL">>, _attrs, _} = _el
Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
Role, Title, Nickname, Rev, Sort_string, Org, Bday,
Key, Tz, Url, Email, Tel,
- [decode_vcard_LABEL(_el) | Label], Fn, Version, N,
- Photo, Logo, Geo);
+ case decode_vcard_LABEL(_el) of
+ undefined -> Label;
+ _new_el -> [_new_el | Label]
+ end,
+ Fn, Version, N, Photo, Logo, Geo);
true ->
decode_vcard_els(_els, Mailer, Adr, Class, Categories,
Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
@@ -9711,7 +10162,11 @@ decode_vcard_els([{xmlel, <<"TEL">>, _attrs, _} = _el
decode_vcard_els(_els, Mailer, Adr, Class, Categories,
Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
Role, Title, Nickname, Rev, Sort_string, Org, Bday,
- Key, Tz, Url, Email, [decode_vcard_TEL(_el) | Tel],
+ Key, Tz, Url, Email,
+ case decode_vcard_TEL(_el) of
+ undefined -> Tel;
+ _new_el -> [_new_el | Tel]
+ end,
Label, Fn, Version, N, Photo, Logo, Geo);
true ->
decode_vcard_els(_els, Mailer, Adr, Class, Categories,
@@ -9731,7 +10186,11 @@ decode_vcard_els([{xmlel, <<"EMAIL">>, _attrs, _} = _el
decode_vcard_els(_els, Mailer, Adr, Class, Categories,
Desc, Uid, Agent, Prodid, Jabberid, Sound, Note,
Role, Title, Nickname, Rev, Sort_string, Org, Bday,
- Key, Tz, Url, [decode_vcard_EMAIL(_el) | Email],
+ Key, Tz, Url,
+ case decode_vcard_EMAIL(_el) of
+ undefined -> Email;
+ _new_el -> [_new_el | Email]
+ end,
Tel, Label, Fn, Version, N, Photo, Logo, Geo);
true ->
decode_vcard_els(_els, Mailer, Adr, Class, Categories,
@@ -10497,8 +10956,10 @@ decode_xdata_field_option_els([{xmlel, <<"value">>,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
decode_xdata_field_option_els(_els,
- [decode_xdata_field_value(_el)
- | Value]);
+ case decode_xdata_field_value(_el) of
+ undefined -> Value;
+ _new_el -> [_new_el | Value]
+ end);
true -> decode_xdata_field_option_els(_els, Value)
end;
decode_xdata_field_option_els([_ | _els], Value) ->
@@ -10559,7 +11020,10 @@ decode_xdata_field_els([{xmlel, <<"value">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
decode_xdata_field_els(_els, Options,
- [decode_xdata_field_value(_el) | Values],
+ case decode_xdata_field_value(_el) of
+ undefined -> Values;
+ _new_el -> [_new_el | Values]
+ end,
Desc, Required);
true ->
decode_xdata_field_els(_els, Options, Values, Desc,
@@ -10573,7 +11037,10 @@ decode_xdata_field_els([{xmlel, <<"option">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
decode_xdata_field_els(_els,
- [decode_xdata_field_option(_el) | Options],
+ case decode_xdata_field_option(_el) of
+ undefined -> Options;
+ _new_el -> [_new_el | Options]
+ end,
Values, Desc, Required);
true ->
decode_xdata_field_els(_els, Options, Values, Desc,
@@ -10732,7 +11199,10 @@ decode_xdata_reported_els([{xmlel, <<"field">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
decode_xdata_reported_els(_els,
- [decode_xdata_field(_el) | Fields]);
+ case decode_xdata_field(_el) of
+ undefined -> Fields;
+ _new_el -> [_new_el | Fields]
+ end);
true -> decode_xdata_reported_els(_els, Fields)
end;
decode_xdata_reported_els([_ | _els], Fields) ->
@@ -10761,7 +11231,10 @@ decode_xdata_item_els([{xmlel, <<"field">>, _attrs, _} =
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
decode_xdata_item_els(_els,
- [decode_xdata_field(_el) | Fields]);
+ case decode_xdata_field(_el) of
+ undefined -> Fields;
+ _new_el -> [_new_el | Fields]
+ end);
true -> decode_xdata_item_els(_els, Fields)
end;
decode_xdata_item_els([_ | _els], Fields) ->
@@ -10797,7 +11270,10 @@ decode_xdata_els([{xmlel, <<"instructions">>, _attrs,
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
decode_xdata_els(_els, Fields, Items,
- [decode_xdata_instructions(_el) | Instructions],
+ case decode_xdata_instructions(_el) of
+ undefined -> Instructions;
+ _new_el -> [_new_el | Instructions]
+ end,
Reported, Title);
true ->
decode_xdata_els(_els, Fields, Items, Instructions,
@@ -10832,8 +11308,11 @@ decode_xdata_els([{xmlel, <<"item">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
decode_xdata_els(_els, Fields,
- [decode_xdata_item(_el) | Items], Instructions,
- Reported, Title);
+ case decode_xdata_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end,
+ Instructions, Reported, Title);
true ->
decode_xdata_els(_els, Fields, Items, Instructions,
Reported, Title)
@@ -10844,8 +11323,11 @@ decode_xdata_els([{xmlel, <<"field">>, _attrs, _} = _el
_xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
if _xmlns == <<>>; _xmlns == <<"jabber:x:data">> ->
decode_xdata_els(_els,
- [decode_xdata_field(_el) | Fields], Items,
- Instructions, Reported, Title);
+ case decode_xdata_field(_el) of
+ undefined -> Fields;
+ _new_el -> [_new_el | Fields]
+ end,
+ Items, Instructions, Reported, Title);
true ->
decode_xdata_els(_els, Fields, Items, Instructions,
Reported, Title)
@@ -11136,7 +11618,10 @@ decode_pubsub_items_els([{xmlel, <<"item">>, _attrs,
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/pubsub">> ->
decode_pubsub_items_els(_els,
- [decode_pubsub_item(_el) | Items]);
+ case decode_pubsub_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end);
true -> decode_pubsub_items_els(_els, Items)
end;
decode_pubsub_items_els([_ | _els], Items) ->
@@ -11328,8 +11813,11 @@ decode_pubsub_event_items_els([{xmlel, <<"retract">>,
_xmlns ==
<<"http://jabber.org/protocol/pubsub#event">> ->
decode_pubsub_event_items_els(_els, Items,
- [decode_pubsub_event_retract(_el)
- | Retract]);
+ case decode_pubsub_event_retract(_el)
+ of
+ undefined -> Retract;
+ _new_el -> [_new_el | Retract]
+ end);
true ->
decode_pubsub_event_items_els(_els, Items, Retract)
end;
@@ -11343,8 +11831,10 @@ decode_pubsub_event_items_els([{xmlel, <<"item">>,
_xmlns ==
<<"http://jabber.org/protocol/pubsub#event">> ->
decode_pubsub_event_items_els(_els,
- [decode_pubsub_event_item(_el)
- | Items],
+ case decode_pubsub_event_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end,
Retract);
true ->
decode_pubsub_event_items_els(_els, Items, Retract)
@@ -11412,7 +11902,10 @@ decode_pubsub_event_els([{xmlel, <<"items">>, _attrs,
_xmlns ==
<<"http://jabber.org/protocol/pubsub#event">> ->
decode_pubsub_event_els(_els,
- [decode_pubsub_event_items(_el) | Items]);
+ case decode_pubsub_event_items(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end);
true -> decode_pubsub_event_els(_els, Items)
end;
decode_pubsub_event_els([_ | _els], Items) ->
@@ -11448,8 +11941,12 @@ decode_pubsub_subscriptions_els([{xmlel,
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/pubsub">> ->
decode_pubsub_subscriptions_els(_els,
- [decode_pubsub_subscription(_el)
- | Subscriptions]);
+ case decode_pubsub_subscription(_el)
+ of
+ undefined -> Subscriptions;
+ _new_el ->
+ [_new_el | Subscriptions]
+ end);
true ->
decode_pubsub_subscriptions_els(_els, Subscriptions)
end;
@@ -11511,8 +12008,10 @@ decode_pubsub_affiliations_els([{xmlel,
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/pubsub">> ->
decode_pubsub_affiliations_els(_els,
- [decode_pubsub_affiliation(_el)
- | Affiliations]);
+ case decode_pubsub_affiliation(_el) of
+ undefined -> Affiliations;
+ _new_el -> [_new_el | Affiliations]
+ end);
true ->
decode_pubsub_affiliations_els(_els, Affiliations)
end;
@@ -11607,7 +12106,10 @@ decode_pubsub_publish_els([{xmlel, <<"item">>, _attrs,
if _xmlns == <<>>;
_xmlns == <<"http://jabber.org/protocol/pubsub">> ->
decode_pubsub_publish_els(_els,
- [decode_pubsub_item(_el) | Items]);
+ case decode_pubsub_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end);
true -> decode_pubsub_publish_els(_els, Items)
end;
decode_pubsub_publish_els([_ | _els], Items) ->
@@ -12015,7 +12517,10 @@ decode_bytestreams_els([{xmlel, <<"streamhost">>,
_xmlns ==
<<"http://jabber.org/protocol/bytestreams">> ->
decode_bytestreams_els(_els,
- [decode_bytestreams_streamhost(_el) | Hosts],
+ case decode_bytestreams_streamhost(_el) of
+ undefined -> Hosts;
+ _new_el -> [_new_el | Hosts]
+ end,
Used, Activate);
true ->
decode_bytestreams_els(_els, Hosts, Used, Activate)
@@ -12125,3 +12630,1002 @@ decode_bytestreams_attr_mode(_val) ->
encode_bytestreams_attr_mode(tcp, _acc) -> _acc;
encode_bytestreams_attr_mode(_val, _acc) ->
[{<<"mode">>, xml_gen:enc_enum(_val)} | _acc].
+
+decode_muc_history({xmlel, <<"history">>, _attrs,
+ _els}) ->
+ {Maxchars, Maxstanzas, Seconds, Since} =
+ decode_muc_history_attrs(_attrs, undefined, undefined,
+ undefined, undefined),
+ {muc_history, Maxchars, Maxstanzas, Seconds, Since}.
+
+decode_muc_history_attrs([{<<"maxchars">>, _val}
+ | _attrs],
+ _Maxchars, Maxstanzas, Seconds, Since) ->
+ decode_muc_history_attrs(_attrs, _val, Maxstanzas,
+ Seconds, Since);
+decode_muc_history_attrs([{<<"maxstanzas">>, _val}
+ | _attrs],
+ Maxchars, _Maxstanzas, Seconds, Since) ->
+ decode_muc_history_attrs(_attrs, Maxchars, _val,
+ Seconds, Since);
+decode_muc_history_attrs([{<<"seconds">>, _val}
+ | _attrs],
+ Maxchars, Maxstanzas, _Seconds, Since) ->
+ decode_muc_history_attrs(_attrs, Maxchars, Maxstanzas,
+ _val, Since);
+decode_muc_history_attrs([{<<"since">>, _val} | _attrs],
+ Maxchars, Maxstanzas, Seconds, _Since) ->
+ decode_muc_history_attrs(_attrs, Maxchars, Maxstanzas,
+ Seconds, _val);
+decode_muc_history_attrs([_ | _attrs], Maxchars,
+ Maxstanzas, Seconds, Since) ->
+ decode_muc_history_attrs(_attrs, Maxchars, Maxstanzas,
+ Seconds, Since);
+decode_muc_history_attrs([], Maxchars, Maxstanzas,
+ Seconds, Since) ->
+ {decode_muc_history_attr_maxchars(Maxchars),
+ decode_muc_history_attr_maxstanzas(Maxstanzas),
+ decode_muc_history_attr_seconds(Seconds),
+ decode_muc_history_attr_since(Since)}.
+
+encode_muc_history({muc_history, Maxchars, Maxstanzas,
+ Seconds, Since},
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = encode_muc_history_attr_since(Since,
+ encode_muc_history_attr_seconds(Seconds,
+ encode_muc_history_attr_maxstanzas(Maxstanzas,
+ encode_muc_history_attr_maxchars(Maxchars,
+ _xmlns_attrs)))),
+ {xmlel, <<"history">>, _attrs, _els}.
+
+decode_muc_history_attr_maxchars(undefined) ->
+ undefined;
+decode_muc_history_attr_maxchars(_val) ->
+ case catch xml_gen:dec_int(_val, 0, infinity) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"maxchars">>,
+ <<"history">>, <<"http://jabber.org/protocol/muc">>});
+ _res -> _res
+ end.
+
+encode_muc_history_attr_maxchars(undefined, _acc) ->
+ _acc;
+encode_muc_history_attr_maxchars(_val, _acc) ->
+ [{<<"maxchars">>, xml_gen:enc_int(_val)} | _acc].
+
+decode_muc_history_attr_maxstanzas(undefined) ->
+ undefined;
+decode_muc_history_attr_maxstanzas(_val) ->
+ case catch xml_gen:dec_int(_val, 0, infinity) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"maxstanzas">>,
+ <<"history">>, <<"http://jabber.org/protocol/muc">>});
+ _res -> _res
+ end.
+
+encode_muc_history_attr_maxstanzas(undefined, _acc) ->
+ _acc;
+encode_muc_history_attr_maxstanzas(_val, _acc) ->
+ [{<<"maxstanzas">>, xml_gen:enc_int(_val)} | _acc].
+
+decode_muc_history_attr_seconds(undefined) -> undefined;
+decode_muc_history_attr_seconds(_val) ->
+ case catch xml_gen:dec_int(_val, 0, infinity) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"seconds">>,
+ <<"history">>, <<"http://jabber.org/protocol/muc">>});
+ _res -> _res
+ end.
+
+encode_muc_history_attr_seconds(undefined, _acc) ->
+ _acc;
+encode_muc_history_attr_seconds(_val, _acc) ->
+ [{<<"seconds">>, xml_gen:enc_int(_val)} | _acc].
+
+decode_muc_history_attr_since(undefined) -> undefined;
+decode_muc_history_attr_since(_val) ->
+ case catch dec_utc(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"since">>,
+ <<"history">>, <<"http://jabber.org/protocol/muc">>});
+ _res -> _res
+ end.
+
+encode_muc_history_attr_since(undefined, _acc) -> _acc;
+encode_muc_history_attr_since(_val, _acc) ->
+ [{<<"since">>, enc_utc(_val)} | _acc].
+
+decode_muc_user_reason({xmlel, <<"reason">>, _attrs,
+ _els}) ->
+ Cdata = decode_muc_user_reason_els(_els, <<>>), Cdata.
+
+decode_muc_user_reason_els([], Cdata) ->
+ decode_muc_user_reason_cdata(Cdata);
+decode_muc_user_reason_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_muc_user_reason_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_muc_user_reason_els([_ | _els], Cdata) ->
+ decode_muc_user_reason_els(_els, Cdata).
+
+encode_muc_user_reason(Cdata, _xmlns_attrs) ->
+ _els = encode_muc_user_reason_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"reason">>, _attrs, _els}.
+
+decode_muc_user_reason_cdata(<<>>) -> undefined;
+decode_muc_user_reason_cdata(_val) -> _val.
+
+encode_muc_user_reason_cdata(undefined, _acc) -> _acc;
+encode_muc_user_reason_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
+
+decode_muc_user_decline({xmlel, <<"decline">>, _attrs,
+ _els}) ->
+ Reason = decode_muc_user_decline_els(_els, undefined),
+ {To, From} = decode_muc_user_decline_attrs(_attrs,
+ undefined, undefined),
+ {muc_decline, Reason, From, To}.
+
+decode_muc_user_decline_els([], Reason) -> Reason;
+decode_muc_user_decline_els([{xmlel, <<"reason">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_decline_els(_els,
+ decode_muc_user_reason(_el));
+ true -> decode_muc_user_decline_els(_els, Reason)
+ end;
+decode_muc_user_decline_els([_ | _els], Reason) ->
+ decode_muc_user_decline_els(_els, Reason).
+
+decode_muc_user_decline_attrs([{<<"to">>, _val}
+ | _attrs],
+ _To, From) ->
+ decode_muc_user_decline_attrs(_attrs, _val, From);
+decode_muc_user_decline_attrs([{<<"from">>, _val}
+ | _attrs],
+ To, _From) ->
+ decode_muc_user_decline_attrs(_attrs, To, _val);
+decode_muc_user_decline_attrs([_ | _attrs], To, From) ->
+ decode_muc_user_decline_attrs(_attrs, To, From);
+decode_muc_user_decline_attrs([], To, From) ->
+ {decode_muc_user_decline_attr_to(To),
+ decode_muc_user_decline_attr_from(From)}.
+
+encode_muc_user_decline({muc_decline, Reason, From, To},
+ _xmlns_attrs) ->
+ _els = 'encode_muc_user_decline_$reason'(Reason, []),
+ _attrs = encode_muc_user_decline_attr_from(From,
+ encode_muc_user_decline_attr_to(To,
+ _xmlns_attrs)),
+ {xmlel, <<"decline">>, _attrs, _els}.
+
+'encode_muc_user_decline_$reason'(undefined, _acc) ->
+ _acc;
+'encode_muc_user_decline_$reason'(Reason, _acc) ->
+ [encode_muc_user_reason(Reason, []) | _acc].
+
+decode_muc_user_decline_attr_to(undefined) -> undefined;
+decode_muc_user_decline_attr_to(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"to">>, <<"decline">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_decline_attr_to(undefined, _acc) ->
+ _acc;
+encode_muc_user_decline_attr_to(_val, _acc) ->
+ [{<<"to">>, enc_jid(_val)} | _acc].
+
+decode_muc_user_decline_attr_from(undefined) ->
+ undefined;
+decode_muc_user_decline_attr_from(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"from">>, <<"decline">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_decline_attr_from(undefined, _acc) ->
+ _acc;
+encode_muc_user_decline_attr_from(_val, _acc) ->
+ [{<<"from">>, enc_jid(_val)} | _acc].
+
+decode_muc_user_destroy({xmlel, <<"destroy">>, _attrs,
+ _els}) ->
+ Reason = decode_muc_user_destroy_els(_els, undefined),
+ Jid = decode_muc_user_destroy_attrs(_attrs, undefined),
+ {muc_user_destroy, Reason, Jid}.
+
+decode_muc_user_destroy_els([], Reason) -> Reason;
+decode_muc_user_destroy_els([{xmlel, <<"reason">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_destroy_els(_els,
+ decode_muc_user_reason(_el));
+ true -> decode_muc_user_destroy_els(_els, Reason)
+ end;
+decode_muc_user_destroy_els([_ | _els], Reason) ->
+ decode_muc_user_destroy_els(_els, Reason).
+
+decode_muc_user_destroy_attrs([{<<"jid">>, _val}
+ | _attrs],
+ _Jid) ->
+ decode_muc_user_destroy_attrs(_attrs, _val);
+decode_muc_user_destroy_attrs([_ | _attrs], Jid) ->
+ decode_muc_user_destroy_attrs(_attrs, Jid);
+decode_muc_user_destroy_attrs([], Jid) ->
+ decode_muc_user_destroy_attr_jid(Jid).
+
+encode_muc_user_destroy({muc_user_destroy, Reason, Jid},
+ _xmlns_attrs) ->
+ _els = 'encode_muc_user_destroy_$reason'(Reason, []),
+ _attrs = encode_muc_user_destroy_attr_jid(Jid,
+ _xmlns_attrs),
+ {xmlel, <<"destroy">>, _attrs, _els}.
+
+'encode_muc_user_destroy_$reason'(undefined, _acc) ->
+ _acc;
+'encode_muc_user_destroy_$reason'(Reason, _acc) ->
+ [encode_muc_user_reason(Reason, []) | _acc].
+
+decode_muc_user_destroy_attr_jid(undefined) ->
+ undefined;
+decode_muc_user_destroy_attr_jid(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"jid">>, <<"destroy">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_destroy_attr_jid(undefined, _acc) ->
+ _acc;
+encode_muc_user_destroy_attr_jid(_val, _acc) ->
+ [{<<"jid">>, enc_jid(_val)} | _acc].
+
+decode_muc_user_invite({xmlel, <<"invite">>, _attrs,
+ _els}) ->
+ Reason = decode_muc_user_invite_els(_els, undefined),
+ {To, From} = decode_muc_user_invite_attrs(_attrs,
+ undefined, undefined),
+ {muc_invite, Reason, From, To}.
+
+decode_muc_user_invite_els([], Reason) -> Reason;
+decode_muc_user_invite_els([{xmlel, <<"reason">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_invite_els(_els,
+ decode_muc_user_reason(_el));
+ true -> decode_muc_user_invite_els(_els, Reason)
+ end;
+decode_muc_user_invite_els([_ | _els], Reason) ->
+ decode_muc_user_invite_els(_els, Reason).
+
+decode_muc_user_invite_attrs([{<<"to">>, _val}
+ | _attrs],
+ _To, From) ->
+ decode_muc_user_invite_attrs(_attrs, _val, From);
+decode_muc_user_invite_attrs([{<<"from">>, _val}
+ | _attrs],
+ To, _From) ->
+ decode_muc_user_invite_attrs(_attrs, To, _val);
+decode_muc_user_invite_attrs([_ | _attrs], To, From) ->
+ decode_muc_user_invite_attrs(_attrs, To, From);
+decode_muc_user_invite_attrs([], To, From) ->
+ {decode_muc_user_invite_attr_to(To),
+ decode_muc_user_invite_attr_from(From)}.
+
+encode_muc_user_invite({muc_invite, Reason, From, To},
+ _xmlns_attrs) ->
+ _els = 'encode_muc_user_invite_$reason'(Reason, []),
+ _attrs = encode_muc_user_invite_attr_from(From,
+ encode_muc_user_invite_attr_to(To,
+ _xmlns_attrs)),
+ {xmlel, <<"invite">>, _attrs, _els}.
+
+'encode_muc_user_invite_$reason'(undefined, _acc) ->
+ _acc;
+'encode_muc_user_invite_$reason'(Reason, _acc) ->
+ [encode_muc_user_reason(Reason, []) | _acc].
+
+decode_muc_user_invite_attr_to(undefined) -> undefined;
+decode_muc_user_invite_attr_to(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"to">>, <<"invite">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_invite_attr_to(undefined, _acc) -> _acc;
+encode_muc_user_invite_attr_to(_val, _acc) ->
+ [{<<"to">>, enc_jid(_val)} | _acc].
+
+decode_muc_user_invite_attr_from(undefined) ->
+ undefined;
+decode_muc_user_invite_attr_from(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"from">>, <<"invite">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_invite_attr_from(undefined, _acc) ->
+ _acc;
+encode_muc_user_invite_attr_from(_val, _acc) ->
+ [{<<"from">>, enc_jid(_val)} | _acc].
+
+decode_muc_user_actor({xmlel, <<"actor">>, _attrs,
+ _els}) ->
+ {Jid, Nick} = decode_muc_user_actor_attrs(_attrs,
+ undefined, undefined),
+ {muc_actor, Jid, Nick}.
+
+decode_muc_user_actor_attrs([{<<"jid">>, _val}
+ | _attrs],
+ _Jid, Nick) ->
+ decode_muc_user_actor_attrs(_attrs, _val, Nick);
+decode_muc_user_actor_attrs([{<<"nick">>, _val}
+ | _attrs],
+ Jid, _Nick) ->
+ decode_muc_user_actor_attrs(_attrs, Jid, _val);
+decode_muc_user_actor_attrs([_ | _attrs], Jid, Nick) ->
+ decode_muc_user_actor_attrs(_attrs, Jid, Nick);
+decode_muc_user_actor_attrs([], Jid, Nick) ->
+ {decode_muc_user_actor_attr_jid(Jid),
+ decode_muc_user_actor_attr_nick(Nick)}.
+
+encode_muc_user_actor({muc_actor, Jid, Nick},
+ _xmlns_attrs) ->
+ _els = [],
+ _attrs = encode_muc_user_actor_attr_nick(Nick,
+ encode_muc_user_actor_attr_jid(Jid,
+ _xmlns_attrs)),
+ {xmlel, <<"actor">>, _attrs, _els}.
+
+decode_muc_user_actor_attr_jid(undefined) -> undefined;
+decode_muc_user_actor_attr_jid(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"jid">>, <<"actor">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_actor_attr_jid(undefined, _acc) -> _acc;
+encode_muc_user_actor_attr_jid(_val, _acc) ->
+ [{<<"jid">>, enc_jid(_val)} | _acc].
+
+decode_muc_user_actor_attr_nick(undefined) -> undefined;
+decode_muc_user_actor_attr_nick(_val) -> _val.
+
+encode_muc_user_actor_attr_nick(undefined, _acc) ->
+ _acc;
+encode_muc_user_actor_attr_nick(_val, _acc) ->
+ [{<<"nick">>, _val} | _acc].
+
+decode_muc_user_continue({xmlel, <<"continue">>, _attrs,
+ _els}) ->
+ Thread = decode_muc_user_continue_attrs(_attrs,
+ undefined),
+ Thread.
+
+decode_muc_user_continue_attrs([{<<"thread">>, _val}
+ | _attrs],
+ _Thread) ->
+ decode_muc_user_continue_attrs(_attrs, _val);
+decode_muc_user_continue_attrs([_ | _attrs], Thread) ->
+ decode_muc_user_continue_attrs(_attrs, Thread);
+decode_muc_user_continue_attrs([], Thread) ->
+ decode_muc_user_continue_attr_thread(Thread).
+
+encode_muc_user_continue(Thread, _xmlns_attrs) ->
+ _els = [],
+ _attrs = encode_muc_user_continue_attr_thread(Thread,
+ _xmlns_attrs),
+ {xmlel, <<"continue">>, _attrs, _els}.
+
+decode_muc_user_continue_attr_thread(undefined) ->
+ undefined;
+decode_muc_user_continue_attr_thread(_val) -> _val.
+
+encode_muc_user_continue_attr_thread(undefined, _acc) ->
+ _acc;
+encode_muc_user_continue_attr_thread(_val, _acc) ->
+ [{<<"thread">>, _val} | _acc].
+
+decode_muc_user_status({xmlel, <<"status">>, _attrs,
+ _els}) ->
+ Code = decode_muc_user_status_attrs(_attrs, undefined),
+ Code.
+
+decode_muc_user_status_attrs([{<<"code">>, _val}
+ | _attrs],
+ _Code) ->
+ decode_muc_user_status_attrs(_attrs, _val);
+decode_muc_user_status_attrs([_ | _attrs], Code) ->
+ decode_muc_user_status_attrs(_attrs, Code);
+decode_muc_user_status_attrs([], Code) ->
+ decode_muc_user_status_attr_code(Code).
+
+encode_muc_user_status(Code, _xmlns_attrs) ->
+ _els = [],
+ _attrs = encode_muc_user_status_attr_code(Code,
+ _xmlns_attrs),
+ {xmlel, <<"status">>, _attrs, _els}.
+
+decode_muc_user_status_attr_code(undefined) ->
+ undefined;
+decode_muc_user_status_attr_code(_val) ->
+ case catch xml_gen:dec_int(_val, 100, 999) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"code">>, <<"status">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_status_attr_code(undefined, _acc) ->
+ _acc;
+encode_muc_user_status_attr_code(_val, _acc) ->
+ [{<<"code">>, xml_gen:enc_int(_val)} | _acc].
+
+decode_muc_user_item({xmlel, <<"item">>, _attrs,
+ _els}) ->
+ {Actor, Continue, Reason} =
+ decode_muc_user_item_els(_els, undefined, undefined,
+ undefined),
+ {Affiliation, Role, Jid, Nick} =
+ decode_muc_user_item_attrs(_attrs, undefined, undefined,
+ undefined, undefined),
+ {muc_item, Actor, Continue, Reason, Affiliation, Role,
+ Jid, Nick}.
+
+decode_muc_user_item_els([], Actor, Continue, Reason) ->
+ {Actor, Continue, Reason};
+decode_muc_user_item_els([{xmlel, <<"actor">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Actor, Continue, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_item_els(_els,
+ decode_muc_user_actor(_el), Continue,
+ Reason);
+ true ->
+ decode_muc_user_item_els(_els, Actor, Continue, Reason)
+ end;
+decode_muc_user_item_els([{xmlel, <<"continue">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Actor, Continue, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_item_els(_els, Actor,
+ decode_muc_user_continue(_el), Reason);
+ true ->
+ decode_muc_user_item_els(_els, Actor, Continue, Reason)
+ end;
+decode_muc_user_item_els([{xmlel, <<"reason">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Actor, Continue, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_item_els(_els, Actor, Continue,
+ decode_muc_user_reason(_el));
+ true ->
+ decode_muc_user_item_els(_els, Actor, Continue, Reason)
+ end;
+decode_muc_user_item_els([_ | _els], Actor, Continue,
+ Reason) ->
+ decode_muc_user_item_els(_els, Actor, Continue, Reason).
+
+decode_muc_user_item_attrs([{<<"affiliation">>, _val}
+ | _attrs],
+ _Affiliation, Role, Jid, Nick) ->
+ decode_muc_user_item_attrs(_attrs, _val, Role, Jid,
+ Nick);
+decode_muc_user_item_attrs([{<<"role">>, _val}
+ | _attrs],
+ Affiliation, _Role, Jid, Nick) ->
+ decode_muc_user_item_attrs(_attrs, Affiliation, _val,
+ Jid, Nick);
+decode_muc_user_item_attrs([{<<"jid">>, _val} | _attrs],
+ Affiliation, Role, _Jid, Nick) ->
+ decode_muc_user_item_attrs(_attrs, Affiliation, Role,
+ _val, Nick);
+decode_muc_user_item_attrs([{<<"nick">>, _val}
+ | _attrs],
+ Affiliation, Role, Jid, _Nick) ->
+ decode_muc_user_item_attrs(_attrs, Affiliation, Role,
+ Jid, _val);
+decode_muc_user_item_attrs([_ | _attrs], Affiliation,
+ Role, Jid, Nick) ->
+ decode_muc_user_item_attrs(_attrs, Affiliation, Role,
+ Jid, Nick);
+decode_muc_user_item_attrs([], Affiliation, Role, Jid,
+ Nick) ->
+ {decode_muc_user_item_attr_affiliation(Affiliation),
+ decode_muc_user_item_attr_role(Role),
+ decode_muc_user_item_attr_jid(Jid),
+ decode_muc_user_item_attr_nick(Nick)}.
+
+encode_muc_user_item({muc_item, Actor, Continue, Reason,
+ Affiliation, Role, Jid, Nick},
+ _xmlns_attrs) ->
+ _els = 'encode_muc_user_item_$reason'(Reason,
+ 'encode_muc_user_item_$continue'(Continue,
+ 'encode_muc_user_item_$actor'(Actor,
+ []))),
+ _attrs = encode_muc_user_item_attr_nick(Nick,
+ encode_muc_user_item_attr_jid(Jid,
+ encode_muc_user_item_attr_role(Role,
+ encode_muc_user_item_attr_affiliation(Affiliation,
+ _xmlns_attrs)))),
+ {xmlel, <<"item">>, _attrs, _els}.
+
+'encode_muc_user_item_$actor'(undefined, _acc) -> _acc;
+'encode_muc_user_item_$actor'(Actor, _acc) ->
+ [encode_muc_user_actor(Actor, []) | _acc].
+
+'encode_muc_user_item_$continue'(undefined, _acc) ->
+ _acc;
+'encode_muc_user_item_$continue'(Continue, _acc) ->
+ [encode_muc_user_continue(Continue, []) | _acc].
+
+'encode_muc_user_item_$reason'(undefined, _acc) -> _acc;
+'encode_muc_user_item_$reason'(Reason, _acc) ->
+ [encode_muc_user_reason(Reason, []) | _acc].
+
+decode_muc_user_item_attr_affiliation(undefined) ->
+ undefined;
+decode_muc_user_item_attr_affiliation(_val) ->
+ case catch xml_gen:dec_enum(_val,
+ [admin, member, none, outcast, owner])
+ of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"affiliation">>,
+ <<"item">>, <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_item_attr_affiliation(undefined,
+ _acc) ->
+ _acc;
+encode_muc_user_item_attr_affiliation(_val, _acc) ->
+ [{<<"affiliation">>, xml_gen:enc_enum(_val)} | _acc].
+
+decode_muc_user_item_attr_role(undefined) -> undefined;
+decode_muc_user_item_attr_role(_val) ->
+ case catch xml_gen:dec_enum(_val,
+ [moderator, none, participant, visitor])
+ of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"role">>, <<"item">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_item_attr_role(undefined, _acc) -> _acc;
+encode_muc_user_item_attr_role(_val, _acc) ->
+ [{<<"role">>, xml_gen:enc_enum(_val)} | _acc].
+
+decode_muc_user_item_attr_jid(undefined) -> undefined;
+decode_muc_user_item_attr_jid(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"jid">>, <<"item">>,
+ <<"http://jabber.org/protocol/muc#user">>});
+ _res -> _res
+ end.
+
+encode_muc_user_item_attr_jid(undefined, _acc) -> _acc;
+encode_muc_user_item_attr_jid(_val, _acc) ->
+ [{<<"jid">>, enc_jid(_val)} | _acc].
+
+decode_muc_user_item_attr_nick(undefined) -> undefined;
+decode_muc_user_item_attr_nick(_val) -> _val.
+
+encode_muc_user_item_attr_nick(undefined, _acc) -> _acc;
+encode_muc_user_item_attr_nick(_val, _acc) ->
+ [{<<"nick">>, _val} | _acc].
+
+decode_muc_user({xmlel, <<"x">>, _attrs, _els}) ->
+ {Status_codes, Items, Invites, Decline, Destroy} =
+ decode_muc_user_els(_els, [], [], [], undefined,
+ undefined),
+ Password = decode_muc_user_attrs(_attrs, undefined),
+ {muc_user, Decline, Destroy, Invites, Items,
+ Status_codes, Password}.
+
+decode_muc_user_els([], Status_codes, Items, Invites,
+ Decline, Destroy) ->
+ {lists:reverse(Status_codes), lists:reverse(Items),
+ lists:reverse(Invites), Decline, Destroy};
+decode_muc_user_els([{xmlel, <<"decline">>, _attrs, _} =
+ _el
+ | _els],
+ Status_codes, Items, Invites, Decline, Destroy) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_els(_els, Status_codes, Items, Invites,
+ decode_muc_user_decline(_el), Destroy);
+ true ->
+ decode_muc_user_els(_els, Status_codes, Items, Invites,
+ Decline, Destroy)
+ end;
+decode_muc_user_els([{xmlel, <<"destroy">>, _attrs, _} =
+ _el
+ | _els],
+ Status_codes, Items, Invites, Decline, Destroy) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_els(_els, Status_codes, Items, Invites,
+ Decline, decode_muc_user_destroy(_el));
+ true ->
+ decode_muc_user_els(_els, Status_codes, Items, Invites,
+ Decline, Destroy)
+ end;
+decode_muc_user_els([{xmlel, <<"invite">>, _attrs, _} =
+ _el
+ | _els],
+ Status_codes, Items, Invites, Decline, Destroy) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_els(_els, Status_codes, Items,
+ case decode_muc_user_invite(_el) of
+ undefined -> Invites;
+ _new_el -> [_new_el | Invites]
+ end,
+ Decline, Destroy);
+ true ->
+ decode_muc_user_els(_els, Status_codes, Items, Invites,
+ Decline, Destroy)
+ end;
+decode_muc_user_els([{xmlel, <<"item">>, _attrs, _} =
+ _el
+ | _els],
+ Status_codes, Items, Invites, Decline, Destroy) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_els(_els, Status_codes,
+ case decode_muc_user_item(_el) of
+ undefined -> Items;
+ _new_el -> [_new_el | Items]
+ end,
+ Invites, Decline, Destroy);
+ true ->
+ decode_muc_user_els(_els, Status_codes, Items, Invites,
+ Decline, Destroy)
+ end;
+decode_muc_user_els([{xmlel, <<"status">>, _attrs, _} =
+ _el
+ | _els],
+ Status_codes, Items, Invites, Decline, Destroy) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#user">> ->
+ decode_muc_user_els(_els,
+ case decode_muc_user_status(_el) of
+ undefined -> Status_codes;
+ _new_el -> [_new_el | Status_codes]
+ end,
+ Items, Invites, Decline, Destroy);
+ true ->
+ decode_muc_user_els(_els, Status_codes, Items, Invites,
+ Decline, Destroy)
+ end;
+decode_muc_user_els([_ | _els], Status_codes, Items,
+ Invites, Decline, Destroy) ->
+ decode_muc_user_els(_els, Status_codes, Items, Invites,
+ Decline, Destroy).
+
+decode_muc_user_attrs([{<<"password">>, _val} | _attrs],
+ _Password) ->
+ decode_muc_user_attrs(_attrs, _val);
+decode_muc_user_attrs([_ | _attrs], Password) ->
+ decode_muc_user_attrs(_attrs, Password);
+decode_muc_user_attrs([], Password) ->
+ decode_muc_user_attr_password(Password).
+
+encode_muc_user({muc_user, Decline, Destroy, Invites,
+ Items, Status_codes, Password},
+ _xmlns_attrs) ->
+ _els = 'encode_muc_user_$destroy'(Destroy,
+ 'encode_muc_user_$decline'(Decline,
+ 'encode_muc_user_$invites'(Invites,
+ 'encode_muc_user_$items'(Items,
+ 'encode_muc_user_$status_codes'(Status_codes,
+ []))))),
+ _attrs = encode_muc_user_attr_password(Password,
+ _xmlns_attrs),
+ {xmlel, <<"x">>, _attrs, _els}.
+
+'encode_muc_user_$status_codes'([], _acc) -> _acc;
+'encode_muc_user_$status_codes'([Status_codes | _els],
+ _acc) ->
+ 'encode_muc_user_$status_codes'(_els,
+ [encode_muc_user_status(Status_codes, [])
+ | _acc]).
+
+'encode_muc_user_$items'([], _acc) -> _acc;
+'encode_muc_user_$items'([Items | _els], _acc) ->
+ 'encode_muc_user_$items'(_els,
+ [encode_muc_user_item(Items, []) | _acc]).
+
+'encode_muc_user_$invites'([], _acc) -> _acc;
+'encode_muc_user_$invites'([Invites | _els], _acc) ->
+ 'encode_muc_user_$invites'(_els,
+ [encode_muc_user_invite(Invites, []) | _acc]).
+
+'encode_muc_user_$decline'(undefined, _acc) -> _acc;
+'encode_muc_user_$decline'(Decline, _acc) ->
+ [encode_muc_user_decline(Decline, []) | _acc].
+
+'encode_muc_user_$destroy'(undefined, _acc) -> _acc;
+'encode_muc_user_$destroy'(Destroy, _acc) ->
+ [encode_muc_user_destroy(Destroy, []) | _acc].
+
+decode_muc_user_attr_password(undefined) -> undefined;
+decode_muc_user_attr_password(_val) -> _val.
+
+encode_muc_user_attr_password(undefined, _acc) -> _acc;
+encode_muc_user_attr_password(_val, _acc) ->
+ [{<<"password">>, _val} | _acc].
+
+decode_muc_owner_password({xmlel, <<"password">>,
+ _attrs, _els}) ->
+ Cdata = decode_muc_owner_password_els(_els, <<>>),
+ Cdata.
+
+decode_muc_owner_password_els([], Cdata) ->
+ decode_muc_owner_password_cdata(Cdata);
+decode_muc_owner_password_els([{xmlcdata, _data}
+ | _els],
+ Cdata) ->
+ decode_muc_owner_password_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_muc_owner_password_els([_ | _els], Cdata) ->
+ decode_muc_owner_password_els(_els, Cdata).
+
+encode_muc_owner_password(Cdata, _xmlns_attrs) ->
+ _els = encode_muc_owner_password_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"password">>, _attrs, _els}.
+
+decode_muc_owner_password_cdata(<<>>) -> undefined;
+decode_muc_owner_password_cdata(_val) -> _val.
+
+encode_muc_owner_password_cdata(undefined, _acc) ->
+ _acc;
+encode_muc_owner_password_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
+
+decode_muc_owner_reason({xmlel, <<"reason">>, _attrs,
+ _els}) ->
+ Cdata = decode_muc_owner_reason_els(_els, <<>>), Cdata.
+
+decode_muc_owner_reason_els([], Cdata) ->
+ decode_muc_owner_reason_cdata(Cdata);
+decode_muc_owner_reason_els([{xmlcdata, _data} | _els],
+ Cdata) ->
+ decode_muc_owner_reason_els(_els,
+ <<Cdata/binary, _data/binary>>);
+decode_muc_owner_reason_els([_ | _els], Cdata) ->
+ decode_muc_owner_reason_els(_els, Cdata).
+
+encode_muc_owner_reason(Cdata, _xmlns_attrs) ->
+ _els = encode_muc_owner_reason_cdata(Cdata, []),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"reason">>, _attrs, _els}.
+
+decode_muc_owner_reason_cdata(<<>>) -> undefined;
+decode_muc_owner_reason_cdata(_val) -> _val.
+
+encode_muc_owner_reason_cdata(undefined, _acc) -> _acc;
+encode_muc_owner_reason_cdata(_val, _acc) ->
+ [{xmlcdata, _val} | _acc].
+
+decode_muc_owner_destroy({xmlel, <<"destroy">>, _attrs,
+ _els}) ->
+ {Password, Reason} = decode_muc_owner_destroy_els(_els,
+ undefined, undefined),
+ Jid = decode_muc_owner_destroy_attrs(_attrs, undefined),
+ {muc_owner_destroy, Jid, Reason, Password}.
+
+decode_muc_owner_destroy_els([], Password, Reason) ->
+ {Password, Reason};
+decode_muc_owner_destroy_els([{xmlel, <<"password">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Password, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#owner">> ->
+ decode_muc_owner_destroy_els(_els,
+ decode_muc_owner_password(_el), Reason);
+ true ->
+ decode_muc_owner_destroy_els(_els, Password, Reason)
+ end;
+decode_muc_owner_destroy_els([{xmlel, <<"reason">>,
+ _attrs, _} =
+ _el
+ | _els],
+ Password, Reason) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#owner">> ->
+ decode_muc_owner_destroy_els(_els, Password,
+ decode_muc_owner_reason(_el));
+ true ->
+ decode_muc_owner_destroy_els(_els, Password, Reason)
+ end;
+decode_muc_owner_destroy_els([_ | _els], Password,
+ Reason) ->
+ decode_muc_owner_destroy_els(_els, Password, Reason).
+
+decode_muc_owner_destroy_attrs([{<<"jid">>, _val}
+ | _attrs],
+ _Jid) ->
+ decode_muc_owner_destroy_attrs(_attrs, _val);
+decode_muc_owner_destroy_attrs([_ | _attrs], Jid) ->
+ decode_muc_owner_destroy_attrs(_attrs, Jid);
+decode_muc_owner_destroy_attrs([], Jid) ->
+ decode_muc_owner_destroy_attr_jid(Jid).
+
+encode_muc_owner_destroy({muc_owner_destroy, Jid,
+ Reason, Password},
+ _xmlns_attrs) ->
+ _els = 'encode_muc_owner_destroy_$reason'(Reason,
+ 'encode_muc_owner_destroy_$password'(Password,
+ [])),
+ _attrs = encode_muc_owner_destroy_attr_jid(Jid,
+ _xmlns_attrs),
+ {xmlel, <<"destroy">>, _attrs, _els}.
+
+'encode_muc_owner_destroy_$password'(undefined, _acc) ->
+ _acc;
+'encode_muc_owner_destroy_$password'(Password, _acc) ->
+ [encode_muc_owner_password(Password, []) | _acc].
+
+'encode_muc_owner_destroy_$reason'(undefined, _acc) ->
+ _acc;
+'encode_muc_owner_destroy_$reason'(Reason, _acc) ->
+ [encode_muc_owner_reason(Reason, []) | _acc].
+
+decode_muc_owner_destroy_attr_jid(undefined) ->
+ undefined;
+decode_muc_owner_destroy_attr_jid(_val) ->
+ case catch dec_jid(_val) of
+ {'EXIT', _} ->
+ erlang:error({bad_attr_value, <<"jid">>, <<"destroy">>,
+ <<"http://jabber.org/protocol/muc#owner">>});
+ _res -> _res
+ end.
+
+encode_muc_owner_destroy_attr_jid(undefined, _acc) ->
+ _acc;
+encode_muc_owner_destroy_attr_jid(_val, _acc) ->
+ [{<<"jid">>, enc_jid(_val)} | _acc].
+
+decode_muc_owner({xmlel, <<"query">>, _attrs, _els}) ->
+ {Config, Destroy} = decode_muc_owner_els(_els,
+ undefined, undefined),
+ {muc_owner, Destroy, Config}.
+
+decode_muc_owner_els([], Config, Destroy) ->
+ {Config, Destroy};
+decode_muc_owner_els([{xmlel, <<"destroy">>, _attrs,
+ _} =
+ _el
+ | _els],
+ Config, Destroy) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc#owner">> ->
+ decode_muc_owner_els(_els, Config,
+ decode_muc_owner_destroy(_el));
+ true -> decode_muc_owner_els(_els, Config, Destroy)
+ end;
+decode_muc_owner_els([{xmlel, <<"x">>, _attrs, _} = _el
+ | _els],
+ Config, Destroy) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<"jabber:x:data">> ->
+ decode_muc_owner_els(_els, decode_xdata(_el), Destroy);
+ true -> decode_muc_owner_els(_els, Config, Destroy)
+ end;
+decode_muc_owner_els([_ | _els], Config, Destroy) ->
+ decode_muc_owner_els(_els, Config, Destroy).
+
+encode_muc_owner({muc_owner, Destroy, Config},
+ _xmlns_attrs) ->
+ _els = 'encode_muc_owner_$destroy'(Destroy,
+ 'encode_muc_owner_$config'(Config, [])),
+ _attrs = _xmlns_attrs,
+ {xmlel, <<"query">>, _attrs, _els}.
+
+'encode_muc_owner_$config'(undefined, _acc) -> _acc;
+'encode_muc_owner_$config'(Config, _acc) ->
+ [encode_xdata(Config,
+ [{<<"xmlns">>, <<"jabber:x:data">>}])
+ | _acc].
+
+'encode_muc_owner_$destroy'(undefined, _acc) -> _acc;
+'encode_muc_owner_$destroy'(Destroy, _acc) ->
+ [encode_muc_owner_destroy(Destroy, []) | _acc].
+
+decode_muc({xmlel, <<"x">>, _attrs, _els}) ->
+ History = decode_muc_els(_els, undefined),
+ Password = decode_muc_attrs(_attrs, undefined),
+ {muc, History, Password}.
+
+decode_muc_els([], History) -> History;
+decode_muc_els([{xmlel, <<"history">>, _attrs, _} = _el
+ | _els],
+ History) ->
+ _xmlns = xml:get_attr_s(<<"xmlns">>, _attrs),
+ if _xmlns == <<>>;
+ _xmlns == <<"http://jabber.org/protocol/muc">> ->
+ decode_muc_els(_els, decode_muc_history(_el));
+ true -> decode_muc_els(_els, History)
+ end;
+decode_muc_els([_ | _els], History) ->
+ decode_muc_els(_els, History).
+
+decode_muc_attrs([{<<"password">>, _val} | _attrs],
+ _Password) ->
+ decode_muc_attrs(_attrs, _val);
+decode_muc_attrs([_ | _attrs], Password) ->
+ decode_muc_attrs(_attrs, Password);
+decode_muc_attrs([], Password) ->
+ decode_muc_attr_password(Password).
+
+encode_muc({muc, History, Password}, _xmlns_attrs) ->
+ _els = 'encode_muc_$history'(History, []),
+ _attrs = encode_muc_attr_password(Password,
+ _xmlns_attrs),
+ {xmlel, <<"x">>, _attrs, _els}.
+
+'encode_muc_$history'(undefined, _acc) -> _acc;
+'encode_muc_$history'(History, _acc) ->
+ [encode_muc_history(History, []) | _acc].
+
+decode_muc_attr_password(undefined) -> undefined;
+decode_muc_attr_password(_val) -> _val.
+
+encode_muc_attr_password(undefined, _acc) -> _acc;
+encode_muc_attr_password(_val, _acc) ->
+ [{<<"password">>, _val} | _acc].