aboutsummaryrefslogtreecommitdiff
path: root/src/jlib.hrl
diff options
context:
space:
mode:
Diffstat (limited to 'src/jlib.hrl')
-rw-r--r--src/jlib.hrl783
1 files changed, 576 insertions, 207 deletions
diff --git a/src/jlib.hrl b/src/jlib.hrl
index 0e5c8322b..b0f59e288 100644
--- a/src/jlib.hrl
+++ b/src/jlib.hrl
@@ -19,318 +19,687 @@
%%%
%%%----------------------------------------------------------------------
--define(NS_DISCO_ITEMS, "http://jabber.org/protocol/disco#items").
--define(NS_DISCO_INFO, "http://jabber.org/protocol/disco#info").
--define(NS_VCARD, "vcard-temp").
--define(NS_VCARD_UPDATE, "vcard-temp:x:update").
--define(NS_AUTH, "jabber:iq:auth").
--define(NS_AUTH_ERROR, "jabber:iq:auth:error").
--define(NS_REGISTER, "jabber:iq:register").
--define(NS_SEARCH, "jabber:iq:search").
--define(NS_ROSTER, "jabber:iq:roster").
--define(NS_ROSTER_VER, "urn:xmpp:features:rosterver").
--define(NS_PRIVACY, "jabber:iq:privacy").
--define(NS_BLOCKING, "urn:xmpp:blocking").
--define(NS_PRIVATE, "jabber:iq:private").
--define(NS_VERSION, "jabber:iq:version").
--define(NS_TIME90, "jabber:iq:time"). % TODO: Remove once XEP-0090 is Obsolete
--define(NS_TIME, "urn:xmpp:time").
--define(NS_LAST, "jabber:iq:last").
--define(NS_XDATA, "jabber:x:data").
--define(NS_IQDATA, "jabber:iq:data").
--define(NS_DELAY91, "jabber:x:delay"). % TODO: Remove once XEP-0091 is Obsolete
--define(NS_DELAY, "urn:xmpp:delay").
--define(NS_EXPIRE, "jabber:x:expire").
--define(NS_EVENT, "jabber:x:event").
--define(NS_CHATSTATES, "http://jabber.org/protocol/chatstates").
--define(NS_XCONFERENCE, "jabber:x:conference").
--define(NS_STATS, "http://jabber.org/protocol/stats").
--define(NS_MUC, "http://jabber.org/protocol/muc").
--define(NS_MUC_USER, "http://jabber.org/protocol/muc#user").
--define(NS_MUC_ADMIN, "http://jabber.org/protocol/muc#admin").
--define(NS_MUC_OWNER, "http://jabber.org/protocol/muc#owner").
--define(NS_MUC_UNIQUE, "http://jabber.org/protocol/muc#unique").
--define(NS_PUBSUB, "http://jabber.org/protocol/pubsub").
--define(NS_PUBSUB_EVENT, "http://jabber.org/protocol/pubsub#event").
--define(NS_PUBSUB_OWNER, "http://jabber.org/protocol/pubsub#owner").
--define(NS_PUBSUB_NMI, "http://jabber.org/protocol/pubsub#node-meta-info").
--define(NS_PUBSUB_ERRORS,"http://jabber.org/protocol/pubsub#errors").
--define(NS_PUBSUB_NODE_CONFIG, "http://jabber.org/protocol/pubsub#node_config").
--define(NS_PUBSUB_SUB_OPTIONS, "http://jabber.org/protocol/pubsub#subscribe_options").
--define(NS_PUBSUB_SUB_AUTH, "http://jabber.org/protocol/pubsub#subscribe_authorization").
--define(NS_PUBSUB_GET_PENDING, "http://jabber.org/protocol/pubsub#get-pending").
--define(NS_COMMANDS, "http://jabber.org/protocol/commands").
--define(NS_BYTESTREAMS, "http://jabber.org/protocol/bytestreams").
--define(NS_ADMIN, "http://jabber.org/protocol/admin").
--define(NS_SERVERINFO, "http://jabber.org/network/serverinfo").
-
--define(NS_RSM, "http://jabber.org/protocol/rsm").
--define(NS_EJABBERD_CONFIG, "ejabberd:config").
-
--define(NS_STREAM, "http://etherx.jabber.org/streams").
-
--define(NS_STANZAS, "urn:ietf:params:xml:ns:xmpp-stanzas").
--define(NS_STREAMS, "urn:ietf:params:xml:ns:xmpp-streams").
-
--define(NS_TLS, "urn:ietf:params:xml:ns:xmpp-tls").
--define(NS_SASL, "urn:ietf:params:xml:ns:xmpp-sasl").
--define(NS_SESSION, "urn:ietf:params:xml:ns:xmpp-session").
--define(NS_BIND, "urn:ietf:params:xml:ns:xmpp-bind").
-
--define(NS_FEATURE_IQAUTH, "http://jabber.org/features/iq-auth").
--define(NS_FEATURE_IQREGISTER, "http://jabber.org/features/iq-register").
--define(NS_FEATURE_COMPRESS, "http://jabber.org/features/compress").
--define(NS_FEATURE_MSGOFFLINE, "msgoffline").
-
--define(NS_COMPRESS, "http://jabber.org/protocol/compress").
-
--define(NS_CAPS, "http://jabber.org/protocol/caps").
--define(NS_SHIM, "http://jabber.org/protocol/shim").
--define(NS_ADDRESS, "http://jabber.org/protocol/address").
-
-%% CAPTCHA related NSes.
--define(NS_OOB, "jabber:x:oob").
--define(NS_CAPTCHA, "urn:xmpp:captcha").
--define(NS_MEDIA, "urn:xmpp:media-element").
--define(NS_BOB, "urn:xmpp:bob").
-
-% TODO: remove "code" attribute (currently it used for backward-compatibility)
+
+-define(NS_DISCO_ITEMS,
+ <<"http://jabber.org/protocol/disco#items">>).
+
+-define(NS_DISCO_INFO,
+ <<"http://jabber.org/protocol/disco#info">>).
+
+-define(NS_VCARD, <<"vcard-temp">>).
+
+-define(NS_VCARD_UPDATE, <<"vcard-temp:x:update">>).
+
+-define(NS_AUTH, <<"jabber:iq:auth">>).
+
+-define(NS_AUTH_ERROR, <<"jabber:iq:auth:error">>).
+
+-define(NS_REGISTER, <<"jabber:iq:register">>).
+
+-define(NS_SEARCH, <<"jabber:iq:search">>).
+
+-define(NS_ROSTER, <<"jabber:iq:roster">>).
+
+-define(NS_ROSTER_VER,
+ <<"urn:xmpp:features:rosterver">>).
+
+-define(NS_PRIVACY, <<"jabber:iq:privacy">>).
+
+-define(NS_BLOCKING, <<"urn:xmpp:blocking">>).
+
+-define(NS_PRIVATE, <<"jabber:iq:private">>).
+
+-define(NS_VERSION, <<"jabber:iq:version">>).
+
+-define(NS_TIME90, <<"jabber:iq:time">>).
+
+-define(NS_TIME, <<"urn:xmpp:time">>).
+
+-define(NS_LAST, <<"jabber:iq:last">>).
+
+-define(NS_XDATA, <<"jabber:x:data">>).
+
+-define(NS_IQDATA, <<"jabber:iq:data">>).
+
+-define(NS_DELAY91, <<"jabber:x:delay">>).
+
+-define(NS_DELAY, <<"urn:xmpp:delay">>).
+
+-define(NS_EXPIRE, <<"jabber:x:expire">>).
+
+-define(NS_EVENT, <<"jabber:x:event">>).
+
+-define(NS_CHATSTATES,
+ <<"http://jabber.org/protocol/chatstates">>).
+
+-define(NS_XCONFERENCE, <<"jabber:x:conference">>).
+
+-define(NS_STATS,
+ <<"http://jabber.org/protocol/stats">>).
+
+-define(NS_MUC, <<"http://jabber.org/protocol/muc">>).
+
+-define(NS_MUC_USER,
+ <<"http://jabber.org/protocol/muc#user">>).
+
+-define(NS_MUC_ADMIN,
+ <<"http://jabber.org/protocol/muc#admin">>).
+
+-define(NS_MUC_OWNER,
+ <<"http://jabber.org/protocol/muc#owner">>).
+
+-define(NS_MUC_UNIQUE,
+ <<"http://jabber.org/protocol/muc#unique">>).
+
+-define(NS_PUBSUB,
+ <<"http://jabber.org/protocol/pubsub">>).
+
+-define(NS_PUBSUB_EVENT,
+ <<"http://jabber.org/protocol/pubsub#event">>).
+
+-define(NS_PUBSUB_META_DATA,
+ <<"http://jabber.org/protocol/pubsub#meta-data">>).
+
+-define(NS_PUBSUB_OWNER,
+ <<"http://jabber.org/protocol/pubsub#owner">>).
+
+-define(NS_PUBSUB_NMI,
+ <<"http://jabber.org/protocol/pubsub#node-meta-info">>).
+
+-define(NS_PUBSUB_ERRORS,
+ <<"http://jabber.org/protocol/pubsub#errors">>).
+
+-define(NS_PUBSUB_NODE_CONFIG,
+ <<"http://jabber.org/protocol/pubsub#node_config">>).
+
+-define(NS_PUBSUB_SUB_OPTIONS,
+ <<"http://jabber.org/protocol/pubsub#subscribe_options">>).
+
+-define(NS_PUBSUB_SUBSCRIBE_OPTIONS,
+ <<"http://jabber.org/protocol/pubsub#subscribe_options">>).
+
+-define(NS_PUBSUB_PUBLISH_OPTIONS,
+ <<"http://jabber.org/protocol/pubsub#publish_options">>).
+
+-define(NS_PUBSUB_SUB_AUTH,
+ <<"http://jabber.org/protocol/pubsub#subscribe_authorization">>).
+
+-define(NS_PUBSUB_GET_PENDING,
+ <<"http://jabber.org/protocol/pubsub#get-pending">>).
+
+-define(NS_COMMANDS,
+ <<"http://jabber.org/protocol/commands">>).
+
+-define(NS_BYTESTREAMS,
+ <<"http://jabber.org/protocol/bytestreams">>).
+
+-define(NS_ADMIN,
+ <<"http://jabber.org/protocol/admin">>).
+-define(NS_ADMIN_ANNOUNCE,
+ <<"http://jabber.org/protocol/admin#announce">>).
+-define(NS_ADMIN_ANNOUNCE_ALL,
+ <<"http://jabber.org/protocol/admin#announce-all">>).
+-define(NS_ADMIN_SET_MOTD,
+ <<"http://jabber.org/protocol/admin#set-motd">>).
+-define(NS_ADMIN_EDIT_MOTD,
+ <<"http://jabber.org/protocol/admin#edit-motd">>).
+-define(NS_ADMIN_DELETE_MOTD,
+ <<"http://jabber.org/protocol/admin#delete-motd">>).
+-define(NS_ADMIN_ANNOUNCE_ALLHOSTS,
+ <<"http://jabber.org/protocol/admin#announce-allhosts">>).
+-define(NS_ADMIN_ANNOUNCE_ALL_ALLHOSTS,
+ <<"http://jabber.org/protocol/admin#announce-all-allhosts">>).
+-define(NS_ADMIN_SET_MOTD_ALLHOSTS,
+ <<"http://jabber.org/protocol/admin#set-motd-allhosts">>).
+-define(NS_ADMIN_EDIT_MOTD_ALLHOSTS,
+ <<"http://jabber.org/protocol/admin#edit-motd-allhosts">>).
+-define(NS_ADMIN_DELETE_MOTD_ALLHOSTS,
+ <<"http://jabber.org/protocol/admin#delete-motd-allhosts">>).
+
+-define(NS_SERVERINFO,
+ <<"http://jabber.org/network/serverinfo">>).
+
+-define(NS_RSM, <<"http://jabber.org/protocol/rsm">>).
+
+-define(NS_EJABBERD_CONFIG, <<"ejabberd:config">>).
+
+-define(NS_STREAM,
+ <<"http://etherx.jabber.org/streams">>).
+
+-define(NS_STANZAS,
+ <<"urn:ietf:params:xml:ns:xmpp-stanzas">>).
+
+-define(NS_STREAMS,
+ <<"urn:ietf:params:xml:ns:xmpp-streams">>).
+
+-define(NS_TLS, <<"urn:ietf:params:xml:ns:xmpp-tls">>).
+
+-define(NS_SASL,
+ <<"urn:ietf:params:xml:ns:xmpp-sasl">>).
+
+-define(NS_SESSION,
+ <<"urn:ietf:params:xml:ns:xmpp-session">>).
+
+-define(NS_BIND,
+ <<"urn:ietf:params:xml:ns:xmpp-bind">>).
+
+-define(NS_FEATURE_IQAUTH,
+ <<"http://jabber.org/features/iq-auth">>).
+
+-define(NS_FEATURE_IQREGISTER,
+ <<"http://jabber.org/features/iq-register">>).
+
+-define(NS_FEATURE_COMPRESS,
+ <<"http://jabber.org/features/compress">>).
+
+-define(NS_FEATURE_MSGOFFLINE, <<"msgoffline">>).
+
+-define(NS_COMPRESS,
+ <<"http://jabber.org/protocol/compress">>).
+
+-define(NS_CAPS, <<"http://jabber.org/protocol/caps">>).
+
+-define(NS_SHIM, <<"http://jabber.org/protocol/shim">>).
+
+-define(NS_ADDRESS,
+ <<"http://jabber.org/protocol/address">>).
+
+-define(NS_OOB, <<"jabber:x:oob">>).
+
+-define(NS_CAPTCHA, <<"urn:xmpp:captcha">>).
+
+-define(NS_MEDIA, <<"urn:xmpp:media-element">>).
+
+-define(NS_BOB, <<"urn:xmpp:bob">>).
+
-define(STANZA_ERROR(Code, Type, Condition),
- {xmlelement, "error",
- [{"code", Code}, {"type", Type}],
- [{xmlelement, Condition, [{"xmlns", ?NS_STANZAS}], []}]}).
+ #xmlel{name = <<"error">>,
+ attrs = [{<<"code">>, Code}, {<<"type">>, Type}],
+ children =
+ [#xmlel{name = Condition,
+ attrs = [{<<"xmlns">>, ?NS_STANZAS}],
+ children = []}]}).
-define(ERR_BAD_FORMAT,
- ?STANZA_ERROR("406", "modify", "bad-format")).
+ ?STANZA_ERROR(<<"406">>, <<"modify">>,
+ <<"bad-format">>)).
+
-define(ERR_BAD_REQUEST,
- ?STANZA_ERROR("400", "modify", "bad-request")).
+ ?STANZA_ERROR(<<"400">>, <<"modify">>,
+ <<"bad-request">>)).
+
-define(ERR_CONFLICT,
- ?STANZA_ERROR("409", "cancel", "conflict")).
+ ?STANZA_ERROR(<<"409">>, <<"cancel">>, <<"conflict">>)).
+
-define(ERR_FEATURE_NOT_IMPLEMENTED,
- ?STANZA_ERROR("501", "cancel", "feature-not-implemented")).
+ ?STANZA_ERROR(<<"501">>, <<"cancel">>,
+ <<"feature-not-implemented">>)).
+
-define(ERR_FORBIDDEN,
- ?STANZA_ERROR("403", "auth", "forbidden")).
+ ?STANZA_ERROR(<<"403">>, <<"auth">>, <<"forbidden">>)).
+
-define(ERR_GONE,
- ?STANZA_ERROR("302", "modify", "gone")).
+ ?STANZA_ERROR(<<"302">>, <<"modify">>, <<"gone">>)).
+
-define(ERR_INTERNAL_SERVER_ERROR,
- ?STANZA_ERROR("500", "wait", "internal-server-error")).
+ ?STANZA_ERROR(<<"500">>, <<"wait">>,
+ <<"internal-server-error">>)).
+
-define(ERR_ITEM_NOT_FOUND,
- ?STANZA_ERROR("404", "cancel", "item-not-found")).
+ ?STANZA_ERROR(<<"404">>, <<"cancel">>,
+ <<"item-not-found">>)).
+
-define(ERR_JID_MALFORMED,
- ?STANZA_ERROR("400", "modify", "jid-malformed")).
+ ?STANZA_ERROR(<<"400">>, <<"modify">>,
+ <<"jid-malformed">>)).
+
-define(ERR_NOT_ACCEPTABLE,
- ?STANZA_ERROR("406", "modify", "not-acceptable")).
+ ?STANZA_ERROR(<<"406">>, <<"modify">>,
+ <<"not-acceptable">>)).
+
-define(ERR_NOT_ALLOWED,
- ?STANZA_ERROR("405", "cancel", "not-allowed")).
+ ?STANZA_ERROR(<<"405">>, <<"cancel">>,
+ <<"not-allowed">>)).
+
-define(ERR_NOT_AUTHORIZED,
- ?STANZA_ERROR("401", "auth", "not-authorized")).
+ ?STANZA_ERROR(<<"401">>, <<"auth">>,
+ <<"not-authorized">>)).
+
-define(ERR_PAYMENT_REQUIRED,
- ?STANZA_ERROR("402", "auth", "payment-required")).
+ ?STANZA_ERROR(<<"402">>, <<"auth">>,
+ <<"payment-required">>)).
+
-define(ERR_RECIPIENT_UNAVAILABLE,
- ?STANZA_ERROR("404", "wait", "recipient-unavailable")).
+ ?STANZA_ERROR(<<"404">>, <<"wait">>,
+ <<"recipient-unavailable">>)).
+
-define(ERR_REDIRECT,
- ?STANZA_ERROR("302", "modify", "redirect")).
+ ?STANZA_ERROR(<<"302">>, <<"modify">>, <<"redirect">>)).
+
-define(ERR_REGISTRATION_REQUIRED,
- ?STANZA_ERROR("407", "auth", "registration-required")).
+ ?STANZA_ERROR(<<"407">>, <<"auth">>,
+ <<"registration-required">>)).
+
-define(ERR_REMOTE_SERVER_NOT_FOUND,
- ?STANZA_ERROR("404", "cancel", "remote-server-not-found")).
+ ?STANZA_ERROR(<<"404">>, <<"cancel">>,
+ <<"remote-server-not-found">>)).
+
-define(ERR_REMOTE_SERVER_TIMEOUT,
- ?STANZA_ERROR("504", "wait", "remote-server-timeout")).
+ ?STANZA_ERROR(<<"504">>, <<"wait">>,
+ <<"remote-server-timeout">>)).
+
-define(ERR_RESOURCE_CONSTRAINT,
- ?STANZA_ERROR("500", "wait", "resource-constraint")).
+ ?STANZA_ERROR(<<"500">>, <<"wait">>,
+ <<"resource-constraint">>)).
+
-define(ERR_SERVICE_UNAVAILABLE,
- ?STANZA_ERROR("503", "cancel", "service-unavailable")).
+ ?STANZA_ERROR(<<"503">>, <<"cancel">>,
+ <<"service-unavailable">>)).
+
-define(ERR_SUBSCRIPTION_REQUIRED,
- ?STANZA_ERROR("407", "auth", "subscription-required")).
+ ?STANZA_ERROR(<<"407">>, <<"auth">>,
+ <<"subscription-required">>)).
+
-define(ERR_UNEXPECTED_REQUEST,
- ?STANZA_ERROR("400", "wait", "unexpected-request")).
+ ?STANZA_ERROR(<<"400">>, <<"wait">>,
+ <<"unexpected-request">>)).
+
-define(ERR_UNEXPECTED_REQUEST_CANCEL,
- ?STANZA_ERROR("401", "cancel", "unexpected-request")).
+ ?STANZA_ERROR(<<"401">>, <<"cancel">>,
+ <<"unexpected-request">>)).
+
%-define(ERR_,
% ?STANZA_ERROR("", "", "")).
--define(STANZA_ERRORT(Code, Type, Condition, Lang, Text),
- {xmlelement, "error",
- [{"code", Code}, {"type", Type}],
- [{xmlelement, Condition, [{"xmlns", ?NS_STANZAS}], []},
- {xmlelement, "text", [{"xmlns", ?NS_STANZAS}],
- [{xmlcdata, translate:translate(Lang, Text)}]}]}).
+-define(STANZA_ERRORT(Code, Type, Condition, Lang,
+ Text),
+ #xmlel{name = <<"error">>,
+ attrs = [{<<"code">>, Code}, {<<"type">>, Type}],
+ children =
+ [#xmlel{name = Condition,
+ attrs = [{<<"xmlns">>, ?NS_STANZAS}], children = []},
+ #xmlel{name = <<"text">>,
+ attrs = [{<<"xmlns">>, ?NS_STANZAS}],
+ children =
+ [{xmlcdata,
+ translate:translate(Lang, Text)}]}]}).
-define(ERRT_BAD_FORMAT(Lang, Text),
- ?STANZA_ERRORT("406", "modify", "bad-format", Lang, Text)).
+ ?STANZA_ERRORT(<<"406">>, <<"modify">>,
+ <<"bad-format">>, Lang, Text)).
+
-define(ERRT_BAD_REQUEST(Lang, Text),
- ?STANZA_ERRORT("400", "modify", "bad-request", Lang, Text)).
+ ?STANZA_ERRORT(<<"400">>, <<"modify">>,
+ <<"bad-request">>, Lang, Text)).
+
-define(ERRT_CONFLICT(Lang, Text),
- ?STANZA_ERRORT("409", "cancel", "conflict", Lang, Text)).
+ ?STANZA_ERRORT(<<"409">>, <<"cancel">>, <<"conflict">>,
+ Lang, Text)).
+
-define(ERRT_FEATURE_NOT_IMPLEMENTED(Lang, Text),
- ?STANZA_ERRORT("501", "cancel", "feature-not-implemented", Lang, Text)).
+ ?STANZA_ERRORT(<<"501">>, <<"cancel">>,
+ <<"feature-not-implemented">>, Lang, Text)).
+
-define(ERRT_FORBIDDEN(Lang, Text),
- ?STANZA_ERRORT("403", "auth", "forbidden", Lang, Text)).
+ ?STANZA_ERRORT(<<"403">>, <<"auth">>, <<"forbidden">>,
+ Lang, Text)).
+
-define(ERRT_GONE(Lang, Text),
- ?STANZA_ERRORT("302", "modify", "gone", Lang, Text)).
+ ?STANZA_ERRORT(<<"302">>, <<"modify">>, <<"gone">>,
+ Lang, Text)).
+
-define(ERRT_INTERNAL_SERVER_ERROR(Lang, Text),
- ?STANZA_ERRORT("500", "wait", "internal-server-error", Lang, Text)).
+ ?STANZA_ERRORT(<<"500">>, <<"wait">>,
+ <<"internal-server-error">>, Lang, Text)).
+
-define(ERRT_ITEM_NOT_FOUND(Lang, Text),
- ?STANZA_ERRORT("404", "cancel", "item-not-found", Lang, Text)).
+ ?STANZA_ERRORT(<<"404">>, <<"cancel">>,
+ <<"item-not-found">>, Lang, Text)).
+
-define(ERRT_JID_MALFORMED(Lang, Text),
- ?STANZA_ERRORT("400", "modify", "jid-malformed", Lang, Text)).
+ ?STANZA_ERRORT(<<"400">>, <<"modify">>,
+ <<"jid-malformed">>, Lang, Text)).
+
-define(ERRT_NOT_ACCEPTABLE(Lang, Text),
- ?STANZA_ERRORT("406", "modify", "not-acceptable", Lang, Text)).
+ ?STANZA_ERRORT(<<"406">>, <<"modify">>,
+ <<"not-acceptable">>, Lang, Text)).
+
-define(ERRT_NOT_ALLOWED(Lang, Text),
- ?STANZA_ERRORT("405", "cancel", "not-allowed", Lang, Text)).
+ ?STANZA_ERRORT(<<"405">>, <<"cancel">>,
+ <<"not-allowed">>, Lang, Text)).
+
-define(ERRT_NOT_AUTHORIZED(Lang, Text),
- ?STANZA_ERRORT("401", "auth", "not-authorized", Lang, Text)).
+ ?STANZA_ERRORT(<<"401">>, <<"auth">>,
+ <<"not-authorized">>, Lang, Text)).
+
-define(ERRT_PAYMENT_REQUIRED(Lang, Text),
- ?STANZA_ERRORT("402", "auth", "payment-required", Lang, Text)).
+ ?STANZA_ERRORT(<<"402">>, <<"auth">>,
+ <<"payment-required">>, Lang, Text)).
+
-define(ERRT_RECIPIENT_UNAVAILABLE(Lang, Text),
- ?STANZA_ERRORT("404", "wait", "recipient-unavailable", Lang, Text)).
+ ?STANZA_ERRORT(<<"404">>, <<"wait">>,
+ <<"recipient-unavailable">>, Lang, Text)).
+
-define(ERRT_REDIRECT(Lang, Text),
- ?STANZA_ERRORT("302", "modify", "redirect", Lang, Text)).
+ ?STANZA_ERRORT(<<"302">>, <<"modify">>, <<"redirect">>,
+ Lang, Text)).
+
-define(ERRT_REGISTRATION_REQUIRED(Lang, Text),
- ?STANZA_ERRORT("407", "auth", "registration-required", Lang, Text)).
+ ?STANZA_ERRORT(<<"407">>, <<"auth">>,
+ <<"registration-required">>, Lang, Text)).
+
-define(ERRT_REMOTE_SERVER_NOT_FOUND(Lang, Text),
- ?STANZA_ERRORT("404", "cancel", "remote-server-not-found", Lang, Text)).
+ ?STANZA_ERRORT(<<"404">>, <<"cancel">>,
+ <<"remote-server-not-found">>, Lang, Text)).
+
-define(ERRT_REMOTE_SERVER_TIMEOUT(Lang, Text),
- ?STANZA_ERRORT("504", "wait", "remote-server-timeout", Lang, Text)).
+ ?STANZA_ERRORT(<<"504">>, <<"wait">>,
+ <<"remote-server-timeout">>, Lang, Text)).
+
-define(ERRT_RESOURCE_CONSTRAINT(Lang, Text),
- ?STANZA_ERRORT("500", "wait", "resource-constraint", Lang, Text)).
+ ?STANZA_ERRORT(<<"500">>, <<"wait">>,
+ <<"resource-constraint">>, Lang, Text)).
+
-define(ERRT_SERVICE_UNAVAILABLE(Lang, Text),
- ?STANZA_ERRORT("503", "cancel", "service-unavailable", Lang, Text)).
+ ?STANZA_ERRORT(<<"503">>, <<"cancel">>,
+ <<"service-unavailable">>, Lang, Text)).
+
-define(ERRT_SUBSCRIPTION_REQUIRED(Lang, Text),
- ?STANZA_ERRORT("407", "auth", "subscription-required", Lang, Text)).
+ ?STANZA_ERRORT(<<"407">>, <<"auth">>,
+ <<"subscription-required">>, Lang, Text)).
+
-define(ERRT_UNEXPECTED_REQUEST(Lang, Text),
- ?STANZA_ERRORT("400", "wait", "unexpected-request", Lang, Text)).
+ ?STANZA_ERRORT(<<"400">>, <<"wait">>,
+ <<"unexpected-request">>, Lang, Text)).
-% Auth stanza errors
-define(ERR_AUTH_NO_RESOURCE_PROVIDED(Lang),
- ?ERRT_NOT_ACCEPTABLE(Lang, "No resource provided")).
+ ?ERRT_NOT_ACCEPTABLE(Lang, <<"No resource provided">>)).
+
-define(ERR_AUTH_BAD_RESOURCE_FORMAT(Lang),
- ?ERRT_NOT_ACCEPTABLE(Lang, "Illegal resource format")).
--define(ERR_AUTH_RESOURCE_CONFLICT(Lang),
- ?ERRT_CONFLICT(Lang, "Resource conflict")).
+ ?ERRT_NOT_ACCEPTABLE(Lang,
+ <<"Illegal resource format">>)).
+-define(ERR_AUTH_RESOURCE_CONFLICT(Lang),
+ ?ERRT_CONFLICT(Lang, <<"Resource conflict">>)).
--define(STREAM_ERROR(Condition),
- {xmlelement, "stream:error",
- [],
- [{xmlelement, Condition, [{"xmlns", ?NS_STREAMS}], []}]}).
+-define(STREAM_ERROR(Condition, Cdata),
+ #xmlel{name = <<"stream:error">>, attrs = [],
+ children =
+ [#xmlel{name = Condition,
+ attrs = [{<<"xmlns">>, ?NS_STREAMS}],
+ children = [{xmlcdata, Cdata}]}]}).
-define(SERR_BAD_FORMAT,
- ?STREAM_ERROR("bad-format")).
+ ?STREAM_ERROR(<<"bad-format">>, <<"">>)).
+
-define(SERR_BAD_NAMESPACE_PREFIX,
- ?STREAM_ERROR("bad-namespace-prefix")).
+ ?STREAM_ERROR(<<"bad-namespace-prefix">>, <<"">>)).
+
-define(SERR_CONFLICT,
- ?STREAM_ERROR("conflict")).
+ ?STREAM_ERROR(<<"conflict">>, <<"">>)).
+
-define(SERR_CONNECTION_TIMEOUT,
- ?STREAM_ERROR("connection-timeout")).
+ ?STREAM_ERROR(<<"connection-timeout">>, <<"">>)).
+
-define(SERR_HOST_GONE,
- ?STREAM_ERROR("host-gone")).
+ ?STREAM_ERROR(<<"host-gone">>, <<"">>)).
+
-define(SERR_HOST_UNKNOWN,
- ?STREAM_ERROR("host-unknown")).
+ ?STREAM_ERROR(<<"host-unknown">>, <<"">>)).
+
-define(SERR_IMPROPER_ADDRESSING,
- ?STREAM_ERROR("improper-addressing")).
+ ?STREAM_ERROR(<<"improper-addressing">>, <<"">>)).
+
-define(SERR_INTERNAL_SERVER_ERROR,
- ?STREAM_ERROR("internal-server-error")).
+ ?STREAM_ERROR(<<"internal-server-error">>, <<"">>)).
+
-define(SERR_INVALID_FROM,
- ?STREAM_ERROR("invalid-from")).
+ ?STREAM_ERROR(<<"invalid-from">>, <<"">>)).
+
-define(SERR_INVALID_ID,
- ?STREAM_ERROR("invalid-id")).
+ ?STREAM_ERROR(<<"invalid-id">>, <<"">>)).
+
-define(SERR_INVALID_NAMESPACE,
- ?STREAM_ERROR("invalid-namespace")).
+ ?STREAM_ERROR(<<"invalid-namespace">>, <<"">>)).
+
-define(SERR_INVALID_XML,
- ?STREAM_ERROR("invalid-xml")).
+ ?STREAM_ERROR(<<"invalid-xml">>, <<"">>)).
+
-define(SERR_NOT_AUTHORIZED,
- ?STREAM_ERROR("not-authorized")).
+ ?STREAM_ERROR(<<"not-authorized">>, <<"">>)).
+
-define(SERR_POLICY_VIOLATION,
- ?STREAM_ERROR("policy-violation")).
+ ?STREAM_ERROR(<<"policy-violation">>, <<"">>)).
+
-define(SERR_REMOTE_CONNECTION_FAILED,
- ?STREAM_ERROR("remote-connection-failed")).
+ ?STREAM_ERROR(<<"remote-connection-failed">>, <<"">>)).
+
-define(SERR_RESOURSE_CONSTRAINT,
- ?STREAM_ERROR("resource-constraint")).
+ ?STREAM_ERROR(<<"resource-constraint">>, <<"">>)).
+
-define(SERR_RESTRICTED_XML,
- ?STREAM_ERROR("restricted-xml")).
-% TODO: include hostname or IP
--define(SERR_SEE_OTHER_HOST,
- ?STREAM_ERROR("see-other-host")).
+ ?STREAM_ERROR(<<"restricted-xml">>, <<"">>)).
+
+-define(SERR_SEE_OTHER_HOST(Host),
+ ?STREAM_ERROR(<<"see-other-host">>, Host)).
+
-define(SERR_SYSTEM_SHUTDOWN,
- ?STREAM_ERROR("system-shutdown")).
+ ?STREAM_ERROR(<<"system-shutdown">>, <<"">>)).
+
-define(SERR_UNSUPPORTED_ENCODING,
- ?STREAM_ERROR("unsupported-encoding")).
+ ?STREAM_ERROR(<<"unsupported-encoding">>, <<"">>)).
+
-define(SERR_UNSUPPORTED_STANZA_TYPE,
- ?STREAM_ERROR("unsupported-stanza-type")).
+ ?STREAM_ERROR(<<"unsupported-stanza-type">>, <<"">>)).
+
-define(SERR_UNSUPPORTED_VERSION,
- ?STREAM_ERROR("unsupported-version")).
+ ?STREAM_ERROR(<<"unsupported-version">>, <<"">>)).
+
-define(SERR_XML_NOT_WELL_FORMED,
- ?STREAM_ERROR("xml-not-well-formed")).
+ ?STREAM_ERROR(<<"xml-not-well-formed">>, <<"">>)).
+
%-define(SERR_,
-% ?STREAM_ERROR("")).
+% ?STREAM_ERROR("", "")).
--define(STREAM_ERRORT(Condition, Lang, Text),
- {xmlelement, "stream:error",
- [],
- [{xmlelement, Condition, [{"xmlns", ?NS_STREAMS}], []},
- {xmlelement, "text", [{"xml:lang", Lang}, {"xmlns", ?NS_STREAMS}],
- [{xmlcdata, translate:translate(Lang, Text)}]}]}).
+-define(STREAM_ERRORT(Condition, Cdata, Lang, Text),
+ #xmlel{name = <<"stream:error">>, attrs = [],
+ children =
+ [#xmlel{name = Condition,
+ attrs = [{<<"xmlns">>, ?NS_STREAMS}],
+ children = [{xmlcdata, Cdata}]},
+ #xmlel{name = <<"text">>,
+ attrs =
+ [{<<"xml:lang">>, Lang},
+ {<<"xmlns">>, ?NS_STREAMS}],
+ children =
+ [{xmlcdata,
+ translate:translate(Lang, Text)}]}]}).
-define(SERRT_BAD_FORMAT(Lang, Text),
- ?STREAM_ERRORT("bad-format", Lang, Text)).
+ ?STREAM_ERRORT(<<"bad-format">>, <<"">>, Lang, Text)).
+
-define(SERRT_BAD_NAMESPACE_PREFIX(Lang, Text),
- ?STREAM_ERRORT("bad-namespace-prefix", Lang, Text)).
+ ?STREAM_ERRORT(<<"bad-namespace-prefix">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_CONFLICT(Lang, Text),
- ?STREAM_ERRORT("conflict", Lang, Text)).
+ ?STREAM_ERRORT(<<"conflict">>, <<"">>, Lang, Text)).
+
-define(SERRT_CONNECTION_TIMEOUT(Lang, Text),
- ?STREAM_ERRORT("connection-timeout", Lang, Text)).
+ ?STREAM_ERRORT(<<"connection-timeout">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_HOST_GONE(Lang, Text),
- ?STREAM_ERRORT("host-gone", Lang, Text)).
+ ?STREAM_ERRORT(<<"host-gone">>, <<"">>, Lang, Text)).
+
-define(SERRT_HOST_UNKNOWN(Lang, Text),
- ?STREAM_ERRORT("host-unknown", Lang, Text)).
+ ?STREAM_ERRORT(<<"host-unknown">>, <<"">>, Lang, Text)).
+
-define(SERRT_IMPROPER_ADDRESSING(Lang, Text),
- ?STREAM_ERRORT("improper-addressing", Lang, Text)).
+ ?STREAM_ERRORT(<<"improper-addressing">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_INTERNAL_SERVER_ERROR(Lang, Text),
- ?STREAM_ERRORT("internal-server-error", Lang, Text)).
+ ?STREAM_ERRORT(<<"internal-server-error">>, <<"">>,
+ Lang, Text)).
+
-define(SERRT_INVALID_FROM(Lang, Text),
- ?STREAM_ERRORT("invalid-from", Lang, Text)).
+ ?STREAM_ERRORT(<<"invalid-from">>, <<"">>, Lang, Text)).
+
-define(SERRT_INVALID_ID(Lang, Text),
- ?STREAM_ERRORT("invalid-id", Lang, Text)).
+ ?STREAM_ERRORT(<<"invalid-id">>, <<"">>, Lang, Text)).
+
-define(SERRT_INVALID_NAMESPACE(Lang, Text),
- ?STREAM_ERRORT("invalid-namespace", Lang, Text)).
+ ?STREAM_ERRORT(<<"invalid-namespace">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_INVALID_XML(Lang, Text),
- ?STREAM_ERRORT("invalid-xml", Lang, Text)).
+ ?STREAM_ERRORT(<<"invalid-xml">>, <<"">>, Lang, Text)).
+
-define(SERRT_NOT_AUTHORIZED(Lang, Text),
- ?STREAM_ERRORT("not-authorized", Lang, Text)).
+ ?STREAM_ERRORT(<<"not-authorized">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_POLICY_VIOLATION(Lang, Text),
- ?STREAM_ERRORT("policy-violation", Lang, Text)).
+ ?STREAM_ERRORT(<<"policy-violation">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_REMOTE_CONNECTION_FAILED(Lang, Text),
- ?STREAM_ERRORT("remote-connection-failed", Lang, Text)).
+ ?STREAM_ERRORT(<<"remote-connection-failed">>, <<"">>,
+ Lang, Text)).
+
-define(SERRT_RESOURSE_CONSTRAINT(Lang, Text),
- ?STREAM_ERRORT("resource-constraint", Lang, Text)).
+ ?STREAM_ERRORT(<<"resource-constraint">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_RESTRICTED_XML(Lang, Text),
- ?STREAM_ERRORT("restricted-xml", Lang, Text)).
-% TODO: include hostname or IP
--define(SERRT_SEE_OTHER_HOST(Lang, Text),
- ?STREAM_ERRORT("see-other-host", Lang, Text)).
+ ?STREAM_ERRORT(<<"restricted-xml">>, <<"">>, Lang,
+ Text)).
+
+-define(SERRT_SEE_OTHER_HOST(Host, Lang, Text),
+ ?STREAM_ERRORT(<<"see-other-host">>, Host, Lang, Text)).
+
-define(SERRT_SYSTEM_SHUTDOWN(Lang, Text),
- ?STREAM_ERRORT("system-shutdown", Lang, Text)).
+ ?STREAM_ERRORT(<<"system-shutdown">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_UNSUPPORTED_ENCODING(Lang, Text),
- ?STREAM_ERRORT("unsupported-encoding", Lang, Text)).
+ ?STREAM_ERRORT(<<"unsupported-encoding">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_UNSUPPORTED_STANZA_TYPE(Lang, Text),
- ?STREAM_ERRORT("unsupported-stanza-type", Lang, Text)).
+ ?STREAM_ERRORT(<<"unsupported-stanza-type">>, <<"">>,
+ Lang, Text)).
+
-define(SERRT_UNSUPPORTED_VERSION(Lang, Text),
- ?STREAM_ERRORT("unsupported-version", Lang, Text)).
+ ?STREAM_ERRORT(<<"unsupported-version">>, <<"">>, Lang,
+ Text)).
+
-define(SERRT_XML_NOT_WELL_FORMED(Lang, Text),
- ?STREAM_ERRORT("xml-not-well-formed", Lang, Text)).
-%-define(SERRT_(Lang, Text),
-% ?STREAM_ERRORT("", Lang, Text)).
+ ?STREAM_ERRORT(<<"xml-not-well-formed">>, <<"">>, Lang,
+ Text)).
+
+-record(jid, {user = <<"">> :: binary(),
+ server = <<"">> :: binary(),
+ resource = <<"">> :: binary(),
+ luser = <<"">> :: binary(),
+ lserver = <<"">> :: binary(),
+ lresource = <<"">> :: binary()}).
+
+-type(jid() :: #jid{}).
+
+-type(ljid() :: {binary(), binary(), binary()}).
+
+-record(xmlel,
+{
+ name = <<"">> :: binary(),
+ attrs = [] :: [attr()],
+ children = [] :: [xmlel() | cdata()]
+}).
+
+-type(cdata() :: {xmlcdata, CData::binary()}).
+
+-type(attr() :: {Name::binary(), Value::binary()}).
+
+-type(xmlel() :: #xmlel{}).
+
+-record(iq, {id = <<"">> :: binary(),
+ type = get :: get | set | result | error,
+ xmlns = <<"">> :: binary(),
+ lang = <<"">> :: binary(),
+ sub_el = #xmlel{} :: xmlel() | [xmlel()]}).
+
+-type(iq_get()
+ :: #iq{
+ id :: binary(),
+ type :: get,
+ xmlns :: binary(),
+ lang :: binary(),
+ sub_el :: xmlel()
+ }
+).
+
+-type(iq_set()
+ :: #iq{
+ id :: binary(),
+ type :: set,
+ xmlns :: binary(),
+ lang :: binary(),
+ sub_el :: xmlel()
+ }
+).
+
+-type iq_request() :: iq_get() | iq_set().
+
+-type(iq_result()
+ :: #iq{
+ id :: binary(),
+ type :: result,
+ xmlns :: binary(),
+ lang :: binary(),
+ sub_el :: [xmlel()]
+ }
+).
+
+-type(iq_error()
+ :: #iq{
+ id :: binary(),
+ type :: error,
+ xmlns :: binary(),
+ lang :: binary(),
+ sub_el :: [xmlel()]
+ }
+).
+
+-type iq_reply() :: iq_result() | iq_error() .
+
+-type(iq() :: iq_request() | iq_reply()).
+
+-record(rsm_in, {max :: integer(),
+ direction :: before | aft,
+ id :: binary(),
+ index :: integer()}).
+
+-record(rsm_out, {count :: integer(),
+ index :: integer(),
+ first :: binary(),
+ last :: binary()}).
+
+-type(rsm_in() :: #rsm_in{}).
+
+-type(rsm_out() :: #rsm_out{}).
+-type broadcast() :: {broadcast, broadcast_data()}.
--record(jid, {user, server, resource,
- luser, lserver, lresource}).
+-type broadcast_data() ::
+ {rebind, pid(), binary()} | %% ejabberd_c2s
+ {item, ljid(), mod_roster:subscription()} | %% mod_roster/mod_shared_roster
+ {exit, binary()} | %% mod_roster/mod_shared_roster
+ {privacy_list, mod_privacy:userlist(), binary()} | %% mod_privacy
+ {blocking, unblock_all | {block | unblock, [ljid()]}}. %% mod_blocking
--record(iq, {id = "",
- type,
- xmlns = "",
- lang = "",
- sub_el}).
+-record(xmlelement, {name = "" :: string(),
+ attrs = [] :: [{string(), string()}],
+ children = [] :: [{xmlcdata, iodata()} | xmlelement()]}).
--record(rsm_in, {max, direction, id, index}).
--record(rsm_out, {count, index, first, last}).
+-type xmlelement() :: #xmlelement{}.