diff options
Diffstat (limited to 'include/jlib.hrl')
-rw-r--r-- | include/jlib.hrl | 502 |
1 files changed, 502 insertions, 0 deletions
diff --git a/include/jlib.hrl b/include/jlib.hrl new file mode 100644 index 000000000..13fb8fcf4 --- /dev/null +++ b/include/jlib.hrl @@ -0,0 +1,502 @@ +%%%---------------------------------------------------------------------- +%%% +%%% ejabberd, Copyright (C) 2002-2013 ProcessOne +%%% +%%% This program is free software; you can redistribute it and/or +%%% modify it under the terms of the GNU General Public License as +%%% published by the Free Software Foundation; either version 2 of the +%%% License, or (at your option) any later version. +%%% +%%% This program is distributed in the hope that it will be useful, +%%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +%%% General Public License for more details. +%%% +%%% You should have received a copy of the GNU General Public License +%%% along with this program; if not, write to the Free Software +%%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +%%% 02111-1307 USA +%%% +%%%---------------------------------------------------------------------- + +-include("ns.hrl"). +-include("xml.hrl"). + +-define(STANZA_ERROR(Code, Type, Condition), + #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">>)). + +-define(ERR_BAD_REQUEST, + ?STANZA_ERROR(<<"400">>, <<"modify">>, + <<"bad-request">>)). + +-define(ERR_CONFLICT, + ?STANZA_ERROR(<<"409">>, <<"cancel">>, <<"conflict">>)). + +-define(ERR_FEATURE_NOT_IMPLEMENTED, + ?STANZA_ERROR(<<"501">>, <<"cancel">>, + <<"feature-not-implemented">>)). + +-define(ERR_FORBIDDEN, + ?STANZA_ERROR(<<"403">>, <<"auth">>, <<"forbidden">>)). + +-define(ERR_GONE, + ?STANZA_ERROR(<<"302">>, <<"modify">>, <<"gone">>)). + +-define(ERR_INTERNAL_SERVER_ERROR, + ?STANZA_ERROR(<<"500">>, <<"wait">>, + <<"internal-server-error">>)). + +-define(ERR_ITEM_NOT_FOUND, + ?STANZA_ERROR(<<"404">>, <<"cancel">>, + <<"item-not-found">>)). + +-define(ERR_JID_MALFORMED, + ?STANZA_ERROR(<<"400">>, <<"modify">>, + <<"jid-malformed">>)). + +-define(ERR_NOT_ACCEPTABLE, + ?STANZA_ERROR(<<"406">>, <<"modify">>, + <<"not-acceptable">>)). + +-define(ERR_NOT_ALLOWED, + ?STANZA_ERROR(<<"405">>, <<"cancel">>, + <<"not-allowed">>)). + +-define(ERR_NOT_AUTHORIZED, + ?STANZA_ERROR(<<"401">>, <<"auth">>, + <<"not-authorized">>)). + +-define(ERR_PAYMENT_REQUIRED, + ?STANZA_ERROR(<<"402">>, <<"auth">>, + <<"payment-required">>)). + +-define(ERR_RECIPIENT_UNAVAILABLE, + ?STANZA_ERROR(<<"404">>, <<"wait">>, + <<"recipient-unavailable">>)). + +-define(ERR_REDIRECT, + ?STANZA_ERROR(<<"302">>, <<"modify">>, <<"redirect">>)). + +-define(ERR_REGISTRATION_REQUIRED, + ?STANZA_ERROR(<<"407">>, <<"auth">>, + <<"registration-required">>)). + +-define(ERR_REMOTE_SERVER_NOT_FOUND, + ?STANZA_ERROR(<<"404">>, <<"cancel">>, + <<"remote-server-not-found">>)). + +-define(ERR_REMOTE_SERVER_TIMEOUT, + ?STANZA_ERROR(<<"504">>, <<"wait">>, + <<"remote-server-timeout">>)). + +-define(ERR_RESOURCE_CONSTRAINT, + ?STANZA_ERROR(<<"500">>, <<"wait">>, + <<"resource-constraint">>)). + +-define(ERR_SERVICE_UNAVAILABLE, + ?STANZA_ERROR(<<"503">>, <<"cancel">>, + <<"service-unavailable">>)). + +-define(ERR_SUBSCRIPTION_REQUIRED, + ?STANZA_ERROR(<<"407">>, <<"auth">>, + <<"subscription-required">>)). + +-define(ERR_UNEXPECTED_REQUEST, + ?STANZA_ERROR(<<"400">>, <<"wait">>, + <<"unexpected-request">>)). + +-define(ERR_UNEXPECTED_REQUEST_CANCEL, + ?STANZA_ERROR(<<"401">>, <<"cancel">>, + <<"unexpected-request">>)). + +%-define(ERR_, +% ?STANZA_ERROR("", "", "")). + +-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)). + +-define(ERRT_BAD_REQUEST(Lang, Text), + ?STANZA_ERRORT(<<"400">>, <<"modify">>, + <<"bad-request">>, Lang, Text)). + +-define(ERRT_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)). + +-define(ERRT_FORBIDDEN(Lang, Text), + ?STANZA_ERRORT(<<"403">>, <<"auth">>, <<"forbidden">>, + Lang, Text)). + +-define(ERRT_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)). + +-define(ERRT_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)). + +-define(ERRT_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)). + +-define(ERRT_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)). + +-define(ERRT_RECIPIENT_UNAVAILABLE(Lang, Text), + ?STANZA_ERRORT(<<"404">>, <<"wait">>, + <<"recipient-unavailable">>, Lang, Text)). + +-define(ERRT_REDIRECT(Lang, Text), + ?STANZA_ERRORT(<<"302">>, <<"modify">>, <<"redirect">>, + Lang, Text)). + +-define(ERRT_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)). + +-define(ERRT_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)). + +-define(ERRT_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)). + +-define(ERRT_UNEXPECTED_REQUEST(Lang, Text), + ?STANZA_ERRORT(<<"400">>, <<"wait">>, + <<"unexpected-request">>, Lang, Text)). + +-define(ERR_AUTH_NO_RESOURCE_PROVIDED(Lang), + ?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">>)). + +-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">>, <<"">>)). + +-define(SERR_BAD_NAMESPACE_PREFIX, + ?STREAM_ERROR(<<"bad-namespace-prefix">>, <<"">>)). + +-define(SERR_CONFLICT, + ?STREAM_ERROR(<<"conflict">>, <<"">>)). + +-define(SERR_CONNECTION_TIMEOUT, + ?STREAM_ERROR(<<"connection-timeout">>, <<"">>)). + +-define(SERR_HOST_GONE, + ?STREAM_ERROR(<<"host-gone">>, <<"">>)). + +-define(SERR_HOST_UNKNOWN, + ?STREAM_ERROR(<<"host-unknown">>, <<"">>)). + +-define(SERR_IMPROPER_ADDRESSING, + ?STREAM_ERROR(<<"improper-addressing">>, <<"">>)). + +-define(SERR_INTERNAL_SERVER_ERROR, + ?STREAM_ERROR(<<"internal-server-error">>, <<"">>)). + +-define(SERR_INVALID_FROM, + ?STREAM_ERROR(<<"invalid-from">>, <<"">>)). + +-define(SERR_INVALID_ID, + ?STREAM_ERROR(<<"invalid-id">>, <<"">>)). + +-define(SERR_INVALID_NAMESPACE, + ?STREAM_ERROR(<<"invalid-namespace">>, <<"">>)). + +-define(SERR_INVALID_XML, + ?STREAM_ERROR(<<"invalid-xml">>, <<"">>)). + +-define(SERR_NOT_AUTHORIZED, + ?STREAM_ERROR(<<"not-authorized">>, <<"">>)). + +-define(SERR_POLICY_VIOLATION, + ?STREAM_ERROR(<<"policy-violation">>, <<"">>)). + +-define(SERR_REMOTE_CONNECTION_FAILED, + ?STREAM_ERROR(<<"remote-connection-failed">>, <<"">>)). + +-define(SERR_RESOURSE_CONSTRAINT, + ?STREAM_ERROR(<<"resource-constraint">>, <<"">>)). + +-define(SERR_RESTRICTED_XML, + ?STREAM_ERROR(<<"restricted-xml">>, <<"">>)). + +-define(SERR_SEE_OTHER_HOST(Host), + ?STREAM_ERROR(<<"see-other-host">>, Host)). + +-define(SERR_SYSTEM_SHUTDOWN, + ?STREAM_ERROR(<<"system-shutdown">>, <<"">>)). + +-define(SERR_UNSUPPORTED_ENCODING, + ?STREAM_ERROR(<<"unsupported-encoding">>, <<"">>)). + +-define(SERR_UNSUPPORTED_STANZA_TYPE, + ?STREAM_ERROR(<<"unsupported-stanza-type">>, <<"">>)). + +-define(SERR_UNSUPPORTED_VERSION, + ?STREAM_ERROR(<<"unsupported-version">>, <<"">>)). + +-define(SERR_XML_NOT_WELL_FORMED, + ?STREAM_ERROR(<<"xml-not-well-formed">>, <<"">>)). + +%-define(SERR_, +% ?STREAM_ERROR("", "")). + +-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)). + +-define(SERRT_BAD_NAMESPACE_PREFIX(Lang, Text), + ?STREAM_ERRORT(<<"bad-namespace-prefix">>, <<"">>, Lang, + Text)). + +-define(SERRT_CONFLICT(Lang, Text), + ?STREAM_ERRORT(<<"conflict">>, <<"">>, Lang, Text)). + +-define(SERRT_CONNECTION_TIMEOUT(Lang, Text), + ?STREAM_ERRORT(<<"connection-timeout">>, <<"">>, Lang, + Text)). + +-define(SERRT_HOST_GONE(Lang, Text), + ?STREAM_ERRORT(<<"host-gone">>, <<"">>, Lang, Text)). + +-define(SERRT_HOST_UNKNOWN(Lang, Text), + ?STREAM_ERRORT(<<"host-unknown">>, <<"">>, Lang, Text)). + +-define(SERRT_IMPROPER_ADDRESSING(Lang, Text), + ?STREAM_ERRORT(<<"improper-addressing">>, <<"">>, Lang, + Text)). + +-define(SERRT_INTERNAL_SERVER_ERROR(Lang, Text), + ?STREAM_ERRORT(<<"internal-server-error">>, <<"">>, + Lang, Text)). + +-define(SERRT_INVALID_FROM(Lang, Text), + ?STREAM_ERRORT(<<"invalid-from">>, <<"">>, Lang, Text)). + +-define(SERRT_INVALID_ID(Lang, Text), + ?STREAM_ERRORT(<<"invalid-id">>, <<"">>, Lang, Text)). + +-define(SERRT_INVALID_NAMESPACE(Lang, Text), + ?STREAM_ERRORT(<<"invalid-namespace">>, <<"">>, Lang, + Text)). + +-define(SERRT_INVALID_XML(Lang, Text), + ?STREAM_ERRORT(<<"invalid-xml">>, <<"">>, Lang, Text)). + +-define(SERRT_NOT_AUTHORIZED(Lang, Text), + ?STREAM_ERRORT(<<"not-authorized">>, <<"">>, Lang, + Text)). + +-define(SERRT_POLICY_VIOLATION(Lang, Text), + ?STREAM_ERRORT(<<"policy-violation">>, <<"">>, Lang, + Text)). + +-define(SERRT_REMOTE_CONNECTION_FAILED(Lang, Text), + ?STREAM_ERRORT(<<"remote-connection-failed">>, <<"">>, + Lang, Text)). + +-define(SERRT_RESOURSE_CONSTRAINT(Lang, Text), + ?STREAM_ERRORT(<<"resource-constraint">>, <<"">>, Lang, + Text)). + +-define(SERRT_RESTRICTED_XML(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)). + +-define(SERRT_UNSUPPORTED_ENCODING(Lang, Text), + ?STREAM_ERRORT(<<"unsupported-encoding">>, <<"">>, Lang, + Text)). + +-define(SERRT_UNSUPPORTED_STANZA_TYPE(Lang, Text), + ?STREAM_ERRORT(<<"unsupported-stanza-type">>, <<"">>, + Lang, Text)). + +-define(SERRT_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)). + +-record(jid, {user = <<"">> :: binary(), + server = <<"">> :: binary(), + resource = <<"">> :: binary(), + luser = <<"">> :: binary(), + lserver = <<"">> :: binary(), + lresource = <<"">> :: binary()}). + +-type(jid() :: #jid{}). + +-type(ljid() :: {binary(), binary(), binary()}). + +-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()}. + +-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(xmlelement, {name = "" :: string(), + attrs = [] :: [{string(), string()}], + children = [] :: [{xmlcdata, iodata()} | xmlelement()]}). + +-type xmlelement() :: #xmlelement{}. |