diff options
Diffstat (limited to 'src/jlib.hrl')
-rw-r--r-- | src/jlib.hrl | 783 |
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{}. |