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>2013-06-29 12:38:19 +0400
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-06-29 12:41:00 +0400
commit09c450062af7e92d2dae0a59bee0869069ffd65a (patch)
treee57b4e5e7344e01c8ad732767bb0ae19f7993c07 /tools
parentac3cd2ebaa64ee4adf843338ce9f95cb214f606a (diff)
Update XMPP codec spec to reflect
the changes in xml_gen
Diffstat (limited to 'tools')
-rw-r--r--tools/xmpp_codec.spec3958
1 files changed, 1979 insertions, 1979 deletions
diff --git a/tools/xmpp_codec.spec b/tools/xmpp_codec.spec
index 6450c2b4b..4d6ce494d 100644
--- a/tools/xmpp_codec.spec
+++ b/tools/xmpp_codec.spec
@@ -1,1988 +1,1988 @@
-{last,
- #elem{name = <<"query">>,
- xmlns = <<"jabber:iq:last">>,
- result = {last, '$seconds', '$text'},
- attrs = [#attr{name = <<"seconds">>,
- default = undefined,
- enc = {enc_int, []},
- dec = {dec_int, [0, infinity]}}],
- cdata = #cdata{label = '$text'}}}.
-
-{version_name,
- #elem{name = <<"name">>,
- xmlns = <<"jabber:iq:version">>,
- result = '$cdata',
- cdata = #cdata{label = '$cdata', required = true}}}.
-
-{version_ver,
- #elem{name = <<"version">>,
- xmlns = <<"jabber:iq:version">>,
- result = '$cdata',
- cdata = #cdata{label = '$cdata', required = true}}}.
-
-{version_os,
- #elem{name = <<"os">>,
- xmlns = <<"jabber:iq:version">>,
- result = '$cdata',
- cdata = #cdata{label = '$cdata', required = true}}}.
-
-{version,
- #elem{name = <<"query">>,
- xmlns = <<"jabber:iq:version">>,
- result = {version, '$name', '$ver', '$os'},
- refs = [#ref{name = version_name,
- label = '$name',
- min = 0, max = 1},
- #ref{name = version_ver,
- label = '$ver',
- min = 0, max = 1},
- #ref{name = version_os,
- label = '$os',
- min = 0, max = 1}]}}.
-
-{roster_group,
- #elem{name = <<"group">>,
- xmlns = <<"jabber:iq:roster">>,
- result = '$cdata',
- cdata = #cdata{required = true, label = '$cdata'}}}.
-
-{roster_item,
- #elem{name = <<"item">>,
- xmlns = <<"jabber:iq:roster">>,
- result = {roster_item, '$jid', '$name',
- '$groups', '$subscription', '$ask'},
- attrs = [#attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"name">>},
- #attr{name = <<"subscription">>,
- default = none,
- enc = {enc_enum, []},
- dec = {dec_enum, [[none,to,from,both,remove]]}},
- #attr{name = <<"ask">>,
- default = undefined,
- enc = {enc_enum, []},
- dec = {dec_enum, [[subscribe]]}}],
- refs = [#ref{name = roster_group, label = '$groups'}]}}.
-
-{roster,
- #elem{name = <<"query">>,
- xmlns = <<"jabber:iq:roster">>,
- result = {roster, '$items', '$ver'},
- attrs = [#attr{name = <<"ver">>}],
- refs = [#ref{name = roster_item, label = '$items'}]}}.
-
-{privacy_message, #elem{name = <<"message">>, xmlns = <<"jabber:iq:privacy">>,
- result = message}}.
-{privacy_iq, #elem{name = <<"iq">>, xmlns = <<"jabber:iq:privacy">>,
- result = iq}}.
-{privacy_presence_in, #elem{name = <<"presence-in">>,
- xmlns = <<"jabber:iq:privacy">>,
- result = 'presence-in'}}.
-{privacy_presence_out, #elem{name = <<"presence-out">>,
- xmlns = <<"jabber:iq:privacy">>,
- result = 'presence-out'}}.
-
-{privacy_item,
- #elem{name = <<"item">>,
- xmlns = <<"jabber:iq:privacy">>,
- result = {privacy_item, '$order', '$action', '$type',
- '$value', '$kinds'},
- attrs = [#attr{name = <<"action">>,
- required = true,
- dec = {dec_enum, [[allow, deny]]},
- enc = {enc_enum, []}},
- #attr{name = <<"order">>,
- required = true,
- dec = {dec_int, [0, infinity]},
- enc = {enc_int, []}},
- #attr{name = <<"type">>,
- dec = {dec_enum, [[group, jid, subscription]]},
- enc = {enc_enum, []}},
- #attr{name = <<"value">>}],
- refs = [#ref{name = privacy_message,
- label = '$kinds'},
- #ref{name = privacy_iq,
- label = '$kinds'},
- #ref{name = privacy_presence_in,
- label = '$kinds'},
- #ref{name = privacy_presence_out,
- label = '$kinds'}]}}.
-
-{privacy_list,
- #elem{name = <<"list">>,
- xmlns = <<"jabber:iq:privacy">>,
- result = {privacy_list, '$name', '$items'},
- attrs = [#attr{name = <<"name">>,
- required = true}],
- refs = [#ref{name = privacy_item,
- label = '$items'}]}}.
-
-{privacy_default_list,
- #elem{name = <<"default">>,
- xmlns = <<"jabber:iq:privacy">>,
- result = '$name',
- attrs = [#attr{name = <<"name">>,
- default = none}]}}.
-
-{privacy_active_list,
- #elem{name = <<"active">>,
- xmlns = <<"jabber:iq:privacy">>,
- result = '$name',
- attrs = [#attr{name = <<"name">>,
- default = none}]}}.
-
-{privacy,
- #elem{name = <<"query">>,
- xmlns = <<"jabber:iq:privacy">>,
- result = {privacy, '$lists', '$default', '$active'},
- refs = [#ref{name = privacy_list,
- label = '$lists'},
- #ref{name = privacy_default_list,
- min = 0, max = 1,
- label = '$default'},
- #ref{name = privacy_active_list,
- min = 0, max = 1,
- label = '$active'}]}}.
-
-{block_item,
- #elem{name = <<"item">>,
- xmlns = <<"urn:xmpp:blocking">>,
- result = '$jid',
- attrs = [#attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}]}}.
-
-{block,
- #elem{name = <<"block">>,
- xmlns = <<"urn:xmpp:blocking">>,
- result = {block, '$items'},
- refs = [#ref{name = block_item,
- label = '$items'}]}}.
-
-{unblock,
- #elem{name = <<"unblock">>,
- xmlns = <<"urn:xmpp:blocking">>,
- result = {unblock, '$items'},
- refs = [#ref{name = block_item,
- label = '$items'}]}}.
-
-{block_list,
- #elem{name = <<"blocklist">>,
- xmlns = <<"urn:xmpp:blocking">>,
- result = {block_list}}}.
-
-{disco_identity,
- #elem{name = <<"identity">>,
- xmlns = <<"http://jabber.org/protocol/disco#info">>,
- result = {identity, '$category', '$type', '$lang', '$name'},
- attrs = [#attr{name = <<"category">>,
- required = true},
- #attr{name = <<"type">>,
- required = true},
- #attr{name = <<"xml:lang">>,
- label = '$lang'},
- #attr{name = <<"name">>}]}}.
-
-{disco_feature,
- #elem{name = <<"feature">>,
- xmlns = <<"http://jabber.org/protocol/disco#info">>,
- result = '$var',
- attrs = [#attr{name = <<"var">>,
- required = true}]}}.
-
-{disco_info,
- #elem{name = <<"query">>,
- xmlns = <<"http://jabber.org/protocol/disco#info">>,
- result = {disco_info, '$node', '$identities', '$features', '$xdata'},
- attrs = [#attr{name = <<"node">>}],
- refs = [#ref{name = disco_identity,
- label = '$identities'},
- #ref{name = disco_feature,
- label = '$features'},
- #ref{name = xdata,
- label = '$xdata'}]}}.
-
-{disco_item,
- #elem{name = <<"item">>,
- xmlns = <<"http://jabber.org/protocol/disco#items">>,
- result = {disco_item, '$jid', '$name', '$node'},
- attrs = [#attr{name = <<"jid">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []},
- required = true},
- #attr{name = <<"name">>},
- #attr{name = <<"node">>}]}}.
-{disco_items,
- #elem{name = <<"query">>,
- xmlns = <<"http://jabber.org/protocol/disco#items">>,
- result = {disco_items, '$node', '$items'},
- attrs = [#attr{name = <<"node">>}],
- refs = [#ref{name = disco_item,
- label = '$items'}]}}.
-
-{private,
- #elem{name = <<"query">>,
- xmlns = <<"jabber:iq:private">>,
- result = {private, '$_els'}}}.
-
-{conference_nick,
- #elem{name = <<"nick">>,
- xmlns = <<"storage:bookmarks">>,
- result = '$cdata'}}.
-
-{conference_password,
- #elem{name = <<"password">>,
- xmlns = <<"storage:bookmarks">>,
- result = '$cdata'}}.
-
-{bookmark_conference,
- #elem{name = <<"conference">>,
- xmlns = <<"storage:bookmarks">>,
- result = {bookmark_conference, '$name', '$jid',
- '$autojoin', '$nick', '$password'},
- attrs = [#attr{name = <<"name">>,
- required = true},
- #attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"autojoin">>,
- default = false,
- dec = {dec_bool, []},
- enc = {enc_bool, []}}],
- refs = [#ref{name = conference_nick,
- label = '$nick',
- min = 0, max = 1},
- #ref{name = conference_password,
- label = '$password',
- min = 0, max = 1}]}}.
-
-{bookmark_url,
- #elem{name = <<"url">>,
- xmlns = <<"storage:bookmarks">>,
- result = {bookmark_url, '$name', '$url'},
- attrs = [#attr{name = <<"name">>,
- required = true},
- #attr{name = <<"url">>,
- required = true}]}}.
-
-{bookmarks_storage,
- #elem{name = <<"storage">>,
- xmlns = <<"storage:bookmarks">>,
- result = {bookmark_storage, '$conference', '$url'},
- refs = [#ref{name = bookmark_conference,
- label = '$conference'},
- #ref{name = bookmark_url,
- label = '$url'}]}}.
-
-{stat_error,
- #elem{name = <<"error">>,
- xmlns = <<"http://jabber.org/protocol/stats">>,
- result = {'$code', '$cdata'},
- attrs = [#attr{name = <<"code">>,
- required = true,
- enc = {enc_int, []},
- dec = {dec_int, []}}]}}.
-
-{stat,
- #elem{name = <<"stat">>,
- xmlns = <<"http://jabber.org/protocol/stats">>,
- result = {stat, '$name', '$units', '$value', '$error'},
- attrs = [#attr{name = <<"name">>,
- required = true},
- #attr{name = <<"units">>},
- #attr{name = <<"value">>}],
- refs = [#ref{name = stat_error,
- label = '$error'}]}}.
-
-{stats,
- #elem{name = <<"query">>,
- xmlns = <<"http://jabber.org/protocol/stats">>,
- result = {stats, '$stat'},
- refs = [#ref{name = stat,
- label = '$stat'}]}}.
-
-{iq,
- #elem{name = <<"iq">>,
- xmlns = <<"jabber:client">>,
- result = {iq, '$id', '$type', '$lang', '$from', '$to',
- '$error', '$_els'},
- attrs = [#attr{name = <<"id">>,
- required = true},
- #attr{name = <<"type">>,
- required = true,
- enc = {enc_enum, []},
- dec = {dec_enum, [[get, set, result, error]]}},
- #attr{name = <<"from">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"to">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"xml:lang">>,
- label = '$lang'}],
- refs = [#ref{name = error, min = 0, max = 1, label = '$error'}]}}.
-
-{message_subject,
- #elem{name = <<"subject">>,
- xmlns = <<"jabber:client">>,
- result = {text, '$lang', '$data'},
- cdata = #cdata{label = '$data'},
- attrs = [#attr{name = <<"xml:lang">>, label = '$lang'}]}}.
-
-{message_body,
- #elem{name = <<"body">>,
- xmlns = <<"jabber:client">>,
- result = {text, '$lang', '$data'},
- cdata = #cdata{label = '$data'},
- attrs = [#attr{name = <<"xml:lang">>, label = '$lang'}]}}.
-
-{message_thread,
- #elem{name = <<"thread">>,
- xmlns = <<"jabber:client">>,
- result = '$cdata'}}.
-
-{message,
- #elem{name = <<"message">>,
- xmlns = <<"jabber:client">>,
- result = {message, '$id', '$type', '$lang', '$from', '$to',
- '$subject', '$body', '$thread', '$error', '$_els'},
- attrs = [#attr{name = <<"id">>},
- #attr{name = <<"type">>,
- default = normal,
- enc = {enc_enum, []},
- dec = {dec_enum, [[chat, normal, groupchat,
- headline, error]]}},
- #attr{name = <<"from">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"to">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"xml:lang">>,
- label = '$lang'}],
- refs = [#ref{name = error, min = 0, max = 1, label = '$error'},
- #ref{name = message_subject, label = '$subject'},
- #ref{name = message_thread, min = 0, max = 1, label = '$thread'},
- #ref{name = message_body, label = '$body'}]}}.
-
-{presence_show,
- #elem{name = <<"show">>,
- xmlns = <<"jabber:client">>,
- result = '$cdata',
- cdata = #cdata{enc = {enc_enum, []},
- dec = {dec_enum, [[away, chat, dnd, xa]]}}}}.
-
-{presence_status,
- #elem{name = <<"status">>,
- xmlns = <<"jabber:client">>,
- result = {text, '$lang', '$data'},
- cdata = #cdata{label = '$data'},
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$lang'}]}}.
-
-{presence_priority,
- #elem{name = <<"priority">>,
- xmlns = <<"jabber:client">>,
- result = '$cdata',
- cdata = #cdata{enc = {enc_int, []},
- dec = {dec_int, []}}}}.
-
-{presence,
- #elem{name = <<"presence">>,
- xmlns = <<"jabber:client">>,
- result = {presence, '$id', '$type', '$lang', '$from', '$to',
- '$show', '$status', '$priority', '$error', '$_els'},
- attrs = [#attr{name = <<"id">>},
- #attr{name = <<"type">>,
- enc = {enc_enum, []},
- dec = {dec_enum, [[unavailable, subscribe, subscribed,
- unsubscribe, unsubscribed,
- probe, error]]}},
- #attr{name = <<"from">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"to">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"xml:lang">>,
- label = '$lang'}],
- refs = [#ref{name = error, min = 0, max = 1, label = '$error'},
- #ref{name = presence_show, min = 0, max = 1, label = '$show'},
- #ref{name = presence_status, label = '$status'},
- #ref{name = presence_priority, min = 0, max = 1,
- label = '$priority'}]}}.
-
-{error_bad_request,
- #elem{name = <<"bad-request">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'bad-request'}}.
-{error_conflict,
- #elem{name = <<"conflict">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'conflict'}}.
-{error_feature_not_implemented,
- #elem{name = <<"feature-not-implemented">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'feature-not-implemented'}}.
-{error_forbidden,
- #elem{name = <<"forbidden">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'forbidden'}}.
-{error_gone,
- #elem{name = <<"gone">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- cdata = #cdata{label = '$uri'},
- result = {'gone', '$uri'}}}.
-{error_internal_server_error,
- #elem{name = <<"internal-server-error">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'internal-server-error'}}.
-{error_item_not_found,
- #elem{name = <<"item-not-found">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'item-not-found'}}.
-{error_jid_malformed,
- #elem{name = <<"jid-malformed">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'jid-malformed'}}.
-{error_not_acceptable,
- #elem{name = <<"not-acceptable">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'not-acceptable'}}.
-{error_not_allowed,
- #elem{name = <<"not-allowed">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'not-allowed'}}.
-{error_not_authorized,
- #elem{name = <<"not-authorized">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'not-authorized'}}.
-{error_policy_violation,
- #elem{name = <<"policy-violation">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'policy-violation'}}.
-{error_recipient_unavailable,
- #elem{name = <<"recipient-unavailable">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'recipient-unavailable'}}.
-{error_redirect,
- #elem{name = <<"redirect">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- cdata = #cdata{label = '$uri'},
- result = {'redirect', '$uri'}}}.
-{error_registration_required,
- #elem{name = <<"registration-required">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'registration-required'}}.
-{error_remote_server_not_found,
- #elem{name = <<"remote-server-not-found">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'remote-server-not-found'}}.
-{error_remote_server_timeout,
- #elem{name = <<"remote-server-timeout">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'remote-server-timeout'}}.
-{error_resource_constraint,
- #elem{name = <<"resource-constraint">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'resource-constraint'}}.
-{error_service_unavailable,
- #elem{name = <<"service-unavailable">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'service-unavailable'}}.
-{error_subscription_required,
- #elem{name = <<"subscription-required">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'subscription-required'}}.
-{error_undefined_condition,
- #elem{name = <<"undefined-condition">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'undefined-condition'}}.
-{error_unexpected_request,
- #elem{name = <<"unexpected-request">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- result = 'unexpected-request'}}.
-
-{error_text,
- #elem{name = <<"text">>,
- result = {text, '$lang', '$data'},
- cdata = #cdata{label = '$data'},
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$lang'}]}}.
-
-{error,
- #elem{name = <<"error">>,
- xmlns = <<"jabber:client">>,
- result = {error, '$type', '$by', '$reason', '$text'},
- attrs = [#attr{name = <<"type">>,
- label = '$type',
- required = true,
- dec = {dec_enum, [[auth, cancel, continue,
- modify, wait]]},
- enc = {enc_enum, []}},
- #attr{name = <<"by">>}],
- refs = [#ref{name = error_text,
- min = 0, max = 1, label = '$text'},
- #ref{name = error_bad_request,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_conflict,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_feature_not_implemented,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_forbidden,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_gone,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_internal_server_error,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_item_not_found,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_jid_malformed,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_not_acceptable,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_not_allowed,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_not_authorized,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_policy_violation,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_recipient_unavailable,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_redirect,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_registration_required,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_remote_server_not_found,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_remote_server_timeout,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_resource_constraint,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_service_unavailable,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_subscription_required,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_undefined_condition,
- min = 0, max = 1, label = '$reason'},
- #ref{name = error_unexpected_request,
- min = 0, max = 1, label = '$reason'}]}}.
-
-{bind_jid,
- #elem{name = <<"jid">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
- result = '$cdata',
- cdata = #cdata{dec = {dec_jid, []},
- enc = {enc_jid, []}}}}.
-
-{bind_resource,
- #elem{name = <<"resource">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
- result = '$cdata',
- cdata = #cdata{dec = {resourceprep, []},
- enc = {resourceprep, []}}}}.
-
-{bind, #elem{name = <<"bind">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
- result = {bind, '$jid', '$resource'},
- refs = [#ref{name = bind_jid,
- label = '$jid',
- min = 0, max = 1},
- #ref{name = bind_resource,
- min = 0, max = 1,
- label = '$resource'}]}}.
-
-{sasl_auth,
- #elem{name = <<"auth">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- cdata = #cdata{label = '$text',
- dec = {base64, decode, []},
- enc = {base64, encode, []}},
- result = {sasl_auth, '$mechanism', '$text'},
- attrs = [#attr{name = <<"mechanism">>,
- required = true}]}}.
-
-{sasl_abort,
- #elem{name = <<"abort">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- result = {sasl_abort}}}.
-
-{sasl_challenge,
- #elem{name = <<"challenge">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- cdata = #cdata{label = '$text',
- dec = {base64, decode, []},
- enc = {base64, encode, []}},
- result = {sasl_challenge, '$text'}}}.
-
-{sasl_response,
- #elem{name = <<"response">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- cdata = #cdata{label = '$text',
- dec = {base64, decode, []},
- enc = {base64, encode, []}},
- result = {sasl_response, '$text'}}}.
-
-{sasl_success,
- #elem{name = <<"success">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- cdata = #cdata{label = '$text',
- dec = {base64, decode, []},
- enc = {base64, encode, []}},
- result = {sasl_success, '$text'}}}.
-
-{sasl_failure_text,
- #elem{name = <<"text">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- result = {text, '$lang', '$data'},
- cdata = #cdata{label = '$data'},
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$lang'}]}}.
-
-{sasl_failure_aborted,
- #elem{name = <<"aborted">>,
- result = 'aborted',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_account_disabled,
- #elem{name = <<"account-disabled">>,
- result = 'account-disabled',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_credentials_expired,
- #elem{name = <<"credentials-expired">>,
- result = 'credentials-expired',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_encryption_required,
- #elem{name = <<"encryption-required">>,
- result = 'encryption-required',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_incorrect_encoding,
- #elem{name = <<"incorrect-encoding">>,
- result = 'incorrect-encoding',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_invalid_authzid,
- #elem{name = <<"invalid-authzid">>,
- result = 'invalid-authzid',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_invalid_mechanism,
- #elem{name = <<"invalid-mechanism">>,
- result = 'invalid-mechanism',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_malformed_request,
- #elem{name = <<"malformed-request">>,
- result = 'malformed-request',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_mechanism_too_weak,
- #elem{name = <<"mechanism-too-weak">>,
- result = 'mechanism-too-weak',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_not_authorized,
- #elem{name = <<"not-authorized">>,
- result = 'not-authorized',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-{sasl_failure_temporary_auth_failure,
- #elem{name = <<"temporary-auth-failure">>,
- result = 'temporary-auth-failure',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}}.
-
-{sasl_failure,
- #elem{name = <<"failure">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- result = {sasl_failure, '$reason', '$text'},
- refs = [#ref{name = sasl_failure_text,
- label = '$text'},
- #ref{name = sasl_failure_aborted,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_account_disabled,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_credentials_expired,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_encryption_required,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_incorrect_encoding,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_invalid_authzid,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_invalid_mechanism,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_malformed_request,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_mechanism_too_weak,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_not_authorized,
- min = 0, max = 1, label = '$reason'},
- #ref{name = sasl_failure_temporary_auth_failure,
- min = 0, max = 1, label = '$reason'}]}}.
-
-{sasl_mechanism,
- #elem{name = <<"mechanism">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- result = '$cdata'}}.
-
-{sasl_mechanisms,
- #elem{name = <<"mechanisms">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
- result = {sasl_mechanisms, '$list'},
- refs = [#ref{name = sasl_mechanism,
- label = '$list'}]}}.
-
-{starttls_required,
- #elem{name = <<"required">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
- result = true}}.
-
-{starttls,
- #elem{name = <<"starttls">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
- result = {starttls, '$required'},
- refs = [#ref{name = starttls_required,
- label = '$required',
- min = 0, max = 1,
- default = false}]}}.
-
-{starttls_proceed,
- #elem{name = <<"proceed">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
- result = {starttls_proceed}}}.
-
-{starttls_failure,
- #elem{name = <<"failure">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
- result = {starttls_failure}}}.
-
-{compress_failure_setup_failed,
- #elem{name = <<"setup-failed">>,
- xmlns = <<"http://jabber.org/protocol/compress">>,
- result = 'setup-failed'}}.
-{compress_failure_processing_failed,
- #elem{name = <<"processing-failed">>,
- xmlns = <<"http://jabber.org/protocol/compress">>,
- result = 'processing-failed'}}.
-{compress_failure_unsupported_method,
- #elem{name = <<"unsupported-method">>,
- xmlns = <<"http://jabber.org/protocol/compress">>,
- result = 'unsupported-method'}}.
-
-{compress_failure,
- #elem{name = <<"failure">>,
- xmlns = <<"http://jabber.org/protocol/compress">>,
- result = {compress_failure, '$reason'},
- refs = [#ref{name = compress_failure_setup_failed,
- min = 0, max = 1, label = '$reason'},
- #ref{name = compress_failure_processing_failed,
- min = 0, max = 1, label = '$reason'},
- #ref{name = compress_failure_unsupported_method,
- min = 0, max = 1, label = '$reason'}]}}.
-
-{compress_method,
- #elem{name = <<"method">>,
- xmlns = <<"http://jabber.org/protocol/compress">>,
- result = '$cdata'}}.
-
-{compress,
- #elem{name = <<"compress">>,
- xmlns = <<"http://jabber.org/protocol/compress">>,
- result = {compress, '$methods'},
- refs = [#ref{name = compress_method,
- label = '$methods'}]}}.
-
-{compressed,
- #elem{name = <<"compressed">>,
- xmlns = <<"http://jabber.org/protocol/compress">>,
- result = {compressed}}}.
-
-{compression_method,
- #elem{name = <<"method">>,
- xmlns = <<"http://jabber.org/features/compress">>,
- result = '$cdata'}}.
-
-{compression,
- #elem{name = <<"compression">>,
- xmlns = <<"http://jabber.org/features/compress">>,
- result = {compression, '$methods'},
- refs = [#ref{name = compression_method, label = '$methods'}]}}.
-
-{stream_features,
- #elem{name = <<"stream:features">>,
- xmlns = <<"http://etherx.jabber.org/streams">>,
- result = {stream_features, '$_els'}}}.
-
-{p1_push,
- #elem{name = <<"push">>,
- result = {p1_push},
- xmlns = <<"p1:push">>}}.
-
-{p1_rebind,
- #elem{name = <<"rebind">>,
- result = {p1_rebind},
- xmlns = <<"p1:rebind">>}}.
-
-{p1_ack,
- #elem{name = <<"ack">>,
- result = {p1_ack},
- xmlns = <<"p1:ack">>}}.
-
-{caps,
- #elem{name = <<"c">>,
- xmlns = <<"http://jabber.org/protocol/caps">>,
- result = {caps, '$hash', '$node', '$ver'},
- attrs = [#attr{name = <<"hash">>},
- #attr{name = <<"node">>},
- #attr{name = <<"ver">>,
- enc = {base64, encode, []},
- dec = {base64, decode, []}}]}}.
-
-{feature_register,
- #elem{name = <<"register">>,
- xmlns = <<"http://jabber.org/features/iq-register">>,
- result = {feature_register}}}.
-
-{register_registered,
- #elem{name = <<"registered">>,
- xmlns = <<"jabber:iq:register">>,
- result = true}}.
-{register_remove,
- #elem{name = <<"remove">>,
- xmlns = <<"jabber:iq:register">>,
- result = true}}.
-{register_instructions,
- #elem{name = <<"instructions">>,
- xmlns = <<"jabber:iq:register">>,
- result = '$cdata'}}.
-{register_username,
- #elem{name = <<"username">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_nick,
- #elem{name = <<"nick">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_password,
- #elem{name = <<"password">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_name,
- #elem{name = <<"name">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_first,
- #elem{name = <<"first">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_last,
- #elem{name = <<"last">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_email,
- #elem{name = <<"email">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_address,
- #elem{name = <<"address">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_city,
- #elem{name = <<"city">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_state,
- #elem{name = <<"state">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_zip,
- #elem{name = <<"zip">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_phone,
- #elem{name = <<"phone">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_url,
- #elem{name = <<"url">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_date,
- #elem{name = <<"date">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_misc,
- #elem{name = <<"misc">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_text,
- #elem{name = <<"text">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-{register_key,
- #elem{name = <<"key">>,
- xmlns = <<"jabber:iq:register">>,
- cdata = #cdata{default = none},
- result = '$cdata'}}.
-
-{register,
- #elem{name = <<"query">>,
- xmlns = <<"jabber:iq:register">>,
- result = {register, '$registered', '$remove', '$instructions',
- '$username', '$nick', '$password', '$name',
- '$first', '$last', '$email', '$address',
- '$city', '$state', '$zip', '$phone', '$url',
- '$date', '$misc', '$text', '$key'},
- refs = [#ref{name = register_registered, min = 0, max = 1,
- default = false, label = '$registered'},
- #ref{name = register_remove, min = 0, max = 1,
- default = false, label = '$remove'},
- #ref{name = register_instructions, min = 0, max = 1,
- label = '$instructions'},
- #ref{name = register_username, min = 0, max = 1,
- label = '$username'},
- #ref{name = register_nick, min = 0, max = 1,
- label = '$nick'},
- #ref{name = register_password, min = 0, max = 1,
- label = '$password'},
- #ref{name = register_name, min = 0, max = 1,
- label = '$name'},
- #ref{name = register_first, min = 0, max = 1,
- label = '$first'},
- #ref{name = register_last, min = 0, max = 1,
- label = '$last'},
- #ref{name = register_email, min = 0, max = 1,
- label = '$email'},
- #ref{name = register_address, min = 0, max = 1,
- label = '$address'},
- #ref{name = register_city, min = 0, max = 1,
- label = '$city'},
- #ref{name = register_state, min = 0, max = 1,
- label = '$state'},
- #ref{name = register_zip, min = 0, max = 1,
- label = '$zip'},
- #ref{name = register_phone, min = 0, max = 1,
- label = '$phone'},
- #ref{name = register_url, min = 0, max = 1,
- label = '$url'},
- #ref{name = register_date, min = 0, max = 1,
- label = '$date'},
- #ref{name = register_misc, min = 0, max = 1,
- label = '$misc'},
- #ref{name = register_text, min = 0, max = 1,
- label = '$text'},
- #ref{name = register_key, min = 0, max = 1,
- label = '$key'}]}}.
-
-{session,
- #elem{name = <<"session">>,
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-session">>,
- result = {session}}}.
-
-{ping,
- #elem{name = <<"ping">>,
- xmlns = <<"urn:xmpp:ping">>,
- result = {ping}}}.
-
-{time_utc,
- #elem{name = <<"utc">>,
- xmlns = <<"urn:xmpp:time">>,
- result = '$cdata',
- cdata = #cdata{dec = {dec_utc, []},
- enc = {enc_utc, []}}}}.
-
-{time_tzo,
- #elem{name = <<"tzo">>,
- xmlns = <<"urn:xmpp:time">>,
- result = '$cdata',
- cdata = #cdata{dec = {dec_tzo, []},
- enc = {enc_tzo, []}}}}.
-
-{time,
- #elem{name = <<"time">>,
- xmlns = <<"urn:xmpp:time">>,
- result = {time, '$tzo', '$utc'},
- refs = [#ref{name = time_tzo,
- label = '$tzo',
- min = 0, max = 1},
- #ref{name = time_utc,
- label = '$utc',
- min = 0, max = 1}]}}.
-
-{stream_error_text,
- #elem{name = <<"text">>,
- result = {text, '$lang', '$data'},
- cdata = #cdata{label = '$data'},
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
- attrs = [#attr{name = <<"xml:lang">>,
- label = '$lang'}]}}.
-
-{stream_error_bad_format,
- #elem{name = <<"bad-format">>,
- result = 'bad-format',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_bad_namespace_prefix,
- #elem{name = <<"bad-namespace-prefix">>,
- result = 'bad-namespace-prefix',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_conflict,
- #elem{name = <<"conflict">>,
- result = 'conflict',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_connection_timeout,
- #elem{name = <<"connection-timeout">>,
- result = 'connection-timeout',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_host_gone,
- #elem{name = <<"host-gone">>,
- result = 'host-gone',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_host_unknown,
- #elem{name = <<"host-unknown">>,
- result = 'host-unknown',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_improper_addressing,
- #elem{name = <<"improper-addressing">>,
- result = 'improper-addressing',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_internal_server_error,
- #elem{name = <<"internal-server-error">>,
- result = 'internal-server-error',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_invalid_from,
- #elem{name = <<"invalid-from">>,
- result = 'invalid-from',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_invalid_id,
- #elem{name = <<"invalid-id">>,
- result = 'invalid-id',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_invalid_namespace,
- #elem{name = <<"invalid-namespace">>,
- result = 'invalid-namespace',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_invalid_xml,
- #elem{name = <<"invalid-xml">>,
- result = 'invalid-xml',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_not_authorized,
- #elem{name = <<"not-authorized">>,
- result = 'not-authorized',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_not_well_formed,
- #elem{name = <<"not-well-formed">>,
- result = 'not-well-formed',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_policy_violation,
- #elem{name = <<"policy-violation">>,
- result = 'policy-violation',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_remote_connection_failed,
- #elem{name = <<"remote-connection-failed">>,
- result = 'remote-connection-failed',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_reset,
- #elem{name = <<"reset">>,
- result = 'reset',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_resource_constraint,
- #elem{name = <<"resource-constraint">>,
- result = 'resource-constraint',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_restricted_xml,
- #elem{name = <<"restricted-xml">>,
- result = 'restricted-xml',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_see_other_host,
- #elem{name = <<"see-other-host">>,
- cdata = #cdata{required = true, label = '$host'},
- result = {'see-other-host', '$host'},
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_system_shutdown,
- #elem{name = <<"system-shutdown">>,
- result = 'system-shutdown',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_undefined_condition,
- #elem{name = <<"undefined-condition">>,
- result = 'undefined-condition',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_unsupported_encoding,
- #elem{name = <<"unsupported-encoding">>,
- result = 'unsupported-encoding',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_unsupported_stanza_type,
- #elem{name = <<"unsupported-stanza-type">>,
- result = 'unsupported-stanza-type',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-{stream_error_unsupported_version,
- #elem{name = <<"unsupported-version">>,
- result = 'unsupported-version',
- xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}}.
-
-{stream_error,
- #elem{name = <<"stream:error">>,
- xmlns = <<"http://etherx.jabber.org/streams">>,
- result = {stream_error, '$reason', '$text'},
- refs = [#ref{name = stream_error_text,
- label = '$text',
- min = 0, max = 1},
- #ref{name = stream_error_bad_format,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_bad_namespace_prefix,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_conflict,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_connection_timeout,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_host_gone,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_host_unknown,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_improper_addressing,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_internal_server_error,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_invalid_from,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_invalid_id,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_invalid_namespace,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_invalid_xml,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_not_authorized,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_not_well_formed,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_policy_violation,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_remote_connection_failed,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_reset,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_resource_constraint,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_restricted_xml,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_see_other_host,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_system_shutdown,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_undefined_condition,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_unsupported_encoding,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_unsupported_stanza_type,
- min = 0, max = 1, label = '$reason'},
- #ref{name = stream_error_unsupported_version,
- min = 0, max = 1, label = '$reason'}
- ]}}.
-
-{vcard_HOME, #elem{name = <<"HOME">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_WORK, #elem{name = <<"WORK">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_VOICE, #elem{name = <<"VOICE">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_FAX, #elem{name = <<"FAX">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_PAGER, #elem{name = <<"PAGER">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_MSG, #elem{name = <<"MSG">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_CELL, #elem{name = <<"CELL">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_VIDEO, #elem{name = <<"VIDEO">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_BBS, #elem{name = <<"BBS">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_MODEM, #elem{name = <<"MODEM">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_ISDN, #elem{name = <<"ISDN">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_PCS, #elem{name = <<"PCS">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_POSTAL, #elem{name = <<"POSTAL">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_PARCEL, #elem{name = <<"PARCEL">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_DOM, #elem{name = <<"DOM">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_INTL, #elem{name = <<"INTL">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_PREF, #elem{name = <<"PREF">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_INTERNET, #elem{name = <<"INTERNET">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_X400, #elem{name = <<"X400">>, xmlns = <<"vcard-temp">>, result = true}}.
-{vcard_FAMILY, #elem{name = <<"FAMILY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_GIVEN, #elem{name = <<"GIVEN">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_MIDDLE, #elem{name = <<"MIDDLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_PREFIX, #elem{name = <<"PREFIX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_SUFFIX, #elem{name = <<"SUFFIX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_POBOX, #elem{name = <<"POBOX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_EXTADD, #elem{name = <<"EXTADD">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_STREET, #elem{name = <<"STREET">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_LOCALITY, #elem{name = <<"LOCALITY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_REGION, #elem{name = <<"REGION">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_PCODE, #elem{name = <<"PCODE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_CTRY, #elem{name = <<"CTRY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_LINE, #elem{name = <<"LINE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_NUMBER, #elem{name = <<"NUMBER">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_USERID, #elem{name = <<"USERID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_LAT, #elem{name = <<"LAT">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_LON, #elem{name = <<"LON">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_ORGNAME, #elem{name = <<"ORGNAME">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_ORGUNIT, #elem{name = <<"ORGUNIT">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_PHONETIC, #elem{name = <<"PHONETIC">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_CRED, #elem{name = <<"CRED">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_VERSION, #elem{name = <<"VERSION">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_FN, #elem{name = <<"FN">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_NICKNAME, #elem{name = <<"NICKNAME">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_BDAY, #elem{name = <<"BDAY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_JABBERID, #elem{name = <<"JABBERID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_MAILER, #elem{name = <<"MAILER">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_TZ, #elem{name = <<"TZ">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_TITLE, #elem{name = <<"TITLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_ROLE, #elem{name = <<"ROLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_KEYWORD, #elem{name = <<"KEYWORD">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_NOTE, #elem{name = <<"NOTE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_PRODID, #elem{name = <<"PRODID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_REV, #elem{name = <<"REV">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_SORT_STRING, #elem{name = <<"SORT-STRING">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_UID, #elem{name = <<"UID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_URL, #elem{name = <<"URL">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_DESC, #elem{name = <<"DESC">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_TYPE, #elem{name = <<"TYPE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_EXTVAL, #elem{name = <<"EXTVAL">>, xmlns = <<"vcard-temp">>, result = '$cdata'}}.
-{vcard_PUBLIC, #elem{name = <<"PUBLIC">>, xmlns = <<"vcard-temp">>, result = public}}.
-{vcard_PRIVATE, #elem{name = <<"PRIVATE">>, xmlns = <<"vcard-temp">>, result = private}}.
-{vcard_CONFIDENTIAL, #elem{name = <<"CONFIDENTIAL">>, xmlns = <<"vcard-temp">>, result = confidential}}.
-
-{vcard_N,
- #elem{name = <<"N">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_name, '$family', '$given', '$middle',
- '$prefix', '$suffix'},
- refs = [#ref{name = vcard_FAMILY, min = 0, max = 1, label = '$family'},
- #ref{name = vcard_GIVEN, min = 0, max = 1, label = '$given'},
- #ref{name = vcard_MIDDLE, min = 0, max = 1, label = '$middle'},
- #ref{name = vcard_PREFIX, min = 0, max = 1, label = '$prefix'},
- #ref{name = vcard_SUFFIX, min = 0, max = 1, label = '$suffix'}]}}.
-
-{vcard_ADR,
- #elem{name = <<"ADR">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_adr, '$home', '$work', '$postal', '$parcel',
- '$dom', '$intl', '$pref', '$pobox', '$extadd', '$street',
- '$locality', '$region', '$pcode', '$ctry'},
- refs = [#ref{name = vcard_HOME, default = false,
- min = 0, max = 1, label = '$home'},
- #ref{name = vcard_WORK, default = false,
- min = 0, max = 1, label = '$work'},
- #ref{name = vcard_POSTAL, default = false,
- min = 0, max = 1, label = '$postal'},
- #ref{name = vcard_PARCEL, default = false,
- min = 0, max = 1, label = '$parcel'},
- #ref{name = vcard_DOM, default = false,
- min = 0, max = 1, label = '$dom'},
- #ref{name = vcard_INTL, default = false,
- min = 0, max = 1, label = '$intl'},
- #ref{name = vcard_PREF, default = false,
- min = 0, max = 1, label = '$pref'},
- #ref{name = vcard_POBOX, min = 0, max = 1, label = '$pobox'},
- #ref{name = vcard_EXTADD, min = 0, max = 1, label = '$extadd'},
- #ref{name = vcard_STREET, min = 0, max = 1, label = '$street'},
- #ref{name = vcard_LOCALITY, min = 0, max = 1, label = '$locality'},
- #ref{name = vcard_REGION, min = 0, max = 1, label = '$region'},
- #ref{name = vcard_PCODE, min = 0, max = 1, label = '$pcode'},
- #ref{name = vcard_CTRY, min = 0, max = 1, label = '$ctry'}]}}.
-
-{vcard_LABEL,
- #elem{name = <<"LABEL">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_label, '$home', '$work', '$postal', '$parcel',
- '$dom', '$intl', '$pref', '$line'},
- refs = [#ref{name = vcard_HOME, default = false,
- min = 0, max = 1, label = '$home'},
- #ref{name = vcard_WORK, default = false,
- min = 0, max = 1, label = '$work'},
- #ref{name = vcard_POSTAL, default = false,
- min = 0, max = 1, label = '$postal'},
- #ref{name = vcard_PARCEL, default = false,
- min = 0, max = 1, label = '$parcel'},
- #ref{name = vcard_DOM, default = false,
- min = 0, max = 1, label = '$dom'},
- #ref{name = vcard_INTL, default = false,
- min = 0, max = 1, label = '$intl'},
- #ref{name = vcard_PREF, default = false,
- min = 0, max = 1, label = '$pref'},
- #ref{name = vcard_LINE, label = '$line'}]}}.
-
-{vcard_TEL,
- #elem{name = <<"TEL">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_tel, '$home', '$work', '$voice', '$fax',
- '$pager', '$msg', '$cell', '$video', '$bbs',
- '$modem', '$isdn', '$pcs', '$pref', '$number'},
- refs = [#ref{name = vcard_HOME, default = false,
- min = 0, max = 1, label = '$home'},
- #ref{name = vcard_WORK, default = false,
- min = 0, max = 1, label = '$work'},
- #ref{name = vcard_VOICE, default = false,
- min = 0, max = 1, label = '$voice'},
- #ref{name = vcard_FAX, default = false,
- min = 0, max = 1, label = '$fax'},
- #ref{name = vcard_PAGER, default = false,
- min = 0, max = 1, label = '$pager'},
- #ref{name = vcard_MSG, default = false,
- min = 0, max = 1, label = '$msg'},
- #ref{name = vcard_CELL, default = false,
- min = 0, max = 1, label = '$cell'},
- #ref{name = vcard_VIDEO, default = false,
- min = 0, max = 1, label = '$video'},
- #ref{name = vcard_BBS, default = false,
- min = 0, max = 1, label = '$bbs'},
- #ref{name = vcard_MODEM, default = false,
- min = 0, max = 1, label = '$modem'},
- #ref{name = vcard_ISDN, default = false,
- min = 0, max = 1, label = '$isdn'},
- #ref{name = vcard_PCS, default = false,
- min = 0, max = 1, label = '$pcs'},
- #ref{name = vcard_PREF, default = false,
- min = 0, max = 1, label = '$pref'},
- #ref{name = vcard_NUMBER,
- min = 0, max = 1, label = '$number'}]}}.
-
-{vcard_EMAIL,
- #elem{name = <<"EMAIL">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_email, '$home', '$work',
- '$internet', '$pref', '$x400', '$userid'},
- refs = [#ref{name = vcard_HOME, default = false,
- min = 0, max = 1, label = '$home'},
- #ref{name = vcard_WORK, default = false,
- min = 0, max = 1, label = '$work'},
- #ref{name = vcard_INTERNET, default = false,
- min = 0, max = 1, label = '$internet'},
- #ref{name = vcard_PREF, default = false,
- min = 0, max = 1, label = '$pref'},
- #ref{name = vcard_X400, default = false,
- min = 0, max = 1, label = '$x400'},
- #ref{name = vcard_USERID,
- min = 0, max = 1, label = '$userid'}]}}.
-
-{vcard_GEO,
- #elem{name = <<"GEO">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_geo, '$lat', '$lon'},
- refs = [#ref{name = vcard_LAT, min = 0, max = 1, label = '$lat'},
- #ref{name = vcard_LON, min = 0, max = 1, label = '$lon'}]}}.
-
-{vcard_BINVAL,
- #elem{name = <<"BINVAL">>,
- xmlns = <<"vcard-temp">>,
- cdata = #cdata{dec = {base64, decode, []},
- enc = {base64, encode, []}},
- result = '$cdata'}}.
-
-{vcard_LOGO,
- #elem{name = <<"LOGO">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_logo, '$type', '$binval', '$extval'},
- refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
- #ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
- #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}}.
-
-{vcard_PHOTO,
- #elem{name = <<"PHOTO">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_photo, '$type', '$binval', '$extval'},
- refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
- #ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
- #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}}.
-
-{vcard_ORG,
- #elem{name = <<"ORG">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_org, '$name', '$units'},
- refs = [#ref{name = vcard_ORGNAME,
- label = '$name',
- min = 0, max = 1},
- #ref{name = vcard_ORGUNIT,
- label = '$units'}]}}.
-
-{vcard_SOUND,
- #elem{name = <<"SOUND">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_sound, '$phonetic', '$binval', '$extval'},
- refs = [#ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
- #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'},
- #ref{name = vcard_PHONETIC, min = 0, max = 1, label = '$phonetic'}]}}.
-
-{vcard_KEY,
- #elem{name = <<"KEY">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard_key, '$type', '$cred'},
- refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
- #ref{name = vcard_CRED, min = 0, max = 1, label = '$cred'}]}}.
-
-{vcard_CATEGORIES,
- #elem{name = <<"CATEGORIES">>,
- xmlns = <<"vcard-temp">>,
- result = '$keywords',
- refs = [#ref{name = vcard_KEYWORD, label = '$keywords'}]}}.
-
-{vcard_CLASS,
- #elem{name = <<"CLASS">>,
- xmlns = <<"vcard-temp">>,
- result = '$class',
- refs = [#ref{name = vcard_PUBLIC, min = 0, max = 1, label = '$class'},
- #ref{name = vcard_PRIVATE, min = 0, max = 1, label = '$class'},
- #ref{name = vcard_CONFIDENTIAL, min = 0, max = 1, label = '$class'}]}}.
+-xml(last,
+ #elem{name = <<"query">>,
+ xmlns = <<"jabber:iq:last">>,
+ result = {last, '$seconds', '$text'},
+ attrs = [#attr{name = <<"seconds">>,
+ default = undefined,
+ enc = {enc_int, []},
+ dec = {dec_int, [0, infinity]}}],
+ cdata = #cdata{label = '$text'}}).
+
+-xml(version_name,
+ #elem{name = <<"name">>,
+ xmlns = <<"jabber:iq:version">>,
+ result = '$cdata',
+ cdata = #cdata{label = '$cdata', required = true}}).
+
+-xml(version_ver,
+ #elem{name = <<"version">>,
+ xmlns = <<"jabber:iq:version">>,
+ result = '$cdata',
+ cdata = #cdata{label = '$cdata', required = true}}).
+
+-xml(version_os,
+ #elem{name = <<"os">>,
+ xmlns = <<"jabber:iq:version">>,
+ result = '$cdata',
+ cdata = #cdata{label = '$cdata', required = true}}).
+
+-xml(version,
+ #elem{name = <<"query">>,
+ xmlns = <<"jabber:iq:version">>,
+ result = {version, '$name', '$ver', '$os'},
+ refs = [#ref{name = version_name,
+ label = '$name',
+ min = 0, max = 1},
+ #ref{name = version_ver,
+ label = '$ver',
+ min = 0, max = 1},
+ #ref{name = version_os,
+ label = '$os',
+ min = 0, max = 1}]}).
+
+-xml(roster_group,
+ #elem{name = <<"group">>,
+ xmlns = <<"jabber:iq:roster">>,
+ result = '$cdata',
+ cdata = #cdata{required = true, label = '$cdata'}}).
+
+-xml(roster_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"jabber:iq:roster">>,
+ result = {roster_item, '$jid', '$name',
+ '$groups', '$subscription', '$ask'},
+ attrs = [#attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"name">>},
+ #attr{name = <<"subscription">>,
+ default = none,
+ enc = {enc_enum, []},
+ dec = {dec_enum, [[none,to,from,both,remove]]}},
+ #attr{name = <<"ask">>,
+ default = undefined,
+ enc = {enc_enum, []},
+ dec = {dec_enum, [[subscribe]]}}],
+ refs = [#ref{name = roster_group, label = '$groups'}]}).
+
+-xml(roster,
+ #elem{name = <<"query">>,
+ xmlns = <<"jabber:iq:roster">>,
+ result = {roster, '$items', '$ver'},
+ attrs = [#attr{name = <<"ver">>}],
+ refs = [#ref{name = roster_item, label = '$items'}]}).
+
+-xml(privacy_message, #elem{name = <<"message">>, xmlns = <<"jabber:iq:privacy">>,
+ result = message}).
+-xml(privacy_iq, #elem{name = <<"iq">>, xmlns = <<"jabber:iq:privacy">>,
+ result = iq}).
+-xml(privacy_presence_in, #elem{name = <<"presence-in">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = 'presence-in'}).
+-xml(privacy_presence_out, #elem{name = <<"presence-out">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = 'presence-out'}).
+
+-xml(privacy_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = {privacy_item, '$order', '$action', '$type',
+ '$value', '$kinds'},
+ attrs = [#attr{name = <<"action">>,
+ required = true,
+ dec = {dec_enum, [[allow, deny]]},
+ enc = {enc_enum, []}},
+ #attr{name = <<"order">>,
+ required = true,
+ dec = {dec_int, [0, infinity]},
+ enc = {enc_int, []}},
+ #attr{name = <<"type">>,
+ dec = {dec_enum, [[group, jid, subscription]]},
+ enc = {enc_enum, []}},
+ #attr{name = <<"value">>}],
+ refs = [#ref{name = privacy_message,
+ label = '$kinds'},
+ #ref{name = privacy_iq,
+ label = '$kinds'},
+ #ref{name = privacy_presence_in,
+ label = '$kinds'},
+ #ref{name = privacy_presence_out,
+ label = '$kinds'}]}).
+
+-xml(privacy_list,
+ #elem{name = <<"list">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = {privacy_list, '$name', '$items'},
+ attrs = [#attr{name = <<"name">>,
+ required = true}],
+ refs = [#ref{name = privacy_item,
+ label = '$items'}]}).
+
+-xml(privacy_default_list,
+ #elem{name = <<"default">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = '$name',
+ attrs = [#attr{name = <<"name">>,
+ default = none}]}).
+
+-xml(privacy_active_list,
+ #elem{name = <<"active">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = '$name',
+ attrs = [#attr{name = <<"name">>,
+ default = none}]}).
+
+-xml(privacy,
+ #elem{name = <<"query">>,
+ xmlns = <<"jabber:iq:privacy">>,
+ result = {privacy, '$lists', '$default', '$active'},
+ refs = [#ref{name = privacy_list,
+ label = '$lists'},
+ #ref{name = privacy_default_list,
+ min = 0, max = 1,
+ label = '$default'},
+ #ref{name = privacy_active_list,
+ min = 0, max = 1,
+ label = '$active'}]}).
+
+-xml(block_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"urn:xmpp:blocking">>,
+ result = '$jid',
+ attrs = [#attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}]}).
+
+-xml(block,
+ #elem{name = <<"block">>,
+ xmlns = <<"urn:xmpp:blocking">>,
+ result = {block, '$items'},
+ refs = [#ref{name = block_item,
+ label = '$items'}]}).
+
+-xml(unblock,
+ #elem{name = <<"unblock">>,
+ xmlns = <<"urn:xmpp:blocking">>,
+ result = {unblock, '$items'},
+ refs = [#ref{name = block_item,
+ label = '$items'}]}).
+
+-xml(block_list,
+ #elem{name = <<"blocklist">>,
+ xmlns = <<"urn:xmpp:blocking">>,
+ result = {block_list}}).
+
+-xml(disco_identity,
+ #elem{name = <<"identity">>,
+ xmlns = <<"http://jabber.org/protocol/disco#info">>,
+ result = {identity, '$category', '$type', '$lang', '$name'},
+ attrs = [#attr{name = <<"category">>,
+ required = true},
+ #attr{name = <<"type">>,
+ required = true},
+ #attr{name = <<"xml:lang">>,
+ label = '$lang'},
+ #attr{name = <<"name">>}]}).
+
+-xml(disco_feature,
+ #elem{name = <<"feature">>,
+ xmlns = <<"http://jabber.org/protocol/disco#info">>,
+ result = '$var',
+ attrs = [#attr{name = <<"var">>,
+ required = true}]}).
+
+-xml(disco_info,
+ #elem{name = <<"query">>,
+ xmlns = <<"http://jabber.org/protocol/disco#info">>,
+ result = {disco_info, '$node', '$identities', '$features', '$xdata'},
+ attrs = [#attr{name = <<"node">>}],
+ refs = [#ref{name = disco_identity,
+ label = '$identities'},
+ #ref{name = disco_feature,
+ label = '$features'},
+ #ref{name = xdata,
+ label = '$xdata'}]}).
+
+-xml(disco_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"http://jabber.org/protocol/disco#items">>,
+ result = {disco_item, '$jid', '$name', '$node'},
+ attrs = [#attr{name = <<"jid">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []},
+ required = true},
+ #attr{name = <<"name">>},
+ #attr{name = <<"node">>}]}).
+-xml(disco_items,
+ #elem{name = <<"query">>,
+ xmlns = <<"http://jabber.org/protocol/disco#items">>,
+ result = {disco_items, '$node', '$items'},
+ attrs = [#attr{name = <<"node">>}],
+ refs = [#ref{name = disco_item,
+ label = '$items'}]}).
+
+-xml(private,
+ #elem{name = <<"query">>,
+ xmlns = <<"jabber:iq:private">>,
+ result = {private, '$_els'}}).
+
+-xml(conference_nick,
+ #elem{name = <<"nick">>,
+ xmlns = <<"storage:bookmarks">>,
+ result = '$cdata'}).
+
+-xml(conference_password,
+ #elem{name = <<"password">>,
+ xmlns = <<"storage:bookmarks">>,
+ result = '$cdata'}).
+
+-xml(bookmark_conference,
+ #elem{name = <<"conference">>,
+ xmlns = <<"storage:bookmarks">>,
+ result = {bookmark_conference, '$name', '$jid',
+ '$autojoin', '$nick', '$password'},
+ attrs = [#attr{name = <<"name">>,
+ required = true},
+ #attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"autojoin">>,
+ default = false,
+ dec = {dec_bool, []},
+ enc = {enc_bool, []}}],
+ refs = [#ref{name = conference_nick,
+ label = '$nick',
+ min = 0, max = 1},
+ #ref{name = conference_password,
+ label = '$password',
+ min = 0, max = 1}]}).
+
+-xml(bookmark_url,
+ #elem{name = <<"url">>,
+ xmlns = <<"storage:bookmarks">>,
+ result = {bookmark_url, '$name', '$url'},
+ attrs = [#attr{name = <<"name">>,
+ required = true},
+ #attr{name = <<"url">>,
+ required = true}]}).
+
+-xml(bookmarks_storage,
+ #elem{name = <<"storage">>,
+ xmlns = <<"storage:bookmarks">>,
+ result = {bookmark_storage, '$conference', '$url'},
+ refs = [#ref{name = bookmark_conference,
+ label = '$conference'},
+ #ref{name = bookmark_url,
+ label = '$url'}]}).
+
+-xml(stat_error,
+ #elem{name = <<"error">>,
+ xmlns = <<"http://jabber.org/protocol/stats">>,
+ result = {'$code', '$cdata'},
+ attrs = [#attr{name = <<"code">>,
+ required = true,
+ enc = {enc_int, []},
+ dec = {dec_int, []}}]}).
+
+-xml(stat,
+ #elem{name = <<"stat">>,
+ xmlns = <<"http://jabber.org/protocol/stats">>,
+ result = {stat, '$name', '$units', '$value', '$error'},
+ attrs = [#attr{name = <<"name">>,
+ required = true},
+ #attr{name = <<"units">>},
+ #attr{name = <<"value">>}],
+ refs = [#ref{name = stat_error,
+ label = '$error'}]}).
+
+-xml(stats,
+ #elem{name = <<"query">>,
+ xmlns = <<"http://jabber.org/protocol/stats">>,
+ result = {stats, '$stat'},
+ refs = [#ref{name = stat,
+ label = '$stat'}]}).
+
+-xml(iq,
+ #elem{name = <<"iq">>,
+ xmlns = <<"jabber:client">>,
+ result = {iq, '$id', '$type', '$lang', '$from', '$to',
+ '$error', '$_els'},
+ attrs = [#attr{name = <<"id">>,
+ required = true},
+ #attr{name = <<"type">>,
+ required = true,
+ enc = {enc_enum, []},
+ dec = {dec_enum, [[get, set, result, error]]}},
+ #attr{name = <<"from">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"to">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"xml:lang">>,
+ label = '$lang'}],
+ refs = [#ref{name = error, min = 0, max = 1, label = '$error'}]}).
+
+-xml(message_subject,
+ #elem{name = <<"subject">>,
+ xmlns = <<"jabber:client">>,
+ result = {text, '$lang', '$data'},
+ cdata = #cdata{label = '$data'},
+ attrs = [#attr{name = <<"xml:lang">>, label = '$lang'}]}).
+
+-xml(message_body,
+ #elem{name = <<"body">>,
+ xmlns = <<"jabber:client">>,
+ result = {text, '$lang', '$data'},
+ cdata = #cdata{label = '$data'},
+ attrs = [#attr{name = <<"xml:lang">>, label = '$lang'}]}).
+
+-xml(message_thread,
+ #elem{name = <<"thread">>,
+ xmlns = <<"jabber:client">>,
+ result = '$cdata'}).
+
+-xml(message,
+ #elem{name = <<"message">>,
+ xmlns = <<"jabber:client">>,
+ result = {message, '$id', '$type', '$lang', '$from', '$to',
+ '$subject', '$body', '$thread', '$error', '$_els'},
+ attrs = [#attr{name = <<"id">>},
+ #attr{name = <<"type">>,
+ default = normal,
+ enc = {enc_enum, []},
+ dec = {dec_enum, [[chat, normal, groupchat,
+ headline, error]]}},
+ #attr{name = <<"from">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"to">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"xml:lang">>,
+ label = '$lang'}],
+ refs = [#ref{name = error, min = 0, max = 1, label = '$error'},
+ #ref{name = message_subject, label = '$subject'},
+ #ref{name = message_thread, min = 0, max = 1, label = '$thread'},
+ #ref{name = message_body, label = '$body'}]}).
+
+-xml(presence_show,
+ #elem{name = <<"show">>,
+ xmlns = <<"jabber:client">>,
+ result = '$cdata',
+ cdata = #cdata{enc = {enc_enum, []},
+ dec = {dec_enum, [[away, chat, dnd, xa]]}}}).
+
+-xml(presence_status,
+ #elem{name = <<"status">>,
+ xmlns = <<"jabber:client">>,
+ result = {text, '$lang', '$data'},
+ cdata = #cdata{label = '$data'},
+ attrs = [#attr{name = <<"xml:lang">>,
+ label = '$lang'}]}).
+
+-xml(presence_priority,
+ #elem{name = <<"priority">>,
+ xmlns = <<"jabber:client">>,
+ result = '$cdata',
+ cdata = #cdata{enc = {enc_int, []},
+ dec = {dec_int, []}}}).
+
+-xml(presence,
+ #elem{name = <<"presence">>,
+ xmlns = <<"jabber:client">>,
+ result = {presence, '$id', '$type', '$lang', '$from', '$to',
+ '$show', '$status', '$priority', '$error', '$_els'},
+ attrs = [#attr{name = <<"id">>},
+ #attr{name = <<"type">>,
+ enc = {enc_enum, []},
+ dec = {dec_enum, [[unavailable, subscribe, subscribed,
+ unsubscribe, unsubscribed,
+ probe, error]]}},
+ #attr{name = <<"from">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"to">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"xml:lang">>,
+ label = '$lang'}],
+ refs = [#ref{name = error, min = 0, max = 1, label = '$error'},
+ #ref{name = presence_show, min = 0, max = 1, label = '$show'},
+ #ref{name = presence_status, label = '$status'},
+ #ref{name = presence_priority, min = 0, max = 1,
+ label = '$priority'}]}).
+
+-xml(error_bad_request,
+ #elem{name = <<"bad-request">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'bad-request'}).
+-xml(error_conflict,
+ #elem{name = <<"conflict">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'conflict'}).
+-xml(error_feature_not_implemented,
+ #elem{name = <<"feature-not-implemented">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'feature-not-implemented'}).
+-xml(error_forbidden,
+ #elem{name = <<"forbidden">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'forbidden'}).
+-xml(error_gone,
+ #elem{name = <<"gone">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ cdata = #cdata{label = '$uri'},
+ result = {'gone', '$uri'}}).
+-xml(error_internal_server_error,
+ #elem{name = <<"internal-server-error">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'internal-server-error'}).
+-xml(error_item_not_found,
+ #elem{name = <<"item-not-found">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'item-not-found'}).
+-xml(error_jid_malformed,
+ #elem{name = <<"jid-malformed">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'jid-malformed'}).
+-xml(error_not_acceptable,
+ #elem{name = <<"not-acceptable">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'not-acceptable'}).
+-xml(error_not_allowed,
+ #elem{name = <<"not-allowed">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'not-allowed'}).
+-xml(error_not_authorized,
+ #elem{name = <<"not-authorized">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'not-authorized'}).
+-xml(error_policy_violation,
+ #elem{name = <<"policy-violation">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'policy-violation'}).
+-xml(error_recipient_unavailable,
+ #elem{name = <<"recipient-unavailable">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'recipient-unavailable'}).
+-xml(error_redirect,
+ #elem{name = <<"redirect">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ cdata = #cdata{label = '$uri'},
+ result = {'redirect', '$uri'}}).
+-xml(error_registration_required,
+ #elem{name = <<"registration-required">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'registration-required'}).
+-xml(error_remote_server_not_found,
+ #elem{name = <<"remote-server-not-found">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'remote-server-not-found'}).
+-xml(error_remote_server_timeout,
+ #elem{name = <<"remote-server-timeout">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'remote-server-timeout'}).
+-xml(error_resource_constraint,
+ #elem{name = <<"resource-constraint">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'resource-constraint'}).
+-xml(error_service_unavailable,
+ #elem{name = <<"service-unavailable">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'service-unavailable'}).
+-xml(error_subscription_required,
+ #elem{name = <<"subscription-required">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'subscription-required'}).
+-xml(error_undefined_condition,
+ #elem{name = <<"undefined-condition">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'undefined-condition'}).
+-xml(error_unexpected_request,
+ #elem{name = <<"unexpected-request">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ result = 'unexpected-request'}).
+
+-xml(error_text,
+ #elem{name = <<"text">>,
+ result = {text, '$lang', '$data'},
+ cdata = #cdata{label = '$data'},
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-stanzas">>,
+ attrs = [#attr{name = <<"xml:lang">>,
+ label = '$lang'}]}).
+
+-xml(error,
+ #elem{name = <<"error">>,
+ xmlns = <<"jabber:client">>,
+ result = {error, '$type', '$by', '$reason', '$text'},
+ attrs = [#attr{name = <<"type">>,
+ label = '$type',
+ required = true,
+ dec = {dec_enum, [[auth, cancel, continue,
+ modify, wait]]},
+ enc = {enc_enum, []}},
+ #attr{name = <<"by">>}],
+ refs = [#ref{name = error_text,
+ min = 0, max = 1, label = '$text'},
+ #ref{name = error_bad_request,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_conflict,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_feature_not_implemented,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_forbidden,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_gone,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_internal_server_error,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_item_not_found,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_jid_malformed,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_not_acceptable,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_not_allowed,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_not_authorized,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_policy_violation,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_recipient_unavailable,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_redirect,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_registration_required,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_remote_server_not_found,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_remote_server_timeout,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_resource_constraint,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_service_unavailable,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_subscription_required,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_undefined_condition,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = error_unexpected_request,
+ min = 0, max = 1, label = '$reason'}]}).
+
+-xml(bind_jid,
+ #elem{name = <<"jid">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
+ result = '$cdata',
+ cdata = #cdata{dec = {dec_jid, []},
+ enc = {enc_jid, []}}}).
+
+-xml(bind_resource,
+ #elem{name = <<"resource">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
+ result = '$cdata',
+ cdata = #cdata{dec = {resourceprep, []},
+ enc = {resourceprep, []}}}).
+
+-xml(bind, #elem{name = <<"bind">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-bind">>,
+ result = {bind, '$jid', '$resource'},
+ refs = [#ref{name = bind_jid,
+ label = '$jid',
+ min = 0, max = 1},
+ #ref{name = bind_resource,
+ min = 0, max = 1,
+ label = '$resource'}]}).
+
+-xml(sasl_auth,
+ #elem{name = <<"auth">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ cdata = #cdata{label = '$text',
+ dec = {base64, decode, []},
+ enc = {base64, encode, []}},
+ result = {sasl_auth, '$mechanism', '$text'},
+ attrs = [#attr{name = <<"mechanism">>,
+ required = true}]}).
+
+-xml(sasl_abort,
+ #elem{name = <<"abort">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ result = {sasl_abort}}).
+
+-xml(sasl_challenge,
+ #elem{name = <<"challenge">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ cdata = #cdata{label = '$text',
+ dec = {base64, decode, []},
+ enc = {base64, encode, []}},
+ result = {sasl_challenge, '$text'}}).
+
+-xml(sasl_response,
+ #elem{name = <<"response">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ cdata = #cdata{label = '$text',
+ dec = {base64, decode, []},
+ enc = {base64, encode, []}},
+ result = {sasl_response, '$text'}}).
+
+-xml(sasl_success,
+ #elem{name = <<"success">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ cdata = #cdata{label = '$text',
+ dec = {base64, decode, []},
+ enc = {base64, encode, []}},
+ result = {sasl_success, '$text'}}).
+
+-xml(sasl_failure_text,
+ #elem{name = <<"text">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ result = {text, '$lang', '$data'},
+ cdata = #cdata{label = '$data'},
+ attrs = [#attr{name = <<"xml:lang">>,
+ label = '$lang'}]}).
+
+-xml(sasl_failure_aborted,
+ #elem{name = <<"aborted">>,
+ result = 'aborted',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_account_disabled,
+ #elem{name = <<"account-disabled">>,
+ result = 'account-disabled',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_credentials_expired,
+ #elem{name = <<"credentials-expired">>,
+ result = 'credentials-expired',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_encryption_required,
+ #elem{name = <<"encryption-required">>,
+ result = 'encryption-required',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_incorrect_encoding,
+ #elem{name = <<"incorrect-encoding">>,
+ result = 'incorrect-encoding',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_invalid_authzid,
+ #elem{name = <<"invalid-authzid">>,
+ result = 'invalid-authzid',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_invalid_mechanism,
+ #elem{name = <<"invalid-mechanism">>,
+ result = 'invalid-mechanism',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_malformed_request,
+ #elem{name = <<"malformed-request">>,
+ result = 'malformed-request',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_mechanism_too_weak,
+ #elem{name = <<"mechanism-too-weak">>,
+ result = 'mechanism-too-weak',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_not_authorized,
+ #elem{name = <<"not-authorized">>,
+ result = 'not-authorized',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+-xml(sasl_failure_temporary_auth_failure,
+ #elem{name = <<"temporary-auth-failure">>,
+ result = 'temporary-auth-failure',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>}).
+
+-xml(sasl_failure,
+ #elem{name = <<"failure">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ result = {sasl_failure, '$reason', '$text'},
+ refs = [#ref{name = sasl_failure_text,
+ label = '$text'},
+ #ref{name = sasl_failure_aborted,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_account_disabled,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_credentials_expired,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_encryption_required,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_incorrect_encoding,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_invalid_authzid,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_invalid_mechanism,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_malformed_request,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_mechanism_too_weak,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_not_authorized,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = sasl_failure_temporary_auth_failure,
+ min = 0, max = 1, label = '$reason'}]}).
+
+-xml(sasl_mechanism,
+ #elem{name = <<"mechanism">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ result = '$cdata'}).
+
+-xml(sasl_mechanisms,
+ #elem{name = <<"mechanisms">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-sasl">>,
+ result = {sasl_mechanisms, '$list'},
+ refs = [#ref{name = sasl_mechanism,
+ label = '$list'}]}).
+
+-xml(starttls_required,
+ #elem{name = <<"required">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
+ result = true}).
+
+-xml(starttls,
+ #elem{name = <<"starttls">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
+ result = {starttls, '$required'},
+ refs = [#ref{name = starttls_required,
+ label = '$required',
+ min = 0, max = 1,
+ default = false}]}).
+
+-xml(starttls_proceed,
+ #elem{name = <<"proceed">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
+ result = {starttls_proceed}}).
+
+-xml(starttls_failure,
+ #elem{name = <<"failure">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-tls">>,
+ result = {starttls_failure}}).
+
+-xml(compress_failure_setup_failed,
+ #elem{name = <<"setup-failed">>,
+ xmlns = <<"http://jabber.org/protocol/compress">>,
+ result = 'setup-failed'}).
+-xml(compress_failure_processing_failed,
+ #elem{name = <<"processing-failed">>,
+ xmlns = <<"http://jabber.org/protocol/compress">>,
+ result = 'processing-failed'}).
+-xml(compress_failure_unsupported_method,
+ #elem{name = <<"unsupported-method">>,
+ xmlns = <<"http://jabber.org/protocol/compress">>,
+ result = 'unsupported-method'}).
+
+-xml(compress_failure,
+ #elem{name = <<"failure">>,
+ xmlns = <<"http://jabber.org/protocol/compress">>,
+ result = {compress_failure, '$reason'},
+ refs = [#ref{name = compress_failure_setup_failed,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = compress_failure_processing_failed,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = compress_failure_unsupported_method,
+ min = 0, max = 1, label = '$reason'}]}).
+
+-xml(compress_method,
+ #elem{name = <<"method">>,
+ xmlns = <<"http://jabber.org/protocol/compress">>,
+ result = '$cdata'}).
+
+-xml(compress,
+ #elem{name = <<"compress">>,
+ xmlns = <<"http://jabber.org/protocol/compress">>,
+ result = {compress, '$methods'},
+ refs = [#ref{name = compress_method,
+ label = '$methods'}]}).
+
+-xml(compressed,
+ #elem{name = <<"compressed">>,
+ xmlns = <<"http://jabber.org/protocol/compress">>,
+ result = {compressed}}).
+
+-xml(compression_method,
+ #elem{name = <<"method">>,
+ xmlns = <<"http://jabber.org/features/compress">>,
+ result = '$cdata'}).
+
+-xml(compression,
+ #elem{name = <<"compression">>,
+ xmlns = <<"http://jabber.org/features/compress">>,
+ result = {compression, '$methods'},
+ refs = [#ref{name = compression_method, label = '$methods'}]}).
+
+-xml(stream_features,
+ #elem{name = <<"stream:features">>,
+ xmlns = <<"http://etherx.jabber.org/streams">>,
+ result = {stream_features, '$_els'}}).
+
+-xml(p1_push,
+ #elem{name = <<"push">>,
+ result = {p1_push},
+ xmlns = <<"p1:push">>}).
+
+-xml(p1_rebind,
+ #elem{name = <<"rebind">>,
+ result = {p1_rebind},
+ xmlns = <<"p1:rebind">>}).
+
+-xml(p1_ack,
+ #elem{name = <<"ack">>,
+ result = {p1_ack},
+ xmlns = <<"p1:ack">>}).
+
+-xml(caps,
+ #elem{name = <<"c">>,
+ xmlns = <<"http://jabber.org/protocol/caps">>,
+ result = {caps, '$hash', '$node', '$ver'},
+ attrs = [#attr{name = <<"hash">>},
+ #attr{name = <<"node">>},
+ #attr{name = <<"ver">>,
+ enc = {base64, encode, []},
+ dec = {base64, decode, []}}]}).
+
+-xml(feature_register,
+ #elem{name = <<"register">>,
+ xmlns = <<"http://jabber.org/features/iq-register">>,
+ result = {feature_register}}).
+
+-xml(register_registered,
+ #elem{name = <<"registered">>,
+ xmlns = <<"jabber:iq:register">>,
+ result = true}).
+-xml(register_remove,
+ #elem{name = <<"remove">>,
+ xmlns = <<"jabber:iq:register">>,
+ result = true}).
+-xml(register_instructions,
+ #elem{name = <<"instructions">>,
+ xmlns = <<"jabber:iq:register">>,
+ result = '$cdata'}).
+-xml(register_username,
+ #elem{name = <<"username">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_nick,
+ #elem{name = <<"nick">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_password,
+ #elem{name = <<"password">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_name,
+ #elem{name = <<"name">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_first,
+ #elem{name = <<"first">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_last,
+ #elem{name = <<"last">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_email,
+ #elem{name = <<"email">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_address,
+ #elem{name = <<"address">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_city,
+ #elem{name = <<"city">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_state,
+ #elem{name = <<"state">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_zip,
+ #elem{name = <<"zip">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_phone,
+ #elem{name = <<"phone">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_url,
+ #elem{name = <<"url">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_date,
+ #elem{name = <<"date">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_misc,
+ #elem{name = <<"misc">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_text,
+ #elem{name = <<"text">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+-xml(register_key,
+ #elem{name = <<"key">>,
+ xmlns = <<"jabber:iq:register">>,
+ cdata = #cdata{default = none},
+ result = '$cdata'}).
+
+-xml(register,
+ #elem{name = <<"query">>,
+ xmlns = <<"jabber:iq:register">>,
+ result = {register, '$registered', '$remove', '$instructions',
+ '$username', '$nick', '$password', '$name',
+ '$first', '$last', '$email', '$address',
+ '$city', '$state', '$zip', '$phone', '$url',
+ '$date', '$misc', '$text', '$key'},
+ refs = [#ref{name = register_registered, min = 0, max = 1,
+ default = false, label = '$registered'},
+ #ref{name = register_remove, min = 0, max = 1,
+ default = false, label = '$remove'},
+ #ref{name = register_instructions, min = 0, max = 1,
+ label = '$instructions'},
+ #ref{name = register_username, min = 0, max = 1,
+ label = '$username'},
+ #ref{name = register_nick, min = 0, max = 1,
+ label = '$nick'},
+ #ref{name = register_password, min = 0, max = 1,
+ label = '$password'},
+ #ref{name = register_name, min = 0, max = 1,
+ label = '$name'},
+ #ref{name = register_first, min = 0, max = 1,
+ label = '$first'},
+ #ref{name = register_last, min = 0, max = 1,
+ label = '$last'},
+ #ref{name = register_email, min = 0, max = 1,
+ label = '$email'},
+ #ref{name = register_address, min = 0, max = 1,
+ label = '$address'},
+ #ref{name = register_city, min = 0, max = 1,
+ label = '$city'},
+ #ref{name = register_state, min = 0, max = 1,
+ label = '$state'},
+ #ref{name = register_zip, min = 0, max = 1,
+ label = '$zip'},
+ #ref{name = register_phone, min = 0, max = 1,
+ label = '$phone'},
+ #ref{name = register_url, min = 0, max = 1,
+ label = '$url'},
+ #ref{name = register_date, min = 0, max = 1,
+ label = '$date'},
+ #ref{name = register_misc, min = 0, max = 1,
+ label = '$misc'},
+ #ref{name = register_text, min = 0, max = 1,
+ label = '$text'},
+ #ref{name = register_key, min = 0, max = 1,
+ label = '$key'}]}).
+
+-xml(session,
+ #elem{name = <<"session">>,
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-session">>,
+ result = {session}}).
+
+-xml(ping,
+ #elem{name = <<"ping">>,
+ xmlns = <<"urn:xmpp:ping">>,
+ result = {ping}}).
+
+-xml(time_utc,
+ #elem{name = <<"utc">>,
+ xmlns = <<"urn:xmpp:time">>,
+ result = '$cdata',
+ cdata = #cdata{dec = {dec_utc, []},
+ enc = {enc_utc, []}}}).
+
+-xml(time_tzo,
+ #elem{name = <<"tzo">>,
+ xmlns = <<"urn:xmpp:time">>,
+ result = '$cdata',
+ cdata = #cdata{dec = {dec_tzo, []},
+ enc = {enc_tzo, []}}}).
+
+-xml(time,
+ #elem{name = <<"time">>,
+ xmlns = <<"urn:xmpp:time">>,
+ result = {time, '$tzo', '$utc'},
+ refs = [#ref{name = time_tzo,
+ label = '$tzo',
+ min = 0, max = 1},
+ #ref{name = time_utc,
+ label = '$utc',
+ min = 0, max = 1}]}).
+
+-xml(stream_error_text,
+ #elem{name = <<"text">>,
+ result = {text, '$lang', '$data'},
+ cdata = #cdata{label = '$data'},
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>,
+ attrs = [#attr{name = <<"xml:lang">>,
+ label = '$lang'}]}).
+
+-xml(stream_error_bad_format,
+ #elem{name = <<"bad-format">>,
+ result = 'bad-format',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_bad_namespace_prefix,
+ #elem{name = <<"bad-namespace-prefix">>,
+ result = 'bad-namespace-prefix',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_conflict,
+ #elem{name = <<"conflict">>,
+ result = 'conflict',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_connection_timeout,
+ #elem{name = <<"connection-timeout">>,
+ result = 'connection-timeout',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_host_gone,
+ #elem{name = <<"host-gone">>,
+ result = 'host-gone',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_host_unknown,
+ #elem{name = <<"host-unknown">>,
+ result = 'host-unknown',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_improper_addressing,
+ #elem{name = <<"improper-addressing">>,
+ result = 'improper-addressing',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_internal_server_error,
+ #elem{name = <<"internal-server-error">>,
+ result = 'internal-server-error',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_invalid_from,
+ #elem{name = <<"invalid-from">>,
+ result = 'invalid-from',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_invalid_id,
+ #elem{name = <<"invalid-id">>,
+ result = 'invalid-id',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_invalid_namespace,
+ #elem{name = <<"invalid-namespace">>,
+ result = 'invalid-namespace',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_invalid_xml,
+ #elem{name = <<"invalid-xml">>,
+ result = 'invalid-xml',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_not_authorized,
+ #elem{name = <<"not-authorized">>,
+ result = 'not-authorized',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_not_well_formed,
+ #elem{name = <<"not-well-formed">>,
+ result = 'not-well-formed',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_policy_violation,
+ #elem{name = <<"policy-violation">>,
+ result = 'policy-violation',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_remote_connection_failed,
+ #elem{name = <<"remote-connection-failed">>,
+ result = 'remote-connection-failed',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_reset,
+ #elem{name = <<"reset">>,
+ result = 'reset',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_resource_constraint,
+ #elem{name = <<"resource-constraint">>,
+ result = 'resource-constraint',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_restricted_xml,
+ #elem{name = <<"restricted-xml">>,
+ result = 'restricted-xml',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_see_other_host,
+ #elem{name = <<"see-other-host">>,
+ cdata = #cdata{required = true, label = '$host'},
+ result = {'see-other-host', '$host'},
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_system_shutdown,
+ #elem{name = <<"system-shutdown">>,
+ result = 'system-shutdown',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_undefined_condition,
+ #elem{name = <<"undefined-condition">>,
+ result = 'undefined-condition',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_unsupported_encoding,
+ #elem{name = <<"unsupported-encoding">>,
+ result = 'unsupported-encoding',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_unsupported_stanza_type,
+ #elem{name = <<"unsupported-stanza-type">>,
+ result = 'unsupported-stanza-type',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+-xml(stream_error_unsupported_version,
+ #elem{name = <<"unsupported-version">>,
+ result = 'unsupported-version',
+ xmlns = <<"urn:ietf:params:xml:ns:xmpp-streams">>}).
+
+-xml(stream_error,
+ #elem{name = <<"stream:error">>,
+ xmlns = <<"http://etherx.jabber.org/streams">>,
+ result = {stream_error, '$reason', '$text'},
+ refs = [#ref{name = stream_error_text,
+ label = '$text',
+ min = 0, max = 1},
+ #ref{name = stream_error_bad_format,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_bad_namespace_prefix,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_conflict,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_connection_timeout,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_host_gone,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_host_unknown,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_improper_addressing,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_internal_server_error,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_invalid_from,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_invalid_id,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_invalid_namespace,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_invalid_xml,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_not_authorized,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_not_well_formed,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_policy_violation,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_remote_connection_failed,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_reset,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_resource_constraint,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_restricted_xml,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_see_other_host,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_system_shutdown,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_undefined_condition,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_unsupported_encoding,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_unsupported_stanza_type,
+ min = 0, max = 1, label = '$reason'},
+ #ref{name = stream_error_unsupported_version,
+ min = 0, max = 1, label = '$reason'}
+ ]}).
+
+-xml(vcard_HOME, #elem{name = <<"HOME">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_WORK, #elem{name = <<"WORK">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_VOICE, #elem{name = <<"VOICE">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_FAX, #elem{name = <<"FAX">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_PAGER, #elem{name = <<"PAGER">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_MSG, #elem{name = <<"MSG">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_CELL, #elem{name = <<"CELL">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_VIDEO, #elem{name = <<"VIDEO">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_BBS, #elem{name = <<"BBS">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_MODEM, #elem{name = <<"MODEM">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_ISDN, #elem{name = <<"ISDN">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_PCS, #elem{name = <<"PCS">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_POSTAL, #elem{name = <<"POSTAL">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_PARCEL, #elem{name = <<"PARCEL">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_DOM, #elem{name = <<"DOM">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_INTL, #elem{name = <<"INTL">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_PREF, #elem{name = <<"PREF">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_INTERNET, #elem{name = <<"INTERNET">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_X400, #elem{name = <<"X400">>, xmlns = <<"vcard-temp">>, result = true}).
+-xml(vcard_FAMILY, #elem{name = <<"FAMILY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_GIVEN, #elem{name = <<"GIVEN">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_MIDDLE, #elem{name = <<"MIDDLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_PREFIX, #elem{name = <<"PREFIX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_SUFFIX, #elem{name = <<"SUFFIX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_POBOX, #elem{name = <<"POBOX">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_EXTADD, #elem{name = <<"EXTADD">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_STREET, #elem{name = <<"STREET">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_LOCALITY, #elem{name = <<"LOCALITY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_REGION, #elem{name = <<"REGION">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_PCODE, #elem{name = <<"PCODE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_CTRY, #elem{name = <<"CTRY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_LINE, #elem{name = <<"LINE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_NUMBER, #elem{name = <<"NUMBER">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_USERID, #elem{name = <<"USERID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_LAT, #elem{name = <<"LAT">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_LON, #elem{name = <<"LON">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_ORGNAME, #elem{name = <<"ORGNAME">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_ORGUNIT, #elem{name = <<"ORGUNIT">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_PHONETIC, #elem{name = <<"PHONETIC">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_CRED, #elem{name = <<"CRED">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_VERSION, #elem{name = <<"VERSION">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_FN, #elem{name = <<"FN">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_NICKNAME, #elem{name = <<"NICKNAME">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_BDAY, #elem{name = <<"BDAY">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_JABBERID, #elem{name = <<"JABBERID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_MAILER, #elem{name = <<"MAILER">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_TZ, #elem{name = <<"TZ">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_TITLE, #elem{name = <<"TITLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_ROLE, #elem{name = <<"ROLE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_KEYWORD, #elem{name = <<"KEYWORD">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_NOTE, #elem{name = <<"NOTE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_PRODID, #elem{name = <<"PRODID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_REV, #elem{name = <<"REV">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_SORT_STRING, #elem{name = <<"SORT-STRING">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_UID, #elem{name = <<"UID">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_URL, #elem{name = <<"URL">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_DESC, #elem{name = <<"DESC">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_TYPE, #elem{name = <<"TYPE">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_EXTVAL, #elem{name = <<"EXTVAL">>, xmlns = <<"vcard-temp">>, result = '$cdata'}).
+-xml(vcard_PUBLIC, #elem{name = <<"PUBLIC">>, xmlns = <<"vcard-temp">>, result = public}).
+-xml(vcard_PRIVATE, #elem{name = <<"PRIVATE">>, xmlns = <<"vcard-temp">>, result = private}).
+-xml(vcard_CONFIDENTIAL, #elem{name = <<"CONFIDENTIAL">>, xmlns = <<"vcard-temp">>, result = confidential}).
+
+-xml(vcard_N,
+ #elem{name = <<"N">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_name, '$family', '$given', '$middle',
+ '$prefix', '$suffix'},
+ refs = [#ref{name = vcard_FAMILY, min = 0, max = 1, label = '$family'},
+ #ref{name = vcard_GIVEN, min = 0, max = 1, label = '$given'},
+ #ref{name = vcard_MIDDLE, min = 0, max = 1, label = '$middle'},
+ #ref{name = vcard_PREFIX, min = 0, max = 1, label = '$prefix'},
+ #ref{name = vcard_SUFFIX, min = 0, max = 1, label = '$suffix'}]}).
+
+-xml(vcard_ADR,
+ #elem{name = <<"ADR">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_adr, '$home', '$work', '$postal', '$parcel',
+ '$dom', '$intl', '$pref', '$pobox', '$extadd', '$street',
+ '$locality', '$region', '$pcode', '$ctry'},
+ refs = [#ref{name = vcard_HOME, default = false,
+ min = 0, max = 1, label = '$home'},
+ #ref{name = vcard_WORK, default = false,
+ min = 0, max = 1, label = '$work'},
+ #ref{name = vcard_POSTAL, default = false,
+ min = 0, max = 1, label = '$postal'},
+ #ref{name = vcard_PARCEL, default = false,
+ min = 0, max = 1, label = '$parcel'},
+ #ref{name = vcard_DOM, default = false,
+ min = 0, max = 1, label = '$dom'},
+ #ref{name = vcard_INTL, default = false,
+ min = 0, max = 1, label = '$intl'},
+ #ref{name = vcard_PREF, default = false,
+ min = 0, max = 1, label = '$pref'},
+ #ref{name = vcard_POBOX, min = 0, max = 1, label = '$pobox'},
+ #ref{name = vcard_EXTADD, min = 0, max = 1, label = '$extadd'},
+ #ref{name = vcard_STREET, min = 0, max = 1, label = '$street'},
+ #ref{name = vcard_LOCALITY, min = 0, max = 1, label = '$locality'},
+ #ref{name = vcard_REGION, min = 0, max = 1, label = '$region'},
+ #ref{name = vcard_PCODE, min = 0, max = 1, label = '$pcode'},
+ #ref{name = vcard_CTRY, min = 0, max = 1, label = '$ctry'}]}).
+
+-xml(vcard_LABEL,
+ #elem{name = <<"LABEL">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_label, '$home', '$work', '$postal', '$parcel',
+ '$dom', '$intl', '$pref', '$line'},
+ refs = [#ref{name = vcard_HOME, default = false,
+ min = 0, max = 1, label = '$home'},
+ #ref{name = vcard_WORK, default = false,
+ min = 0, max = 1, label = '$work'},
+ #ref{name = vcard_POSTAL, default = false,
+ min = 0, max = 1, label = '$postal'},
+ #ref{name = vcard_PARCEL, default = false,
+ min = 0, max = 1, label = '$parcel'},
+ #ref{name = vcard_DOM, default = false,
+ min = 0, max = 1, label = '$dom'},
+ #ref{name = vcard_INTL, default = false,
+ min = 0, max = 1, label = '$intl'},
+ #ref{name = vcard_PREF, default = false,
+ min = 0, max = 1, label = '$pref'},
+ #ref{name = vcard_LINE, label = '$line'}]}).
+
+-xml(vcard_TEL,
+ #elem{name = <<"TEL">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_tel, '$home', '$work', '$voice', '$fax',
+ '$pager', '$msg', '$cell', '$video', '$bbs',
+ '$modem', '$isdn', '$pcs', '$pref', '$number'},
+ refs = [#ref{name = vcard_HOME, default = false,
+ min = 0, max = 1, label = '$home'},
+ #ref{name = vcard_WORK, default = false,
+ min = 0, max = 1, label = '$work'},
+ #ref{name = vcard_VOICE, default = false,
+ min = 0, max = 1, label = '$voice'},
+ #ref{name = vcard_FAX, default = false,
+ min = 0, max = 1, label = '$fax'},
+ #ref{name = vcard_PAGER, default = false,
+ min = 0, max = 1, label = '$pager'},
+ #ref{name = vcard_MSG, default = false,
+ min = 0, max = 1, label = '$msg'},
+ #ref{name = vcard_CELL, default = false,
+ min = 0, max = 1, label = '$cell'},
+ #ref{name = vcard_VIDEO, default = false,
+ min = 0, max = 1, label = '$video'},
+ #ref{name = vcard_BBS, default = false,
+ min = 0, max = 1, label = '$bbs'},
+ #ref{name = vcard_MODEM, default = false,
+ min = 0, max = 1, label = '$modem'},
+ #ref{name = vcard_ISDN, default = false,
+ min = 0, max = 1, label = '$isdn'},
+ #ref{name = vcard_PCS, default = false,
+ min = 0, max = 1, label = '$pcs'},
+ #ref{name = vcard_PREF, default = false,
+ min = 0, max = 1, label = '$pref'},
+ #ref{name = vcard_NUMBER,
+ min = 0, max = 1, label = '$number'}]}).
+
+-xml(vcard_EMAIL,
+ #elem{name = <<"EMAIL">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_email, '$home', '$work',
+ '$internet', '$pref', '$x400', '$userid'},
+ refs = [#ref{name = vcard_HOME, default = false,
+ min = 0, max = 1, label = '$home'},
+ #ref{name = vcard_WORK, default = false,
+ min = 0, max = 1, label = '$work'},
+ #ref{name = vcard_INTERNET, default = false,
+ min = 0, max = 1, label = '$internet'},
+ #ref{name = vcard_PREF, default = false,
+ min = 0, max = 1, label = '$pref'},
+ #ref{name = vcard_X400, default = false,
+ min = 0, max = 1, label = '$x400'},
+ #ref{name = vcard_USERID,
+ min = 0, max = 1, label = '$userid'}]}).
+
+-xml(vcard_GEO,
+ #elem{name = <<"GEO">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_geo, '$lat', '$lon'},
+ refs = [#ref{name = vcard_LAT, min = 0, max = 1, label = '$lat'},
+ #ref{name = vcard_LON, min = 0, max = 1, label = '$lon'}]}).
+
+-xml(vcard_BINVAL,
+ #elem{name = <<"BINVAL">>,
+ xmlns = <<"vcard-temp">>,
+ cdata = #cdata{dec = {base64, decode, []},
+ enc = {base64, encode, []}},
+ result = '$cdata'}).
+
+-xml(vcard_LOGO,
+ #elem{name = <<"LOGO">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_logo, '$type', '$binval', '$extval'},
+ refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
+ #ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
+ #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}).
+
+-xml(vcard_PHOTO,
+ #elem{name = <<"PHOTO">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_photo, '$type', '$binval', '$extval'},
+ refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
+ #ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
+ #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}).
+
+-xml(vcard_ORG,
+ #elem{name = <<"ORG">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_org, '$name', '$units'},
+ refs = [#ref{name = vcard_ORGNAME,
+ label = '$name',
+ min = 0, max = 1},
+ #ref{name = vcard_ORGUNIT,
+ label = '$units'}]}).
+
+-xml(vcard_SOUND,
+ #elem{name = <<"SOUND">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_sound, '$phonetic', '$binval', '$extval'},
+ refs = [#ref{name = vcard_BINVAL, min = 0, max = 1, label = '$binval'},
+ #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'},
+ #ref{name = vcard_PHONETIC, min = 0, max = 1, label = '$phonetic'}]}).
+
+-xml(vcard_KEY,
+ #elem{name = <<"KEY">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard_key, '$type', '$cred'},
+ refs = [#ref{name = vcard_TYPE, min = 0, max = 1, label = '$type'},
+ #ref{name = vcard_CRED, min = 0, max = 1, label = '$cred'}]}).
+
+-xml(vcard_CATEGORIES,
+ #elem{name = <<"CATEGORIES">>,
+ xmlns = <<"vcard-temp">>,
+ result = '$keywords',
+ refs = [#ref{name = vcard_KEYWORD, label = '$keywords'}]}).
+
+-xml(vcard_CLASS,
+ #elem{name = <<"CLASS">>,
+ xmlns = <<"vcard-temp">>,
+ result = '$class',
+ refs = [#ref{name = vcard_PUBLIC, min = 0, max = 1, label = '$class'},
+ #ref{name = vcard_PRIVATE, min = 0, max = 1, label = '$class'},
+ #ref{name = vcard_CONFIDENTIAL, min = 0, max = 1, label = '$class'}]}).
%% {vcard_AGENT,
%% #elem{name = <<"AGENT">>,
%% xmlns = <<"vcard-temp">>,
%% result = {vcard_agent, '$vcard', '$extval'},
%% refs = [#ref{name = vcard, min = 0, max = 1, label = '$vcard'},
-%% #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}}.
-
-{vcard,
- #elem{name = <<"vCard">>,
- xmlns = <<"vcard-temp">>,
- result = {vcard, '$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'},
- refs = [#ref{name = vcard_N, min = 0, max = 1, label = '$n'},
- #ref{name = vcard_ADR, label = '$adr'},
- #ref{name = vcard_LABEL, label = '$label'},
- #ref{name = vcard_TEL, label = '$tel'},
- #ref{name = vcard_EMAIL, label = '$email'},
- #ref{name = vcard_GEO, min = 0, max = 1, label = '$geo'},
- #ref{name = vcard_LOGO, min = 0, max = 1, label = '$logo'},
- #ref{name = vcard_PHOTO, min = 0, max = 1, label = '$photo'},
- #ref{name = vcard_ORG, min = 0, max = 1, label = '$org'},
- #ref{name = vcard_SOUND, min = 0, max = 1, label = '$sound'},
- #ref{name = vcard_KEY, min = 0, max = 1, label = '$key'},
- #ref{name = vcard_VERSION, min = 0, max = 1, label = '$version'},
- #ref{name = vcard_FN, min = 0, max = 1, label = '$fn'},
- #ref{name = vcard_NICKNAME, min = 0, max = 1, label = '$nickname'},
- #ref{name = vcard_BDAY, min = 0, max = 1, label = '$bday'},
- #ref{name = vcard_JABBERID, min = 0, max = 1, label = '$jabberid'},
- #ref{name = vcard_MAILER, min = 0, max = 1, label = '$mailer'},
- #ref{name = vcard_TZ, min = 0, max = 1, label = '$tz'},
- #ref{name = vcard_TITLE, min = 0, max = 1, label = '$title'},
- #ref{name = vcard_ROLE, min = 0, max = 1, label = '$role'},
- #ref{name = vcard_NOTE, min = 0, max = 1, label = '$note'},
- #ref{name = vcard_PRODID, min = 0, max = 1, label = '$prodid'},
- #ref{name = vcard_REV, min = 0, max = 1, label = '$rev'},
- %%#ref{name = vcard_AGENT, min = 0, max = 1, label = '$agent'},
- #ref{name = vcard_SORT_STRING, min = 0, max = 1,
- label = '$sort_string'},
- #ref{name = vcard_UID, min = 0, max = 1, label = '$uid'},
- #ref{name = vcard_URL, min = 0, max = 1, label = '$url'},
- #ref{name = vcard_DESC, min = 0, max = 1, label = '$desc'},
- #ref{name = vcard_CATEGORIES, default = [], min = 0, max = 1,
- label = '$categories'},
- #ref{name = vcard_CLASS, min = 0, max = 1, label = '$class'}]}}.
-
-{xdata_field_required,
- #elem{name = <<"required">>,
- xmlns = <<"jabber:x:data">>,
- result = true}}.
-
-{xdata_field_desc,
- #elem{name = <<"desc">>, xmlns = <<"jabber:x:data">>, result = '$cdata'}}.
-
-{xdata_field_value,
- #elem{name = <<"value">>, xmlns = <<"jabber:x:data">>, result = '$cdata'}}.
-
-{xdata_field_option,
- #elem{name = <<"option">>,
- xmlns = <<"jabber:x:data">>,
- result = '$value',
- refs = [#ref{name = xdata_field_value,
- label = '$value',
- min = 1, max = 1}]}}.
-
-{xdata_field,
- #elem{name = <<"field">>,
- xmlns = <<"jabber:x:data">>,
- result = {xdata_field, '$label', '$type', '$var',
- '$required', '$desc', '$values', '$options'},
- attrs = [#attr{name = <<"label">>},
- #attr{name = <<"type">>,
- enc = {enc_enum, []},
- dec = {dec_enum, [['boolean',
- 'fixed',
- 'hidden',
- 'jid-multi',
- 'jid-single',
- 'list-multi',
- 'list-single',
- 'text-multi',
- 'text-private',
- 'text-single']]}},
- #attr{name = <<"var">>}],
- refs = [#ref{name = xdata_field_required,
- label = '$required',
- default = false,
- min = 0, max = 1},
- #ref{name = xdata_field_desc,
- label = '$desc',
- min = 0, max = 1},
- #ref{name = xdata_field_value,
- label = '$values'},
- #ref{name = xdata_field_option,
- label = '$options'}]}}.
-
-{xdata_instructions, #elem{name = <<"instructions">>,
- xmlns = <<"jabber:x:data">>,
- result = '$cdata'}}.
-{xdata_title, #elem{name = <<"title">>,
- xmlns = <<"jabber:x:data">>,
- result = '$cdata'}}.
-{xdata_reported, #elem{name = <<"reported">>,
- xmlns = <<"jabber:x:data">>,
- result = '$fields',
- refs = [#ref{name = xdata_field,
- label = '$fields'}]}}.
-{xdata_item, #elem{name = <<"item">>,
- xmlns = <<"jabber:x:data">>,
- result = '$fields',
- refs = [#ref{name = xdata_field,
- label = '$fields'}]}}.
-
-{xdata,
- #elem{name = <<"x">>,
- xmlns = <<"jabber:x:data">>,
- result = {xdata, '$type', '$instructions', '$title',
- '$reported', '$items', '$fields'},
- attrs = [#attr{name = <<"type">>,
- required = true,
- dec = {dec_enum, [[cancel, form, result, submit]]},
- enc = {enc_enum, []}}],
- refs = [#ref{name = xdata_instructions,
- label = '$instructions'},
- #ref{name = xdata_title,
- label = '$title',
- min = 0, max = 1},
- #ref{name = xdata_reported,
- label = '$reported',
- min = 0, max = 1},
- #ref{name = xdata_item,
- label = '$items'},
- #ref{name = xdata_field,
- label = '$fields'}]}}.
-
-{pubsub_subscription,
- #elem{name = <<"subscription">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_subscription, '$jid', '$node', '$subid',
- '$type'},
- attrs = [#attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"node">>},
- #attr{name = <<"subid">>},
- #attr{name = <<"subscription">>,
- label = '$type',
- dec = {dec_enum, [[none, pending, subscribed,
- unconfigured]]},
- enc = {enc_enum, []}}]}}.
-
-{pubsub_affiliation,
- #elem{name = <<"affiliation">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_affiliation, '$node', '$type'},
- attrs = [#attr{name = <<"node">>,
- required = true},
- #attr{name = <<"affiliation">>,
- label = '$type',
- required = true,
- dec = {dec_enum, [[member, none, outcast, owner,
- publisher, 'publish-only']]},
- enc = {enc_enum, []}}]}}.
-
-{pubsub_item,
- #elem{name = <<"item">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_item, '$id', '$_els'},
- attrs = [#attr{name = <<"id">>}]}}.
-
-{pubsub_items,
- #elem{name = <<"items">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_items, '$node', '$max_items',
- '$subid', '$items'},
- attrs = [#attr{name = <<"max_items">>,
- dec = {dec_int, [0, infinity]},
- enc = {enc_int, []}},
- #attr{name = <<"node">>,
- required = true},
- #attr{name = <<"subid">>}],
- refs = [#ref{name = pubsub_item, label = '$items'}]}}.
-
-{pubsub_event_retract,
- #elem{name = <<"retract">>,
- xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
- result = '$id',
- attrs = [#attr{name = <<"id">>, required = true}]}}.
-
-{pubsub_event_item,
- #elem{name = <<"item">>,
- xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
- result = {pubsub_event_item, '$id', '$node', '$publisher'},
- attrs = [#attr{name = <<"id">>},
- #attr{name = <<"node">>},
- #attr{name = <<"publisher">>}]}}.
-
-{pubsub_event_items,
- #elem{name = <<"items">>,
- xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
- result = {pubsub_event_items, '$node', '$retract', '$items'},
- attrs = [#attr{name = <<"node">>,
- required = true}],
- refs = [#ref{name = pubsub_event_retract, label = '$retract'},
- #ref{name = pubsub_event_item, label = '$items'}]}}.
-
-{pubsub_event,
- #elem{name = <<"event">>,
- xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
- result = {pubsub_event, '$items'},
- refs = [#ref{name = pubsub_event_items, label = '$items'}]}}.
-
-{pubsub_subscriptions,
- #elem{name = <<"subscriptions">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {'$node', '$subscriptions'},
- attrs = [#attr{name = <<"node">>,
- default = none}],
- refs = [#ref{name = pubsub_subscription, label = '$subscriptions'}]}}.
-
-{pubsub_affiliations,
- #elem{name = <<"affiliations">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = '$affiliations',
- refs = [#ref{name = pubsub_affiliation, label = '$affiliations'}]}}.
-
-{pubsub_subscribe,
- #elem{name = <<"subscribe">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_subscribe, '$node', '$jid'},
- attrs = [#attr{name = <<"node">>},
- #attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}]}}.
-
-{pubsub_unsubscribe,
- #elem{name = <<"unsubscribe">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_unsubscribe, '$node', '$jid', '$subid'},
- attrs = [#attr{name = <<"node">>},
- #attr{name = <<"subid">>},
- #attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}]}}.
-
-{pubsub_publish,
- #elem{name = <<"publish">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_publish, '$node', '$items'},
- attrs = [#attr{name = <<"node">>,
- required = true}],
- refs = [#ref{name = pubsub_item, label = '$items'}]}}.
-
-{pubsub_options,
- #elem{name = <<"options">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_options, '$node', '$jid', '$subid', '$xdata'},
- attrs = [#attr{name = <<"node">>},
- #attr{name = <<"subid">>},
- #attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}],
- refs = [#ref{name = xdata, min = 0, max = 1,
- label = '$xdata'}]}}.
-
-{pubsub_retract,
- #elem{name = <<"retract">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub_retract, '$node', '$notify', '$items'},
- attrs = [#attr{name = <<"node">>,
- required = true},
- #attr{name = <<"notify">>,
- default = false,
- dec = {dec_bool, []},
- enc = {enc_bool, []}}],
- refs = [#ref{name = pubsub_item, label = '$items'}]}}.
-
-{pubsub,
- #elem{name = <<"pubsub">>,
- xmlns = <<"http://jabber.org/protocol/pubsub">>,
- result = {pubsub, '$subscriptions', '$affiliations', '$publish',
- '$subscribe', '$unsubscribe', '$options', '$items',
- '$retract'},
- refs = [#ref{name = pubsub_subscriptions, label = '$subscriptions',
- min = 0, max = 1},
- #ref{name = pubsub_affiliations, label = '$affiliations',
- min = 0, max = 1},
- #ref{name = pubsub_subscribe, label = '$subscribe',
- min = 0, max = 1},
- #ref{name = pubsub_unsubscribe, label = '$unsubscribe',
- min = 0, max = 1},
- #ref{name = pubsub_options, label = '$options',
- min = 0, max = 1},
- #ref{name = pubsub_items, label = '$items',
- min = 0, max = 1},
- #ref{name = pubsub_retract, label = '$retract',
- min = 0, max = 1},
- #ref{name = pubsub_publish, label = '$publish',
- min = 0, max = 1}]}}.
-
-{shim_header,
- #elem{name = <<"header">>,
- xmlns = <<"http://jabber.org/protocol/shim">>,
- result = {'$name', '$cdata'},
- attrs = [#attr{name = <<"name">>,
- required = true}]}}.
-
-{shim_headers,
- #elem{name = <<"headers">>,
- xmlns = <<"http://jabber.org/protocol/shim">>,
- result = {shim, '$headers'},
- refs = [#ref{name = shim_header, label = '$headers'}]}}.
-
-{delay,
- #elem{name = <<"delay">>,
- xmlns = <<"urn:xmpp:delay">>,
- result = {delay, '$stamp', '$from'},
- attrs = [#attr{name = <<"stamp">>,
- required = true,
- dec = {dec_utc, []},
- enc = {enc_utc, []}},
- #attr{name = <<"from">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}]}}.
-
-{legacy_delay,
- #elem{name = <<"x">>,
- xmlns = <<"jabber:x:delay">>,
- result = {legacy_delay, '$stamp', '$from'},
- attrs = [#attr{name = <<"stamp">>,
- required = true},
- #attr{name = <<"from">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}]}}.
-
-{bytestreams_streamhost,
- #elem{name = <<"streamhost">>,
- xmlns = <<"http://jabber.org/protocol/bytestreams">>,
- result = {streamhost, '$jid', '$host', '$port'},
- attrs = [#attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"host">>,
- required = true},
- #attr{name = <<"port">>,
- default = 1080,
- dec = {dec_int, [0, 65535]},
- enc = {enc_int, []}}]}}.
-
-{bytestreams_streamhost_used,
- #elem{name = <<"streamhost-used">>,
- xmlns = <<"http://jabber.org/protocol/bytestreams">>,
- result = '$jid',
- attrs = [#attr{name = <<"jid">>,
- required = true,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}]}}.
-
-{bytestreams_activate,
- #elem{name = <<"activate">>,
- xmlns = <<"http://jabber.org/protocol/bytestreams">>,
- cdata = #cdata{enc = {enc_jid, []}, dec = {dec_jid, []}},
- result = '$cdata'}}.
-
-{bytestreams,
- #elem{name = <<"query">>,
- xmlns = <<"http://jabber.org/protocol/bytestreams">>,
- result = {bytestreams, '$hosts', '$used', '$activate',
- '$dstaddr', '$mode', '$sid'},
- attrs = [#attr{name = <<"dstaddr">>},
- #attr{name = <<"sid">>},
- #attr{name = <<"mode">>,
- default = tcp,
- dec = {dec_enum, [[tcp, udp]]},
- enc = {enc_enum, []}}],
- refs = [#ref{name = bytestreams_streamhost, label = '$hosts'},
- #ref{name = bytestreams_streamhost_used,
- min = 0, max = 1, label = '$used'},
- #ref{name = bytestreams_activate,
- min = 0, max = 1, label = '$activate'}]}}.
-
-{muc_history,
- #elem{name = <<"history">>,
- xmlns = <<"http://jabber.org/protocol/muc">>,
- result = {muc_history, '$maxchars', '$maxstanzas',
- '$seconds', '$since'},
- attrs = [#attr{name = <<"maxchars">>,
- dec = {dec_int, [0, infinity]},
- enc = {enc_int, []}},
- #attr{name = <<"maxstanzas">>,
- dec = {dec_int, [0, infinity]},
- enc = {enc_int, []}},
- #attr{name = <<"seconds">>,
- dec = {dec_int, [0, infinity]},
- enc = {enc_int, []}},
- #attr{name = <<"since">>,
- dec = {dec_utc, []},
- enc = {enc_utc, []}}]}}.
-
-{muc_user_reason,
- #elem{name = <<"reason">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = '$cdata'}}.
-
-{muc_user_decline,
- #elem{name = <<"decline">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = {muc_decline, '$reason', '$from', '$to'},
- attrs = [#attr{name = <<"to">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"from">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}],
- refs = [#ref{name = muc_user_reason, min = 0,
- max = 1, label = '$reason'}]}}.
-
-{muc_user_destroy,
- #elem{name = <<"destroy">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = {muc_user_destroy, '$reason', '$jid'},
- attrs = [#attr{name = <<"jid">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}],
- refs = [#ref{name = muc_user_reason, min = 0,
- max = 1, label = '$reason'}]}}.
-
-{muc_user_invite,
- #elem{name = <<"invite">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = {muc_invite, '$reason', '$from', '$to'},
- attrs = [#attr{name = <<"to">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"from">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}],
- refs = [#ref{name = muc_user_reason, min = 0,
- max = 1, label = '$reason'}]}}.
-
-{muc_user_actor,
- #elem{name = <<"actor">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = {muc_actor, '$jid', '$nick'},
- attrs = [#attr{name = <<"jid">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"nick">>}]}}.
-
-{muc_user_continue,
- #elem{name = <<"continue">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = '$thread',
- attrs = [#attr{name = <<"thread">>}]}}.
-
-{muc_user_status,
- #elem{name = <<"status">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = '$code',
- attrs = [#attr{name = <<"code">>,
- dec = {dec_int, [100, 999]},
- enc = {enc_int, []}}]}}.
-
-{muc_user_item,
- #elem{name = <<"item">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = {muc_item, '$actor', '$continue', '$reason',
- '$affiliation', '$role', '$jid', '$nick'},
- refs = [#ref{name = muc_user_actor,
- min = 0, max = 1, label = '$actor'},
- #ref{name = muc_user_continue,
- min = 0, max = 1, label = '$continue'},
- #ref{name = muc_user_reason,
- min = 0, max = 1, label = '$reason'}],
- attrs = [#attr{name = <<"affiliation">>,
- dec = {dec_enum, [[admin, member, none,
- outcast, owner]]},
- enc = {enc_enum, []}},
- #attr{name = <<"role">>,
- dec = {dec_enum, [[moderator, none,
- participant, visitor]]},
- enc = {enc_enum, []}},
- #attr{name = <<"jid">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}},
- #attr{name = <<"nick">>}]}}.
-
-{muc_user,
- #elem{name = <<"x">>,
- xmlns = <<"http://jabber.org/protocol/muc#user">>,
- result = {muc_user, '$decline', '$destroy', '$invites',
- '$items', '$status_codes', '$password'},
- attrs = [#attr{name = <<"password">>}],
- refs = [#ref{name = muc_user_decline, min = 0,
- max = 1, label = '$decline'},
- #ref{name = muc_user_destroy, min = 0, max = 1,
- label = '$destroy'},
- #ref{name = muc_user_invite, label = '$invites'},
- #ref{name = muc_user_item, label = '$items'},
- #ref{name = muc_user_status, label = '$status_codes'}]}}.
-
-{muc_owner_password,
- #elem{name = <<"password">>,
- xmlns = <<"http://jabber.org/protocol/muc#owner">>,
- result = '$cdata'}}.
-
-{muc_owner_reason,
- #elem{name = <<"reason">>,
- xmlns = <<"http://jabber.org/protocol/muc#owner">>,
- result = '$cdata'}}.
-
-{muc_owner_destroy,
- #elem{name = <<"destroy">>,
- xmlns = <<"http://jabber.org/protocol/muc#owner">>,
- result = {muc_owner_destroy, '$jid', '$reason', '$password'},
- attrs = [#attr{name = <<"jid">>,
- dec = {dec_jid, []},
- enc = {enc_jid, []}}],
- refs = [#ref{name = muc_owner_password, min = 0, max = 1,
- label = '$password'},
- #ref{name = muc_owner_reason, min = 0, max = 1,
- label = '$reason'}]}}.
-
-{muc_owner,
- #elem{name = <<"query">>,
- xmlns = <<"http://jabber.org/protocol/muc#owner">>,
- result = {muc_owner, '$destroy', '$config'},
- refs = [#ref{name = muc_owner_destroy, min = 0, max = 1,
- label = '$destroy'},
- #ref{name = xdata, min = 0, max = 1, label = '$config'}]}}.
-
-{muc,
- #elem{name = <<"x">>,
- xmlns = <<"http://jabber.org/protocol/muc">>,
- result = {muc, '$history', '$password'},
- attrs = [#attr{name = <<"password">>}],
- refs = [#ref{name = muc_history, min = 0, max = 1,
- label = '$history'}]}}.
+%% #ref{name = vcard_EXTVAL, min = 0, max = 1, label = '$extval'}]}).
+
+-xml(vcard,
+ #elem{name = <<"vCard">>,
+ xmlns = <<"vcard-temp">>,
+ result = {vcard, '$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'},
+ refs = [#ref{name = vcard_N, min = 0, max = 1, label = '$n'},
+ #ref{name = vcard_ADR, label = '$adr'},
+ #ref{name = vcard_LABEL, label = '$label'},
+ #ref{name = vcard_TEL, label = '$tel'},
+ #ref{name = vcard_EMAIL, label = '$email'},
+ #ref{name = vcard_GEO, min = 0, max = 1, label = '$geo'},
+ #ref{name = vcard_LOGO, min = 0, max = 1, label = '$logo'},
+ #ref{name = vcard_PHOTO, min = 0, max = 1, label = '$photo'},
+ #ref{name = vcard_ORG, min = 0, max = 1, label = '$org'},
+ #ref{name = vcard_SOUND, min = 0, max = 1, label = '$sound'},
+ #ref{name = vcard_KEY, min = 0, max = 1, label = '$key'},
+ #ref{name = vcard_VERSION, min = 0, max = 1, label = '$version'},
+ #ref{name = vcard_FN, min = 0, max = 1, label = '$fn'},
+ #ref{name = vcard_NICKNAME, min = 0, max = 1, label = '$nickname'},
+ #ref{name = vcard_BDAY, min = 0, max = 1, label = '$bday'},
+ #ref{name = vcard_JABBERID, min = 0, max = 1, label = '$jabberid'},
+ #ref{name = vcard_MAILER, min = 0, max = 1, label = '$mailer'},
+ #ref{name = vcard_TZ, min = 0, max = 1, label = '$tz'},
+ #ref{name = vcard_TITLE, min = 0, max = 1, label = '$title'},
+ #ref{name = vcard_ROLE, min = 0, max = 1, label = '$role'},
+ #ref{name = vcard_NOTE, min = 0, max = 1, label = '$note'},
+ #ref{name = vcard_PRODID, min = 0, max = 1, label = '$prodid'},
+ #ref{name = vcard_REV, min = 0, max = 1, label = '$rev'},
+ %%#ref{name = vcard_AGENT, min = 0, max = 1, label = '$agent'},
+ #ref{name = vcard_SORT_STRING, min = 0, max = 1,
+ label = '$sort_string'},
+ #ref{name = vcard_UID, min = 0, max = 1, label = '$uid'},
+ #ref{name = vcard_URL, min = 0, max = 1, label = '$url'},
+ #ref{name = vcard_DESC, min = 0, max = 1, label = '$desc'},
+ #ref{name = vcard_CATEGORIES, default = [], min = 0, max = 1,
+ label = '$categories'},
+ #ref{name = vcard_CLASS, min = 0, max = 1, label = '$class'}]}).
+
+-xml(xdata_field_required,
+ #elem{name = <<"required">>,
+ xmlns = <<"jabber:x:data">>,
+ result = true}).
+
+-xml(xdata_field_desc,
+ #elem{name = <<"desc">>, xmlns = <<"jabber:x:data">>, result = '$cdata'}).
+
+-xml(xdata_field_value,
+ #elem{name = <<"value">>, xmlns = <<"jabber:x:data">>, result = '$cdata'}).
+
+-xml(xdata_field_option,
+ #elem{name = <<"option">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$value',
+ refs = [#ref{name = xdata_field_value,
+ label = '$value',
+ min = 1, max = 1}]}).
+
+-xml(xdata_field,
+ #elem{name = <<"field">>,
+ xmlns = <<"jabber:x:data">>,
+ result = {xdata_field, '$label', '$type', '$var',
+ '$required', '$desc', '$values', '$options'},
+ attrs = [#attr{name = <<"label">>},
+ #attr{name = <<"type">>,
+ enc = {enc_enum, []},
+ dec = {dec_enum, [['boolean',
+ 'fixed',
+ 'hidden',
+ 'jid-multi',
+ 'jid-single',
+ 'list-multi',
+ 'list-single',
+ 'text-multi',
+ 'text-private',
+ 'text-single']]}},
+ #attr{name = <<"var">>}],
+ refs = [#ref{name = xdata_field_required,
+ label = '$required',
+ default = false,
+ min = 0, max = 1},
+ #ref{name = xdata_field_desc,
+ label = '$desc',
+ min = 0, max = 1},
+ #ref{name = xdata_field_value,
+ label = '$values'},
+ #ref{name = xdata_field_option,
+ label = '$options'}]}).
+
+-xml(xdata_instructions, #elem{name = <<"instructions">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$cdata'}).
+-xml(xdata_title, #elem{name = <<"title">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$cdata'}).
+-xml(xdata_reported, #elem{name = <<"reported">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$fields',
+ refs = [#ref{name = xdata_field,
+ label = '$fields'}]}).
+-xml(xdata_item, #elem{name = <<"item">>,
+ xmlns = <<"jabber:x:data">>,
+ result = '$fields',
+ refs = [#ref{name = xdata_field,
+ label = '$fields'}]}).
+
+-xml(xdata,
+ #elem{name = <<"x">>,
+ xmlns = <<"jabber:x:data">>,
+ result = {xdata, '$type', '$instructions', '$title',
+ '$reported', '$items', '$fields'},
+ attrs = [#attr{name = <<"type">>,
+ required = true,
+ dec = {dec_enum, [[cancel, form, result, submit]]},
+ enc = {enc_enum, []}}],
+ refs = [#ref{name = xdata_instructions,
+ label = '$instructions'},
+ #ref{name = xdata_title,
+ label = '$title',
+ min = 0, max = 1},
+ #ref{name = xdata_reported,
+ label = '$reported',
+ min = 0, max = 1},
+ #ref{name = xdata_item,
+ label = '$items'},
+ #ref{name = xdata_field,
+ label = '$fields'}]}).
+
+-xml(pubsub_subscription,
+ #elem{name = <<"subscription">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_subscription, '$jid', '$node', '$subid',
+ '$type'},
+ attrs = [#attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"node">>},
+ #attr{name = <<"subid">>},
+ #attr{name = <<"subscription">>,
+ label = '$type',
+ dec = {dec_enum, [[none, pending, subscribed,
+ unconfigured]]},
+ enc = {enc_enum, []}}]}).
+
+-xml(pubsub_affiliation,
+ #elem{name = <<"affiliation">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_affiliation, '$node', '$type'},
+ attrs = [#attr{name = <<"node">>,
+ required = true},
+ #attr{name = <<"affiliation">>,
+ label = '$type',
+ required = true,
+ dec = {dec_enum, [[member, none, outcast, owner,
+ publisher, 'publish-only']]},
+ enc = {enc_enum, []}}]}).
+
+-xml(pubsub_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_item, '$id', '$_els'},
+ attrs = [#attr{name = <<"id">>}]}).
+
+-xml(pubsub_items,
+ #elem{name = <<"items">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_items, '$node', '$max_items',
+ '$subid', '$items'},
+ attrs = [#attr{name = <<"max_items">>,
+ dec = {dec_int, [0, infinity]},
+ enc = {enc_int, []}},
+ #attr{name = <<"node">>,
+ required = true},
+ #attr{name = <<"subid">>}],
+ refs = [#ref{name = pubsub_item, label = '$items'}]}).
+
+-xml(pubsub_event_retract,
+ #elem{name = <<"retract">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
+ result = '$id',
+ attrs = [#attr{name = <<"id">>, required = true}]}).
+
+-xml(pubsub_event_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
+ result = {pubsub_event_item, '$id', '$node', '$publisher'},
+ attrs = [#attr{name = <<"id">>},
+ #attr{name = <<"node">>},
+ #attr{name = <<"publisher">>}]}).
+
+-xml(pubsub_event_items,
+ #elem{name = <<"items">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
+ result = {pubsub_event_items, '$node', '$retract', '$items'},
+ attrs = [#attr{name = <<"node">>,
+ required = true}],
+ refs = [#ref{name = pubsub_event_retract, label = '$retract'},
+ #ref{name = pubsub_event_item, label = '$items'}]}).
+
+-xml(pubsub_event,
+ #elem{name = <<"event">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub#event">>,
+ result = {pubsub_event, '$items'},
+ refs = [#ref{name = pubsub_event_items, label = '$items'}]}).
+
+-xml(pubsub_subscriptions,
+ #elem{name = <<"subscriptions">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {'$node', '$subscriptions'},
+ attrs = [#attr{name = <<"node">>,
+ default = none}],
+ refs = [#ref{name = pubsub_subscription, label = '$subscriptions'}]}).
+
+-xml(pubsub_affiliations,
+ #elem{name = <<"affiliations">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = '$affiliations',
+ refs = [#ref{name = pubsub_affiliation, label = '$affiliations'}]}).
+
+-xml(pubsub_subscribe,
+ #elem{name = <<"subscribe">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_subscribe, '$node', '$jid'},
+ attrs = [#attr{name = <<"node">>},
+ #attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}]}).
+
+-xml(pubsub_unsubscribe,
+ #elem{name = <<"unsubscribe">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_unsubscribe, '$node', '$jid', '$subid'},
+ attrs = [#attr{name = <<"node">>},
+ #attr{name = <<"subid">>},
+ #attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}]}).
+
+-xml(pubsub_publish,
+ #elem{name = <<"publish">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_publish, '$node', '$items'},
+ attrs = [#attr{name = <<"node">>,
+ required = true}],
+ refs = [#ref{name = pubsub_item, label = '$items'}]}).
+
+-xml(pubsub_options,
+ #elem{name = <<"options">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_options, '$node', '$jid', '$subid', '$xdata'},
+ attrs = [#attr{name = <<"node">>},
+ #attr{name = <<"subid">>},
+ #attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}],
+ refs = [#ref{name = xdata, min = 0, max = 1,
+ label = '$xdata'}]}).
+
+-xml(pubsub_retract,
+ #elem{name = <<"retract">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub_retract, '$node', '$notify', '$items'},
+ attrs = [#attr{name = <<"node">>,
+ required = true},
+ #attr{name = <<"notify">>,
+ default = false,
+ dec = {dec_bool, []},
+ enc = {enc_bool, []}}],
+ refs = [#ref{name = pubsub_item, label = '$items'}]}).
+
+-xml(pubsub,
+ #elem{name = <<"pubsub">>,
+ xmlns = <<"http://jabber.org/protocol/pubsub">>,
+ result = {pubsub, '$subscriptions', '$affiliations', '$publish',
+ '$subscribe', '$unsubscribe', '$options', '$items',
+ '$retract'},
+ refs = [#ref{name = pubsub_subscriptions, label = '$subscriptions',
+ min = 0, max = 1},
+ #ref{name = pubsub_affiliations, label = '$affiliations',
+ min = 0, max = 1},
+ #ref{name = pubsub_subscribe, label = '$subscribe',
+ min = 0, max = 1},
+ #ref{name = pubsub_unsubscribe, label = '$unsubscribe',
+ min = 0, max = 1},
+ #ref{name = pubsub_options, label = '$options',
+ min = 0, max = 1},
+ #ref{name = pubsub_items, label = '$items',
+ min = 0, max = 1},
+ #ref{name = pubsub_retract, label = '$retract',
+ min = 0, max = 1},
+ #ref{name = pubsub_publish, label = '$publish',
+ min = 0, max = 1}]}).
+
+-xml(shim_header,
+ #elem{name = <<"header">>,
+ xmlns = <<"http://jabber.org/protocol/shim">>,
+ result = {'$name', '$cdata'},
+ attrs = [#attr{name = <<"name">>,
+ required = true}]}).
+
+-xml(shim_headers,
+ #elem{name = <<"headers">>,
+ xmlns = <<"http://jabber.org/protocol/shim">>,
+ result = {shim, '$headers'},
+ refs = [#ref{name = shim_header, label = '$headers'}]}).
+
+-xml(delay,
+ #elem{name = <<"delay">>,
+ xmlns = <<"urn:xmpp:delay">>,
+ result = {delay, '$stamp', '$from'},
+ attrs = [#attr{name = <<"stamp">>,
+ required = true,
+ dec = {dec_utc, []},
+ enc = {enc_utc, []}},
+ #attr{name = <<"from">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}]}).
+
+-xml(legacy_delay,
+ #elem{name = <<"x">>,
+ xmlns = <<"jabber:x:delay">>,
+ result = {legacy_delay, '$stamp', '$from'},
+ attrs = [#attr{name = <<"stamp">>,
+ required = true},
+ #attr{name = <<"from">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}]}).
+
+-xml(bytestreams_streamhost,
+ #elem{name = <<"streamhost">>,
+ xmlns = <<"http://jabber.org/protocol/bytestreams">>,
+ result = {streamhost, '$jid', '$host', '$port'},
+ attrs = [#attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"host">>,
+ required = true},
+ #attr{name = <<"port">>,
+ default = 1080,
+ dec = {dec_int, [0, 65535]},
+ enc = {enc_int, []}}]}).
+
+-xml(bytestreams_streamhost_used,
+ #elem{name = <<"streamhost-used">>,
+ xmlns = <<"http://jabber.org/protocol/bytestreams">>,
+ result = '$jid',
+ attrs = [#attr{name = <<"jid">>,
+ required = true,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}]}).
+
+-xml(bytestreams_activate,
+ #elem{name = <<"activate">>,
+ xmlns = <<"http://jabber.org/protocol/bytestreams">>,
+ cdata = #cdata{enc = {enc_jid, []}, dec = {dec_jid, []}},
+ result = '$cdata'}).
+
+-xml(bytestreams,
+ #elem{name = <<"query">>,
+ xmlns = <<"http://jabber.org/protocol/bytestreams">>,
+ result = {bytestreams, '$hosts', '$used', '$activate',
+ '$dstaddr', '$mode', '$sid'},
+ attrs = [#attr{name = <<"dstaddr">>},
+ #attr{name = <<"sid">>},
+ #attr{name = <<"mode">>,
+ default = tcp,
+ dec = {dec_enum, [[tcp, udp]]},
+ enc = {enc_enum, []}}],
+ refs = [#ref{name = bytestreams_streamhost, label = '$hosts'},
+ #ref{name = bytestreams_streamhost_used,
+ min = 0, max = 1, label = '$used'},
+ #ref{name = bytestreams_activate,
+ min = 0, max = 1, label = '$activate'}]}).
+
+-xml(muc_history,
+ #elem{name = <<"history">>,
+ xmlns = <<"http://jabber.org/protocol/muc">>,
+ result = {muc_history, '$maxchars', '$maxstanzas',
+ '$seconds', '$since'},
+ attrs = [#attr{name = <<"maxchars">>,
+ dec = {dec_int, [0, infinity]},
+ enc = {enc_int, []}},
+ #attr{name = <<"maxstanzas">>,
+ dec = {dec_int, [0, infinity]},
+ enc = {enc_int, []}},
+ #attr{name = <<"seconds">>,
+ dec = {dec_int, [0, infinity]},
+ enc = {enc_int, []}},
+ #attr{name = <<"since">>,
+ dec = {dec_utc, []},
+ enc = {enc_utc, []}}]}).
+
+-xml(muc_user_reason,
+ #elem{name = <<"reason">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = '$cdata'}).
+
+-xml(muc_user_decline,
+ #elem{name = <<"decline">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = {muc_decline, '$reason', '$from', '$to'},
+ attrs = [#attr{name = <<"to">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"from">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}],
+ refs = [#ref{name = muc_user_reason, min = 0,
+ max = 1, label = '$reason'}]}).
+
+-xml(muc_user_destroy,
+ #elem{name = <<"destroy">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = {muc_user_destroy, '$reason', '$jid'},
+ attrs = [#attr{name = <<"jid">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}],
+ refs = [#ref{name = muc_user_reason, min = 0,
+ max = 1, label = '$reason'}]}).
+
+-xml(muc_user_invite,
+ #elem{name = <<"invite">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = {muc_invite, '$reason', '$from', '$to'},
+ attrs = [#attr{name = <<"to">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"from">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}],
+ refs = [#ref{name = muc_user_reason, min = 0,
+ max = 1, label = '$reason'}]}).
+
+-xml(muc_user_actor,
+ #elem{name = <<"actor">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = {muc_actor, '$jid', '$nick'},
+ attrs = [#attr{name = <<"jid">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"nick">>}]}).
+
+-xml(muc_user_continue,
+ #elem{name = <<"continue">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = '$thread',
+ attrs = [#attr{name = <<"thread">>}]}).
+
+-xml(muc_user_status,
+ #elem{name = <<"status">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = '$code',
+ attrs = [#attr{name = <<"code">>,
+ dec = {dec_int, [100, 999]},
+ enc = {enc_int, []}}]}).
+
+-xml(muc_user_item,
+ #elem{name = <<"item">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = {muc_item, '$actor', '$continue', '$reason',
+ '$affiliation', '$role', '$jid', '$nick'},
+ refs = [#ref{name = muc_user_actor,
+ min = 0, max = 1, label = '$actor'},
+ #ref{name = muc_user_continue,
+ min = 0, max = 1, label = '$continue'},
+ #ref{name = muc_user_reason,
+ min = 0, max = 1, label = '$reason'}],
+ attrs = [#attr{name = <<"affiliation">>,
+ dec = {dec_enum, [[admin, member, none,
+ outcast, owner]]},
+ enc = {enc_enum, []}},
+ #attr{name = <<"role">>,
+ dec = {dec_enum, [[moderator, none,
+ participant, visitor]]},
+ enc = {enc_enum, []}},
+ #attr{name = <<"jid">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}},
+ #attr{name = <<"nick">>}]}).
+
+-xml(muc_user,
+ #elem{name = <<"x">>,
+ xmlns = <<"http://jabber.org/protocol/muc#user">>,
+ result = {muc_user, '$decline', '$destroy', '$invites',
+ '$items', '$status_codes', '$password'},
+ attrs = [#attr{name = <<"password">>}],
+ refs = [#ref{name = muc_user_decline, min = 0,
+ max = 1, label = '$decline'},
+ #ref{name = muc_user_destroy, min = 0, max = 1,
+ label = '$destroy'},
+ #ref{name = muc_user_invite, label = '$invites'},
+ #ref{name = muc_user_item, label = '$items'},
+ #ref{name = muc_user_status, label = '$status_codes'}]}).
+
+-xml(muc_owner_password,
+ #elem{name = <<"password">>,
+ xmlns = <<"http://jabber.org/protocol/muc#owner">>,
+ result = '$cdata'}).
+
+-xml(muc_owner_reason,
+ #elem{name = <<"reason">>,
+ xmlns = <<"http://jabber.org/protocol/muc#owner">>,
+ result = '$cdata'}).
+
+-xml(muc_owner_destroy,
+ #elem{name = <<"destroy">>,
+ xmlns = <<"http://jabber.org/protocol/muc#owner">>,
+ result = {muc_owner_destroy, '$jid', '$reason', '$password'},
+ attrs = [#attr{name = <<"jid">>,
+ dec = {dec_jid, []},
+ enc = {enc_jid, []}}],
+ refs = [#ref{name = muc_owner_password, min = 0, max = 1,
+ label = '$password'},
+ #ref{name = muc_owner_reason, min = 0, max = 1,
+ label = '$reason'}]}).
+
+-xml(muc_owner,
+ #elem{name = <<"query">>,
+ xmlns = <<"http://jabber.org/protocol/muc#owner">>,
+ result = {muc_owner, '$destroy', '$config'},
+ refs = [#ref{name = muc_owner_destroy, min = 0, max = 1,
+ label = '$destroy'},
+ #ref{name = xdata, min = 0, max = 1, label = '$config'}]}).
+
+-xml(muc,
+ #elem{name = <<"x">>,
+ xmlns = <<"http://jabber.org/protocol/muc">>,
+ result = {muc, '$history', '$password'},
+ attrs = [#attr{name = <<"password">>}],
+ refs = [#ref{name = muc_history, min = 0, max = 1,
+ label = '$history'}]}).
dec_tzo(Val) ->
[H1, M1] = str:tokens(Val, <<":">>),