Rename #error{} record to #stanza_error{}

This commit is contained in:
Evgeniy Khramtsov 2016-09-08 17:08:48 +03:00
parent 5ec972b00f
commit c29a48695d
25 changed files with 201 additions and 199 deletions

View File

@ -829,13 +829,13 @@
xmlns = <<>> :: binary()}).
-type sm_failed() :: #sm_failed{}.
-record(error, {type :: 'auth' | 'cancel' | 'continue' | 'modify' | 'wait',
code :: non_neg_integer(),
by = <<>> :: binary(),
reason :: atom() | #gone{} | #redirect{},
text :: #text{},
sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
-type error() :: #error{}.
-record(stanza_error, {type :: 'auth' | 'cancel' | 'continue' | 'modify' | 'wait',
code :: non_neg_integer(),
by = <<>> :: binary(),
reason :: atom() | #gone{} | #redirect{},
text :: #text{},
sub_els = [] :: [xmpp_element() | fxml:xmlel()]}).
-type stanza_error() :: #stanza_error{}.
-record(mix_join, {jid :: jid:jid(),
subscribe = [] :: [binary()]}).
@ -1042,7 +1042,7 @@
register() |
sm_r() |
stat_error() |
error() |
stanza_error() |
stream_error() |
muc_user() |
vcard_adr() |

View File

@ -961,7 +961,7 @@ wait_for_bind(Pkt, StateData) ->
end,
fsm_next_state(wait_for_bind, StateData).
-spec open_session(state()) -> {ok, state()} | {error, error()}.
-spec open_session(state()) -> {ok, state()} | {error, stanza_error()}.
open_session(StateData) ->
U = StateData#state.user,
R = StateData#state.resource,
@ -1568,7 +1568,7 @@ send_element(StateData, #xmlel{} = El) ->
send_element(StateData, Pkt) ->
send_element(StateData, xmpp:encode(Pkt)).
-spec send_error(state(), xmlel() | stanza(), error()) -> ok.
-spec send_error(state(), xmlel() | stanza(), stanza_error()) -> ok.
send_error(StateData, Stanza, Error) ->
Type = xmpp:get_type(Stanza),
if Type == error; Type == result;

View File

@ -487,7 +487,7 @@ process_privacy(#privacy_query{lists = Lists,
Txt = <<"No module is handling this query">>,
Error = {error, xmpp:err_feature_not_implemented(Txt, ?MYLANG)},
case mod_privacy:process_iq_set(Error, IQ) of
{error, #error{reason = Reason}} = Err ->
{error, #stanza_error{reason = Reason}} = Err ->
if Reason == 'item-not-found', Lists == [],
Active == undefined, Default /= undefined ->
%% Failed to set default list because there is no

View File

@ -86,7 +86,7 @@ route(From, To, Packet) ->
%% Route the error packet only if the originating packet is not an error itself.
%% RFC3920 9.3.1
-spec route_error(jid(), jid(), xmlel(), xmlel()) -> ok;
(jid(), jid(), stanza(), error()) -> ok.
(jid(), jid(), stanza(), stanza_error()) -> ok.
route_error(From, To, #xmlel{} = ErrPacket, #xmlel{} = OrigPacket) ->
#xmlel{attrs = Attrs} = OrigPacket,
@ -94,7 +94,7 @@ route_error(From, To, #xmlel{} = ErrPacket, #xmlel{} = OrigPacket) ->
false -> route(From, To, ErrPacket);
true -> ok
end;
route_error(From, To, Packet, #error{} = Err) ->
route_error(From, To, Packet, #stanza_error{} = Err) ->
Type = xmpp:get_type(Packet),
if Type == error; Type == result ->
ok;

View File

@ -541,7 +541,7 @@ send_element(StateData, El) ->
El1 = fix_ns(xmpp:encode(El)),
send_text(StateData, fxml:element_to_binary(El1)).
-spec send_error(state(), xmlel() | stanza(), error()) -> ok.
-spec send_error(state(), xmlel() | stanza(), stanza_error()) -> ok.
send_error(StateData, Stanza, Error) ->
Type = xmpp:get_type(Stanza),
if Type == error; Type == result;

View File

@ -785,13 +785,13 @@ fix_ns(El) ->
El.
%% Bounce a single message (xmlelement)
-spec bounce_element(stanza(), error()) -> ok.
-spec bounce_element(stanza(), stanza_error()) -> ok.
bounce_element(El, Error) ->
From = xmpp:get_from(El),
To = xmpp:get_to(El),
ejabberd_router:route_error(To, From, El, Error).
-spec bounce_queue(queue:queue(), error()) -> ok.
-spec bounce_queue(queue:queue(), stanza_error()) -> ok.
bounce_queue(Q, Error) ->
case queue:out(Q) of
{{value, El}, Q1} ->
@ -807,7 +807,7 @@ cancel_timer(Timer) ->
erlang:cancel_timer(Timer),
receive {timeout, Timer, _} -> ok after 0 -> ok end.
-spec bounce_messages(error()) -> ok.
-spec bounce_messages(stanza_error()) -> ok.
bounce_messages(Error) ->
receive
{send_element, El} ->

View File

@ -308,7 +308,7 @@ send_element(StateData, El) ->
El1 = fix_ns(xmpp:encode(El)),
send_text(StateData, fxml:element_to_binary(El1)).
-spec send_error(state(), xmlel() | stanza(), error()) -> ok.
-spec send_error(state(), xmlel() | stanza(), stanza_error()) -> ok.
send_error(StateData, Stanza, Error) ->
Type = xmpp:get_type(Stanza),
if Type == error; Type == result;

View File

@ -178,7 +178,7 @@
-callback get_items(nodeIdx(), jid(), accessModel(),
boolean(), boolean(), binary(),
undefined | rsm_set()) ->
{result, {[pubsubItem()], undefined | rsm_set()}} | {error, error()}.
{result, {[pubsubItem()], undefined | rsm_set()}} | {error, stanza_error()}.
-callback get_items(nodeIdx(), jid(), undefined | rsm_set()) ->
{result, {[pubsubItem()], undefined | rsm_set()}}.

View File

@ -173,9 +173,9 @@ get_sm_identity(Acc, _From, _To, ?NS_COMMANDS, Lang) ->
get_sm_identity(Acc, _From, _To, _Node, _Lang) -> Acc.
%-------------------------------------------------------------------------
-spec get_local_features({error, error()} | {result, [binary()]} | empty,
-spec get_local_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]} | empty.
{error, stanza_error()} | {result, [binary()]} | empty.
get_local_features(Acc, _From, _To, <<"">>, _Lang) ->
Feats = case Acc of
{result, I} -> I;
@ -238,7 +238,7 @@ process_adhoc_request(#iq{from = From, to = To,
process_adhoc_request(#iq{} = IQ, _Hooks) ->
xmpp:make_error(IQ, xmpp:err_bad_request()).
-spec ping_item(empty | {error, error()} | {result, [disco_item()]},
-spec ping_item(empty | {error, stanza_error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {result, [disco_item()]}.
ping_item(Acc, _From, #jid{server = Server} = _To,
Lang) ->
@ -252,7 +252,7 @@ ping_item(Acc, _From, #jid{server = Server} = _To,
{result, Items ++ Nodes}.
-spec ping_command(adhoc_command(), jid(), jid(), adhoc_command()) ->
adhoc_command() | {error, error()}.
adhoc_command() | {error, stanza_error()}.
ping_command(_Acc, _From, _To,
#adhoc_command{lang = Lang, node = <<"ping">>,
action = Action} = Request) ->

View File

@ -336,8 +336,8 @@ disco_items(Acc, From, #jid{lserver = LServer} = _To, Node, Lang) ->
end.
%%-------------------------------------------------------------------------
-spec announce_items(empty | {error, error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {error, error()} |
-spec announce_items(empty | {error, stanza_error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {error, stanza_error()} |
{result, [disco_item()]} |
empty.
announce_items(Acc, From, #jid{lserver = LServer, server = Server} = _To, Lang) ->
@ -386,7 +386,7 @@ commands_result(Allow, From, To, Request) ->
end.
-spec announce_commands(adhoc_command(), jid(), jid(), adhoc_command()) ->
adhoc_command() | {error, error()}.
adhoc_command() | {error, stanza_error()}.
announce_commands(Acc, From, #jid{lserver = LServer} = To,
#adhoc_command{node = Node} = Request) ->
LNode = tokenize(Node),

View File

@ -72,19 +72,19 @@ depends(_Host, _Opts) ->
process_iq(IQ) ->
xmpp:make_error(IQ, xmpp:err_not_allowed()).
-spec process_iq_get({error, error()} | {result, xmpp_element() | undefined},
-spec process_iq_get({error, stanza_error()} | {result, xmpp_element() | undefined},
iq(), userlist()) ->
{error, error()} | {result, block_list()}.
{error, stanza_error()} | {result, block_list()}.
process_iq_get(_, #iq{lang = Lang, from = From,
sub_els = [#block_list{}]}, _) ->
#jid{luser = LUser, lserver = LServer} = From,
{stop, process_blocklist_get(LUser, LServer, Lang)};
process_iq_get(Acc, _, _) -> Acc.
-spec process_iq_set({error, error()} |
-spec process_iq_set({error, stanza_error()} |
{result, xmpp_element() | undefined} |
{result, xmpp_element() | undefined, userlist()},
iq()) -> {error, error()} |
iq()) -> {error, stanza_error()} |
{result, undefined} |
{result, undefined, userlist()}.
process_iq_set(_, #iq{from = From, lang = Lang, sub_els = [SubEl]}) ->
@ -136,7 +136,7 @@ list_to_blocklist_jids([_ | Items], JIDs) ->
-spec process_blocklist_block(binary(), binary(), [ljid()],
binary()) ->
{error, error()} |
{error, stanza_error()} |
{result, undefined, userlist()}.
process_blocklist_block(LUser, LServer, JIDs, Lang) ->
Filter = fun (List) ->
@ -171,7 +171,7 @@ process_blocklist_block(LUser, LServer, JIDs, Lang) ->
end.
-spec process_blocklist_unblock_all(binary(), binary(), binary()) ->
{error, error()} |
{error, stanza_error()} |
{result, undefined} |
{result, undefined, userlist()}.
process_blocklist_unblock_all(LUser, LServer, Lang) ->
@ -195,7 +195,7 @@ process_blocklist_unblock_all(LUser, LServer, Lang) ->
end.
-spec process_blocklist_unblock(binary(), binary(), [ljid()], binary()) ->
{error, error()} |
{error, stanza_error()} |
{result, undefined} |
{result, undefined, userlist()}.
process_blocklist_unblock(LUser, LServer, JIDs, Lang) ->
@ -240,7 +240,7 @@ broadcast_blocklist_event(LUser, LServer, Event) ->
{broadcast, {blocking, Event}}).
-spec process_blocklist_get(binary(), binary(), binary()) ->
{error, error()} | {result, block_list()}.
{error, stanza_error()} | {result, block_list()}.
process_blocklist_get(LUser, LServer, Lang) ->
Mod = db_mod(LServer),
case Mod:process_blocklist_get(LUser, LServer) of

View File

@ -158,10 +158,10 @@ caps_stream_features(Acc, MyHost) ->
[#caps{hash = <<"sha-1">>, node = ?EJABBERD_URI, version = Hash}|Acc]
end.
-spec disco_features({error, error()} | {result, [binary()]} | empty,
-spec disco_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(),
binary(), binary()) ->
{error, error()} | {result, [binary()]} | empty.
{error, stanza_error()} | {result, [binary()]} | empty.
disco_features(Acc, From, To, Node, Lang) ->
case is_valid_node(Node) of
true ->

View File

@ -270,8 +270,8 @@ get_local_features(Acc, From,
end.
%%%-----------------------------------------------------------------------
-spec adhoc_sm_items(empty | {error, error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {error, error()} |
-spec adhoc_sm_items(empty | {error, stanza_error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {error, stanza_error()} |
{result, [disco_item()]} |
empty.
adhoc_sm_items(Acc, From, #jid{lserver = LServer} = To,
@ -325,8 +325,8 @@ get_user_resources(User, Server) ->
%%%-----------------------------------------------------------------------
-spec adhoc_local_items(empty | {error, error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {error, error()} |
-spec adhoc_local_items(empty | {error, stanza_error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {error, stanza_error()} |
{result, [disco_item()]} |
empty.
adhoc_local_items(Acc, From,
@ -773,7 +773,7 @@ get_stopped_nodes(_Lang) ->
end).
-spec adhoc_local_commands(adhoc_command(), jid(), jid(), adhoc_command()) ->
adhoc_command() | {error, error()}.
adhoc_command() | {error, stanza_error()}.
adhoc_local_commands(Acc, From,
#jid{lserver = LServer} = To,
#adhoc_command{node = Node, lang = Lang} = Request) ->

View File

@ -198,9 +198,9 @@ get_local_identity(Acc, _From, _To, <<"">>, _Lang) ->
get_local_identity(Acc, _From, _To, _Node, _Lang) ->
Acc.
-spec get_local_features({error, error()} | {result, [binary()]} | empty,
-spec get_local_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]}.
{error, stanza_error()} | {result, [binary()]}.
get_local_features({error, _Error} = Acc, _From, _To,
_Node, _Lang) ->
Acc;
@ -222,10 +222,10 @@ get_local_features(Acc, _From, _To, _Node, Lang) ->
{error, xmpp:err_item_not_found(Txt, Lang)}
end.
-spec get_local_services({error, error()} | {result, [disco_item()]} | empty,
-spec get_local_services({error, stanza_error()} | {result, [disco_item()]} | empty,
jid(), jid(),
binary(), binary()) ->
{error, error()} | {result, [disco_item()]}.
{error, stanza_error()} | {result, [disco_item()]}.
get_local_services({error, _Error} = Acc, _From, _To,
_Node, _Lang) ->
Acc;
@ -296,10 +296,10 @@ process_sm_iq_items(#iq{type = get, lang = Lang,
xmpp:make_error(IQ, xmpp:err_subscription_required(Txt, Lang))
end.
-spec get_sm_items({error, error()} | {result, [disco_item()]} | empty,
-spec get_sm_items({error, stanza_error()} | {result, [disco_item()]} | empty,
jid(), jid(),
binary(), binary()) ->
{error, error()} | {result, [disco_item()]}.
{error, stanza_error()} | {result, [disco_item()]}.
get_sm_items({error, _Error} = Acc, _From, _To, _Node,
_Lang) ->
Acc;
@ -383,9 +383,9 @@ get_sm_identity(Acc, _From,
_ -> []
end.
-spec get_sm_features({error, error()} | {result, [binary()]} | empty,
-spec get_sm_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]}.
{error, stanza_error()} | {result, [binary()]}.
get_sm_features(empty, From, To, _Node, Lang) ->
#jid{luser = LFrom, lserver = LSFrom} = From,
#jid{luser = LTo, lserver = LSTo} = To,

View File

@ -601,7 +601,7 @@ create_slot(#state{service_url = undefined,
{ok, [UserStr, RandStr, FileStr]};
deny ->
{error, xmpp:err_service_unavailable()};
#error{} = Error ->
#stanza_error{} = Error ->
{error, Error}
end;
create_slot(#state{service_url = ServiceURL},

View File

@ -679,7 +679,7 @@ adhoc_join(From, To, #adhoc_command{lang = Lang, xdata = X} = Request) ->
end.
-spec adhoc_register(binary(), jid(), jid(), adhoc_command()) ->
adhoc_command() | {error, error()}.
adhoc_command() | {error, stanza_error()}.
adhoc_register(_ServerHost, _From, _To,
#adhoc_command{action = cancel} = Request) ->
xmpp_util:make_adhoc_response(Request, #adhoc_command{status = canceled});

View File

@ -52,7 +52,7 @@ stop(Host) ->
supervisor:delete_child(ejabberd_sup, Proc),
ok.
-spec disco_features({error, error()} | {result, [binary()]} | empty,
-spec disco_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) -> {result, [binary()]}.
disco_features(_Acc, _From, _To, _Node, _Lang) ->
{result, [?NS_MIX_0]}.

View File

@ -1136,8 +1136,8 @@ decide_fate_message(_, _, _) -> continue_delivery.
%% Check if the elements of this error stanza indicate
%% that the sender is a dead participant.
%% If so, return true to kick the participant.
-spec check_error_kick(error()) -> boolean().
check_error_kick(#error{reason = Reason}) ->
-spec check_error_kick(stanza_error()) -> boolean().
check_error_kick(#stanza_error{reason = Reason}) ->
case Reason of
#gone{} -> true;
'internal-server-error' -> true;
@ -1153,8 +1153,8 @@ check_error_kick(#error{reason = Reason}) ->
check_error_kick(undefined) ->
false.
-spec get_error_condition(error()) -> string().
get_error_condition(#error{reason = Reason}) ->
-spec get_error_condition(stanza_error()) -> string().
get_error_condition(#stanza_error{reason = Reason}) ->
case Reason of
#gone{} -> "gone";
#redirect{} -> "redirect";
@ -1673,7 +1673,7 @@ nick_collision(User, Nick, StateData) ->
-spec add_new_user(jid(), binary(), presence() | iq(), state()) ->
state() |
{error, error()} |
{error, stanza_error()} |
{ignore, state()} |
{result, xmpp_element(), state()}.
add_new_user(From, Nick, Packet, StateData) ->
@ -2467,7 +2467,7 @@ can_change_subject(Role, StateData) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Admin stuff
-spec process_iq_admin(jid(), iq(), #state{}) -> {error, error()} |
-spec process_iq_admin(jid(), iq(), #state{}) -> {error, stanza_error()} |
{result, undefined, #state{}} |
{result, muc_admin()}.
process_iq_admin(_From, #iq{lang = Lang, sub_els = [#muc_admin{items = []}]},
@ -2557,7 +2557,7 @@ search_affiliation(Affiliation, StateData) ->
-spec process_admin_items_set(jid(), [muc_item()], binary(),
#state{}) -> {result, undefined, #state{}} |
{error, error()}.
{error, stanza_error()}.
process_admin_items_set(UJID, Items, Lang, StateData) ->
UAffiliation = get_affiliation(UJID, StateData),
URole = get_role(UJID, StateData),
@ -2939,7 +2939,7 @@ get_actor_nick(MJID, StateData) ->
-spec process_iq_owner(jid(), iq(), state()) ->
{result, undefined | muc_owner()} |
{result, undefined | muc_owner(), state() | stop} |
{error, error()}.
{error, stanza_error()}.
process_iq_owner(From, #iq{type = set, lang = Lang,
sub_els = [#muc_owner{destroy = Destroy,
config = Config,
@ -3294,7 +3294,7 @@ get_config(Lang, StateData, From) ->
[StateData, From, Lang]),
#xdata{type = form, title = Title, fields = Fields}.
-spec set_config(xdata(), state(), binary()) -> {error, error()} |
-spec set_config(xdata(), state(), binary()) -> {error, stanza_error()} |
{result, undefined, state()}.
set_config(#xdata{fields = Fields}, StateData, Lang) ->
Options = [{Var, Vals} || #xdata_field{var = Var, values = Vals} <- Fields],
@ -3377,7 +3377,7 @@ get_config_opt_name(Pos) ->
end).
-spec set_xoption([{binary(), [binary()]}], #config{},
binary(), binary()) -> #config{} | {error, error()}.
binary(), binary()) -> #config{} | {error, stanza_error()}.
set_xoption([], Config, _ServerHost, _Lang) -> Config;
set_xoption([{<<"muc#roomconfig_roomname">>, Vals}
| Opts],
@ -3836,7 +3836,7 @@ destroy_room(DEl, StateData) ->
end).
-spec process_iq_disco_info(jid(), iq(), state()) ->
{result, disco_info()} | {error, error()}.
{result, disco_info()} | {error, stanza_error()}.
process_iq_disco_info(_From, #iq{type = set, lang = Lang}, _StateData) ->
Txt = <<"Value 'set' of 'type' attribute is not allowed">>,
{error, xmpp:err_not_allowed(Txt, Lang)};
@ -3901,7 +3901,7 @@ iq_disco_info_extras(Lang, StateData) ->
integer_to_binary(Len), Lang)]}.
-spec process_iq_disco_items(jid(), iq(), state()) ->
{error, error()} | {result, disco_items()}.
{error, stanza_error()} | {result, disco_items()}.
process_iq_disco_items(_From, #iq{type = set, lang = Lang}, _StateData) ->
Txt = <<"Value 'set' of 'type' attribute is not allowed">>,
{error, xmpp:err_not_allowed(Txt, Lang)};
@ -3919,7 +3919,7 @@ process_iq_disco_items(From, #iq{type = get, lang = Lang}, StateData) ->
end
end.
-spec process_iq_captcha(jid(), iq(), state()) -> {error, error()} |
-spec process_iq_captcha(jid(), iq(), state()) -> {error, stanza_error()} |
{result, undefined}.
process_iq_captcha(_From, #iq{type = get, lang = Lang}, _StateData) ->
Txt = <<"Value 'get' of 'type' attribute is not allowed">>,
@ -3939,7 +3939,7 @@ process_iq_captcha(_From, #iq{type = set, lang = Lang, sub_els = [SubEl]},
-spec process_iq_vcard(jid(), iq(), state()) ->
{result, vcard_temp() | xmlel()} |
{result, undefined, state()} |
{error, error()}.
{error, stanza_error()}.
process_iq_vcard(_From, #iq{type = get}, StateData) ->
#state{config = #config{vcard = VCardRaw}} = StateData,
case fxml_stream:parse_element(VCardRaw) of
@ -3962,7 +3962,7 @@ process_iq_vcard(From, #iq{type = set, lang = Lang, sub_els = [SubEl]},
end.
-spec process_iq_mucsub(jid(), iq(), state()) ->
{error, error()} |
{error, stanza_error()} |
{result, undefined | muc_subscribe(), state()} |
{ignore, state()}.
process_iq_mucsub(_From, #iq{type = set, lang = Lang,
@ -4205,7 +4205,7 @@ is_invitation(Packet) ->
(_) -> false
end, Els).
-spec check_invitation(jid(), message(), state()) -> {error, error()} | jid().
-spec check_invitation(jid(), message(), state()) -> {error, stanza_error()} | jid().
check_invitation(From, Packet, StateData) ->
Lang = xmpp:get_lang(Packet),
FAffiliation = get_affiliation(From, StateData),

View File

@ -243,7 +243,7 @@ handle_iq(From, To, Packet, State) ->
end.
-spec process_iq(jid(), iq(), state()) -> {result, xmpp_element()} |
{error, error()} | reply.
{error, stanza_error()} | reply.
process_iq(From, #iq{type = get, lang = Lang,
sub_els = [#disco_info{}]}, State) ->
{result, iq_disco_info(From, Lang, State)};

View File

@ -100,8 +100,8 @@ stop(Host) ->
process_iq(IQ) ->
xmpp:make_error(IQ, xmpp:err_not_allowed()).
-spec process_iq_get({error, error()} | {result, xmpp_element() | undefined},
iq(), userlist()) -> {error, error()} | {result, privacy_query()}.
-spec process_iq_get({error, stanza_error()} | {result, xmpp_element() | undefined},
iq(), userlist()) -> {error, stanza_error()} | {result, privacy_query()}.
process_iq_get(_, #iq{from = From, lang = Lang,
sub_els = [#privacy_query{lists = Lists}]},
#userlist{name = Active}) ->
@ -117,7 +117,7 @@ process_iq_get(_, #iq{from = From, lang = Lang,
end.
-spec process_lists_get(binary(), binary(), binary(), binary()) ->
{error, error()} | {result, privacy_query()}.
{error, stanza_error()} | {result, privacy_query()}.
process_lists_get(LUser, LServer, Active, Lang) ->
Mod = gen_mod:db_mod(LServer, ?MODULE),
case Mod:process_lists_get(LUser, LServer) of
@ -135,7 +135,7 @@ process_lists_get(LUser, LServer, Active, Lang) ->
end.
-spec process_list_get(binary(), binary(), binary(), binary()) ->
{error, error()} | {result, privacy_query()}.
{error, stanza_error()} | {result, privacy_query()}.
process_list_get(LUser, LServer, Name, Lang) ->
Mod = gen_mod:db_mod(LServer, ?MODULE),
case Mod:process_list_get(LUser, LServer, Name) of
@ -214,10 +214,10 @@ decode_value(Type, Value) ->
undefined -> none
end.
-spec process_iq_set({error, error()} |
-spec process_iq_set({error, stanza_error()} |
{result, xmpp_element() | undefined} |
{result, xmpp_element() | undefined, userlist()},
iq()) -> {error, error()} |
iq()) -> {error, stanza_error()} |
{result, undefined, userlist()}.
process_iq_set(_, #iq{from = From, lang = Lang,
sub_els = [#privacy_query{default = Default,
@ -239,7 +239,7 @@ process_iq_set(_, #iq{from = From, lang = Lang,
end.
-spec process_default_set(binary(), binary(), none | binary(),
binary()) -> {error, error()} | {result, undefined}.
binary()) -> {error, stanza_error()} | {result, undefined}.
process_default_set(LUser, LServer, Value, Lang) ->
Mod = gen_mod:db_mod(LServer, ?MODULE),
case Mod:process_default_set(LUser, LServer, Value) of
@ -258,7 +258,7 @@ process_default_set(LUser, LServer, Value, Lang) ->
end.
-spec process_active_set(binary(), binary(), none | binary(), binary()) ->
{error, error()} |
{error, stanza_error()} |
{result, undefined, userlist()}.
process_active_set(_LUser, _LServer, none, _Lang) ->
{result, undefined, #userlist{}};
@ -280,7 +280,7 @@ set_privacy_list(#privacy{us = {_, LServer}} = Privacy) ->
Mod:set_privacy_list(Privacy).
-spec process_lists_set(binary(), binary(), binary(), [privacy_item()],
binary()) -> {error, error()} | {result, undefined}.
binary()) -> {error, stanza_error()} | {result, undefined}.
process_lists_set(LUser, LServer, Name, [], Lang) ->
Mod = gen_mod:db_mod(LServer, ?MODULE),
case Mod:remove_privacy_list(LUser, LServer, Name) of

View File

@ -525,9 +525,9 @@ disco_local_identity(Acc, _From, To, <<>>, _Lang) ->
disco_local_identity(Acc, _From, _To, _Node, _Lang) ->
Acc.
-spec disco_local_features({error, error()} | {result, [binary()]} | empty,
-spec disco_local_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]} | empty.
{error, stanza_error()} | {result, [binary()]} | empty.
disco_local_features(Acc, _From, To, <<>>, _Lang) ->
Host = host(To#jid.lserver),
Feats = case Acc of
@ -538,9 +538,9 @@ disco_local_features(Acc, _From, To, <<>>, _Lang) ->
disco_local_features(Acc, _From, _To, _Node, _Lang) ->
Acc.
-spec disco_local_items({error, error()} | {result, [disco_item()]} | empty,
-spec disco_local_items({error, stanza_error()} | {result, [disco_item()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [disco_item()]} | empty.
{error, stanza_error()} | {result, [disco_item()]} | empty.
disco_local_items(Acc, _From, _To, <<>>, _Lang) -> Acc;
disco_local_items(Acc, _From, _To, _Node, _Lang) -> Acc.
@ -578,9 +578,9 @@ disco_identity(Host, Node, From) ->
_ -> []
end.
-spec disco_sm_features({error, error()} | {result, [binary()]} | empty,
-spec disco_sm_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]}.
{error, stanza_error()} | {result, [binary()]}.
disco_sm_features(empty, From, To, Node, Lang) ->
disco_sm_features({result, []}, From, To, Node, Lang);
disco_sm_features({result, OtherFeatures} = _Acc, From, To, Node, _Lang) ->
@ -612,9 +612,9 @@ disco_features(Host, Node, From) ->
_ -> []
end.
-spec disco_sm_items({error, error()} | {result, [disco_item()]} | empty,
-spec disco_sm_items({error, stanza_error()} | {result, [disco_item()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [disco_item()]}.
{error, stanza_error()} | {result, [disco_item()]}.
disco_sm_items(empty, From, To, Node, Lang) ->
disco_sm_items({result, []}, From, To, Node, Lang);
disco_sm_items({result, OtherItems}, From, To, Node, _Lang) ->
@ -1052,12 +1052,12 @@ command_disco_info(_Host, ?NS_PUBSUB_GET_PENDING, _From) ->
features = [?NS_COMMANDS]}}.
-spec node_disco_info(binary(), binary(), jid()) -> {result, disco_info()} |
{error, error()}.
{error, stanza_error()}.
node_disco_info(Host, Node, From) ->
node_disco_info(Host, Node, From, true, true).
-spec node_disco_info(binary(), binary(), jid(), boolean(), boolean()) ->
{result, disco_info()} | {error, error()}.
{result, disco_info()} | {error, stanza_error()}.
node_disco_info(Host, Node, _From, _Identity, _Features) ->
Action =
fun(#pubsub_node{type = Type, options = Options}) ->
@ -1075,7 +1075,7 @@ node_disco_info(Host, Node, _From, _Identity, _Features) ->
end.
-spec iq_disco_info(binary(), binary(), jid(), binary())
-> {result, disco_info()} | {error, error()}.
-> {result, disco_info()} | {error, stanza_error()}.
iq_disco_info(Host, SNode, From, Lang) ->
[Node | _] = case SNode of
<<>> -> [<<>>];
@ -1105,7 +1105,7 @@ iq_disco_info(Host, SNode, From, Lang) ->
end.
-spec iq_disco_items(host(), binary(), jid(), undefined | rsm_set()) ->
{result, disco_items()} | {error, error()}.
{result, disco_items()} | {error, stanza_error()}.
iq_disco_items(Host, <<>>, From, _RSM) ->
Items =
lists:map(
@ -1193,7 +1193,7 @@ iq_get_vcard(Lang) ->
desc = <<Desc/binary, $\n, Copyright/binary>>}.
-spec iq_pubsub(binary() | ljid(), atom(), iq()) ->
{result, pubsub()} | {error, error()}.
{result, pubsub()} | {error, stanza_error()}.
iq_pubsub(Host, Access, #iq{from = From, type = IQType, lang = Lang,
sub_els = [SubEl]}) ->
case {IQType, SubEl} of
@ -1272,7 +1272,7 @@ iq_pubsub(Host, Access, #iq{from = From, type = IQType, lang = Lang,
end.
-spec iq_pubsub_owner(binary() | ljid(), iq()) -> {result, pubsub_owner() | undefined} |
{error, error()}.
{error, stanza_error()}.
iq_pubsub_owner(Host, #iq{type = IQType, from = From,
lang = Lang, sub_els = [SubEl]}) ->
case {IQType, SubEl} of
@ -1312,7 +1312,7 @@ iq_pubsub_owner(Host, #iq{type = IQType, from = From,
end.
-spec adhoc_request(binary(), binary(), jid(), adhoc_command(),
atom(), [binary()]) -> adhoc_command() | {error, error()}.
atom(), [binary()]) -> adhoc_command() | {error, stanza_error()}.
adhoc_request(Host, _ServerHost, Owner,
#adhoc_command{node = ?NS_PUBSUB_GET_PENDING, lang = Lang,
action = execute, xdata = undefined},
@ -1342,7 +1342,7 @@ adhoc_request(_Host, _ServerHost, _Owner, Other, _Access, _Plugins) ->
{error, xmpp:err_item_not_found()}.
-spec send_pending_node_form(binary(), jid(), binary(),
[binary()]) -> adhoc_command() | {error, error()}.
[binary()]) -> adhoc_command() | {error, stanza_error()}.
send_pending_node_form(Host, Owner, _Lang, Plugins) ->
Filter = fun (Type) ->
lists:member(<<"get-pending">>, plugin_features(Host, Type))
@ -1369,7 +1369,7 @@ send_pending_node_form(Host, Owner, _Lang, Plugins) ->
end.
-spec get_pending_nodes(binary(), jid(), [binary()]) -> {ok, [binary()]} |
{error, error()}.
{error, stanza_error()}.
get_pending_nodes(Host, Owner, Plugins) ->
Tr = fun (Type) ->
case node_call(Host, Type, get_pending_nodes, [Host, Owner]) of
@ -1386,7 +1386,7 @@ get_pending_nodes(Host, Owner, Plugins) ->
%% @doc <p>Send a subscription approval form to Owner for all pending
%% subscriptions on Host and Node.</p>
-spec send_pending_auth_events(binary(), binary(), jid(),
binary()) -> adhoc_command() | {error, error()}.
binary()) -> adhoc_command() | {error, stanza_error()}.
send_pending_auth_events(Host, Node, Owner, Lang) ->
?DEBUG("Sending pending auth events for ~s on ~s:~s",
[jid:to_string(Owner), Host, Node]),
@ -1520,7 +1520,7 @@ handle_authorization_response(Host, From, To, Packet, X) ->
end.
-spec update_auth(binary(), binary(), _, _, jid() | error, boolean(), _) ->
{result, ok} | {error, error()}.
{result, ok} | {error, stanza_error()}.
update_auth(Host, Node, Type, Nidx, Subscriber, Allow, Subs) ->
Sub= lists:filter(fun
({pending, _}) -> true;
@ -1598,12 +1598,12 @@ update_auth(Host, Node, Type, Nidx, Subscriber, Allow, Subs) ->
%%<li>node plugin create_node just sets default affiliation/subscription</li>
%%</ul>
-spec create_node(host(), binary(), binary(), jid(),
binary()) -> {result, pubsub()} | {error, error()}.
binary()) -> {result, pubsub()} | {error, stanza_error()}.
create_node(Host, ServerHost, Node, Owner, Type) ->
create_node(Host, ServerHost, Node, Owner, Type, all, []).
-spec create_node(host(), binary(), binary(), jid(), binary(),
atom(), [{binary(), [binary()]}]) -> {result, pubsub()} | {error, error()}.
atom(), [{binary(), [binary()]}]) -> {result, pubsub()} | {error, stanza_error()}.
create_node(Host, ServerHost, <<>>, Owner, Type, Access, Configuration) ->
case lists:member(<<"instant-nodes">>, plugin_features(Host, Type)) of
true ->
@ -1693,7 +1693,7 @@ create_node(Host, ServerHost, Node, Owner, GivenType, Access, Configuration) ->
%%<li>The node is the root collection node, which cannot be deleted.</li>
%%<li>The specified node does not exist.</li>
%%</ul>
-spec delete_node(host(), binary(), jid()) -> {result, pubsub_owner()} | {error, error()}.
-spec delete_node(host(), binary(), jid()) -> {result, pubsub_owner()} | {error, stanza_error()}.
delete_node(_Host, <<>>, _Owner) ->
{error, xmpp:err_not_allowed(<<"No node specified">>, ?MYLANG)};
delete_node(Host, Node, Owner) ->
@ -1770,7 +1770,7 @@ delete_node(Host, Node, Owner) ->
%%<li>The node does not exist.</li>
%%</ul>
-spec subscribe_node(host(), binary(), jid(), binary(), [{binary(), [binary()]}]) ->
{result, pubsub()} | {error, error()}.
{result, pubsub()} | {error, stanza_error()}.
subscribe_node(Host, Node, From, JID, Configuration) ->
SubModule = subscription_plugin(Host),
SubOpts = case SubModule:parse_options_xform(Configuration) of
@ -1874,7 +1874,7 @@ subscribe_node(Host, Node, From, JID, Configuration) ->
%%<li>The request specifies a subscription ID that is not valid or current.</li>
%%</ul>
-spec unsubscribe_node(host(), binary(), jid(), jid(), binary()) ->
{result, undefined} | {error, error()}.
{result, undefined} | {error, stanza_error()}.
unsubscribe_node(Host, Node, From, JID, SubId) ->
Subscriber = jid:tolower(JID),
Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
@ -1901,7 +1901,7 @@ unsubscribe_node(Host, Node, From, JID, SubId) ->
%%<li>The request does not match the node configuration.</li>
%%</ul>
-spec publish_item(host(), binary(), binary(), jid(), binary(),
[xmlel()]) -> {result, pubsub()} | {error, error()}.
[xmlel()]) -> {result, pubsub()} | {error, stanza_error()}.
publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload) ->
publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload, [], all).
publish_item(Host, ServerHost, Node, Publisher, <<>>, Payload, PubOpts, Access) ->
@ -1984,7 +1984,7 @@ publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload, PubOpts, Access
{result, Reply};
{result, {_, Result}} ->
{result, Result};
{error, #error{reason = 'item-not-found'}} ->
{error, #stanza_error{reason = 'item-not-found'}} ->
Type = select_type(ServerHost, Host, Node),
case lists:member(<<"auto-create">>, plugin_features(Host, Type)) of
true ->
@ -2015,7 +2015,7 @@ publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload, PubOpts, Access
%%<li>The service does not support the deletion of items.</li>
%%</ul>
-spec delete_item(host(), binary(), jid(), binary()) -> {result, undefined} |
{error, error()}.
{error, stanza_error()}.
delete_item(Host, Node, Publisher, ItemId) ->
delete_item(Host, Node, Publisher, ItemId, false).
delete_item(_, <<>>, _, _, _) ->
@ -2071,7 +2071,7 @@ delete_item(Host, Node, Publisher, ItemId, ForceNotify) ->
%%<li>The specified node does not exist.</li>
%%</ul>
-spec purge_node(mod_pubsub:host(), binary(), jid()) -> {result, undefined} |
{error, error()}.
{error, stanza_error()}.
purge_node(Host, Node, Owner) ->
Action = fun (#pubsub_node{options = Options, type = Type, id = Nidx}) ->
Features = plugin_features(Host, Type),
@ -2117,7 +2117,7 @@ purge_node(Host, Node, Owner) ->
%% to read the items.
-spec get_items(host(), binary(), jid(), binary(),
binary(), [binary()], undefined | rsm_set()) ->
{result, pubsub()} | {error, error()}.
{result, pubsub()} | {error, stanza_error()}.
get_items(Host, Node, From, SubId, SMaxItems, ItemIds, RSM) ->
MaxItems = if SMaxItems == undefined ->
case get_max_items_node(Host) of
@ -2270,7 +2270,7 @@ dispatch_items(From, To, _Node, Stanza) ->
%% @doc <p>Return the list of affiliations as an XMPP response.</p>
-spec get_affiliations(host(), binary(), jid(), [binary()]) ->
{result, pubsub()} | {error, error()}.
{result, pubsub()} | {error, stanza_error()}.
get_affiliations(Host, Node, JID, Plugins) when is_list(Plugins) ->
Result =
lists:foldl(
@ -2310,7 +2310,7 @@ get_affiliations(Host, Node, JID, Plugins) when is_list(Plugins) ->
end.
-spec get_affiliations(host(), binary(), jid()) ->
{result, pubsub_owner()} | {error, error()}.
{result, pubsub_owner()} | {error, stanza_error()}.
get_affiliations(Host, Node, JID) ->
Action =
fun(#pubsub_node{type = Type, id = Nidx}) ->
@ -2342,7 +2342,7 @@ get_affiliations(Host, Node, JID) ->
end.
-spec set_affiliations(host(), binary(), jid(), [ps_affiliation()]) ->
{result, undefined} | {error, error()}.
{result, undefined} | {error, stanza_error()}.
set_affiliations(Host, Node, From, Affs) ->
Owner = jid:tolower(jid:remove_resource(From)),
Action =
@ -2396,7 +2396,7 @@ set_affiliations(Host, Node, From, Affs) ->
end.
-spec get_options(binary(), binary(), jid(), binary(), binary()) ->
{result, xdata()} | {error, error()}.
{result, xdata()} | {error, stanza_error()}.
get_options(Host, Node, JID, SubId, Lang) ->
Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
case lists:member(<<"subscription-options">>, plugin_features(Host, Type)) of
@ -2413,7 +2413,7 @@ get_options(Host, Node, JID, SubId, Lang) ->
end.
-spec get_options_helper(binary(), jid(), binary(), binary(), _, binary(),
binary()) -> {result, pubsub()} | {error, error()}.
binary()) -> {result, pubsub()} | {error, stanza_error()}.
get_options_helper(Host, JID, Lang, Node, Nidx, SubId, Type) ->
Subscriber = jid:tolower(JID),
{result, Subs} = node_call(Host, Type, get_subscriptions, [Nidx, Subscriber]),
@ -2454,7 +2454,7 @@ read_sub(Host, Node, Nidx, Subscriber, SubId, Lang) ->
-spec set_options(binary(), binary(), jid(), binary(),
[{binary(), [binary()]}]) ->
{result, undefined} | {error, error()}.
{result, undefined} | {error, stanza_error()}.
set_options(Host, Node, JID, SubId, Configuration) ->
Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
case lists:member(<<"subscription-options">>, plugin_features(Host, Type)) of
@ -2472,7 +2472,7 @@ set_options(Host, Node, JID, SubId, Configuration) ->
-spec set_options_helper(binary(), [{binary(), [binary()]}], jid(),
nodeIdx(), binary(), binary()) ->
{result, undefined} | {error, error()}.
{result, undefined} | {error, stanza_error()}.
set_options_helper(Host, Configuration, JID, Nidx, SubId, Type) ->
SubModule = subscription_plugin(Host),
SubOpts = case SubModule:parse_options_xform(Configuration) of
@ -2494,7 +2494,7 @@ set_options_helper(Host, Configuration, JID, Nidx, SubId, Type) ->
end.
-spec write_sub(binary(), nodeIdx(), ljid(), binary(), _) -> {result, undefined} |
{error, error()}.
{error, stanza_error()}.
write_sub(_Host, _Nidx, _Subscriber, _SubId, invalid) ->
{error, extended_error(xmpp:err_bad_request(), err_invalid_options())};
write_sub(_Host, _Nidx, _Subscriber, _SubId, []) ->
@ -2509,7 +2509,7 @@ write_sub(Host, Nidx, Subscriber, SubId, Options) ->
%% @doc <p>Return the list of subscriptions as an XMPP response.</p>
-spec get_subscriptions(host(), binary(), jid(), [binary()]) ->
{result, pubsub()} | {error, error()}.
{result, pubsub()} | {error, stanza_error()}.
get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
Result = lists:foldl(fun (Type, {Status, Acc}) ->
Features = plugin_features(Host, Type),
@ -2576,7 +2576,7 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
end.
-spec get_subscriptions(host(), binary(), jid()) -> {result, pubsub_owner()} |
{error, error()}.
{error, stanza_error()}.
get_subscriptions(Host, Node, JID) ->
Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
Features = plugin_features(Host, Type),
@ -2633,7 +2633,7 @@ get_subscriptions_for_send_last(_Host, _PType, _, _JID, _LJID, _BJID) ->
[].
-spec set_subscriptions(host(), binary(), jid(), [ps_subscription()]) ->
{result, undefined} | {error, error()}.
{result, undefined} | {error, stanza_error()}.
set_subscriptions(Host, Node, From, Entities) ->
Owner = jid:tolower(jid:remove_resource(From)),
Notify = fun(#ps_subscription{jid = JID, type = Sub}) ->
@ -3163,7 +3163,7 @@ user_resource(_, _, Resource) ->
%%%%%%% Configuration handling
-spec get_configure(host(), binary(), binary(), jid(),
binary()) -> {error, error()} | {result, pubsub_owner()}.
binary()) -> {error, stanza_error()} | {result, pubsub_owner()}.
get_configure(Host, ServerHost, Node, From, Lang) ->
Action = fun (#pubsub_node{options = Options, type = Type, id = Nidx}) ->
case node_call(Host, Type, get_affiliation, [Nidx, From]) of
@ -3381,7 +3381,7 @@ get_configure_xfields(_Type, Options, Lang, Groups) ->
%%<li>The specified node does not exist.</li>
%%</ul>
-spec set_configure(host(), binary(), jid(), [{binary(), [binary()]}],
binary()) -> {result, undefined} | {error, error()}.
binary()) -> {result, undefined} | {error, stanza_error()}.
set_configure(_Host, <<>>, _From, _Config, _Lang) ->
{error, extended_error(xmpp:err_bad_request(), err_nodeid_required())};
set_configure(Host, Node, From, Config, Lang) ->
@ -3851,9 +3851,9 @@ transaction_retry(Host, ServerHost, Fun, Trans, DBType, Count) ->
%%%% helpers
%% Add pubsub-specific error element
-spec extended_error(error(), ps_error()) -> error().
-spec extended_error(stanza_error(), ps_error()) -> stanza_error().
extended_error(StanzaErr, PubSubErr) ->
StanzaErr#error{sub_els = [PubSubErr]}.
StanzaErr#stanza_error{sub_els = [PubSubErr]}.
-spec err_closed_node() -> ps_error().
err_closed_node() ->
@ -4033,7 +4033,7 @@ purge_offline(LJID) ->
?DEBUG("on_user_offline ~p", [Error])
end.
-spec purge_offline(host(), ljid(), binary()) -> ok | {error, error()}.
-spec purge_offline(host(), ljid(), binary()) -> ok | {error, stanza_error()}.
purge_offline(Host, LJID, Node) ->
Nidx = Node#pubsub_node.id,
Type = Node#pubsub_node.type,

View File

@ -150,9 +150,9 @@ do_route(From, To, #iq{} = IQ) ->
do_route(_, _, _) ->
ok.
-spec get_sm_features({error, error()} | empty | {result, [binary()]},
-spec get_sm_features({error, stanza_error()} | empty | {result, [binary()]},
jid(), jid(), binary(), binary()) ->
{error, error()} | empty | {result, [binary()]}.
{error, stanza_error()} | empty | {result, [binary()]}.
get_sm_features({error, _Error} = Acc, _From, _To,
_Node, _Lang) ->
Acc;
@ -230,9 +230,9 @@ process_search(#iq{type = set, lang = Lang} = IQ) ->
Txt = <<"Incorrect data form">>,
xmpp:make_error(IQ, xmpp:err_bad_request(Txt, Lang)).
-spec disco_items({error, error()} | {result, [disco_item()]} | empty,
-spec disco_items({error, stanza_error()} | {result, [disco_item()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [disco_item()]}.
{error, stanza_error()} | {result, [disco_item()]}.
disco_items(empty, _From, _To, <<"">>, _Lang) ->
{result, []};
disco_items(empty, _From, _To, _Node, Lang) ->
@ -240,9 +240,9 @@ disco_items(empty, _From, _To, _Node, Lang) ->
disco_items(Acc, _From, _To, _Node, _Lang) ->
Acc.
-spec disco_features({error, error()} | {result, [binary()]} | empty,
-spec disco_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]}.
{error, stanza_error()} | {result, [binary()]}.
disco_features({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
Acc;
disco_features(Acc, _From, _To, <<"">>, _Lang) ->

View File

@ -88,10 +88,10 @@ make_iq_result(#iq{type = Type, from = From, to = To} = IQ, El)
end,
IQ#iq{type = result, to = From, from = To, sub_els = SubEls}.
-spec make_error(message(), error() | xmlel()) -> message();
(presence(), error() | xmlel()) -> presence();
(iq(), error() | xmlel()) -> iq();
(xmlel(), error() | xmlel()) -> xmlel().
-spec make_error(message(), stanza_error() | xmlel()) -> message();
(presence(), stanza_error() | xmlel()) -> presence();
(iq(), stanza_error() | xmlel()) -> iq();
(xmlel(), stanza_error() | xmlel()) -> xmlel().
make_error(#message{type = Type, from = From, to = To, sub_els = Els} = Msg,
Err) when Type /= error ->
Msg#message{type = error, from = To, to = From, sub_els = Els ++ [Err]};
@ -150,9 +150,9 @@ get_to(#iq{to = J}) -> J;
get_to(#message{to = J}) -> J;
get_to(#presence{to = J}) -> J.
-spec get_error(iq() | message() | presence()) -> undefined | error().
-spec get_error(iq() | message() | presence()) -> undefined | stanza_error().
get_error(Stanza) ->
case get_subtag(Stanza, #error{}) of
case get_subtag(Stanza, #stanza_error{}) of
false -> undefined;
Error -> Error
end.
@ -206,9 +206,9 @@ set_from_to(#iq{} = IQ, F, T) -> IQ#iq{from = F, to = T};
set_from_to(#message{} = Msg, F, T) -> Msg#message{from = F, to = T};
set_from_to(#presence{} = Pres, F, T) -> Pres#presence{from = F, to = T}.
-spec set_error(iq(), error()) -> iq();
(message(), error()) -> message();
(presence(), error()) -> presence().
-spec set_error(iq(), stanza_error()) -> iq();
(message(), stanza_error()) -> message();
(presence(), stanza_error()) -> presence().
set_error(Stanza, E) -> set_subtag(Stanza, E).
-spec set_els(iq(), [xmpp_element() | xmlel()]) -> iq();
@ -383,199 +383,199 @@ pp(Term) ->
%%%===================================================================
%%% Functions to construct general XMPP errors
%%%===================================================================
-spec err_bad_request() -> error().
-spec err_bad_request() -> stanza_error().
err_bad_request() ->
err(modify, 'bad-request', 400).
-spec err_bad_request(binary(), binary()) -> error().
-spec err_bad_request(binary(), binary()) -> stanza_error().
err_bad_request(Text, Lang) ->
err(modify, 'bad-request', 400, Text, Lang).
-spec err_conflict() -> error().
-spec err_conflict() -> stanza_error().
err_conflict() ->
err(cancel, 'conflict', 409).
-spec err_conflict(binary(), binary()) -> error().
-spec err_conflict(binary(), binary()) -> stanza_error().
err_conflict(Text, Lang) ->
err(cancel, 'conflict', 409, Text, Lang).
-spec err_feature_not_implemented() -> error().
-spec err_feature_not_implemented() -> stanza_error().
err_feature_not_implemented() ->
err(cancel, 'feature-not-implemented', 501).
-spec err_feature_not_implemented(binary(), binary()) -> error().
-spec err_feature_not_implemented(binary(), binary()) -> stanza_error().
err_feature_not_implemented(Text, Lang) ->
err(cancel, 'feature-not-implemented', 501, Text, Lang).
-spec err_forbidden() -> error().
-spec err_forbidden() -> stanza_error().
err_forbidden() ->
err(auth, 'forbidden', 403).
-spec err_forbidden(binary(), binary()) -> error().
-spec err_forbidden(binary(), binary()) -> stanza_error().
err_forbidden(Text, Lang) ->
err(auth, 'forbidden', 403, Text, Lang).
%% RFC 6120 says error type SHOULD be "cancel".
%% RFC 3920 and XEP-0082 says it SHOULD be "modify".
-spec err_gone() -> error().
-spec err_gone() -> stanza_error().
err_gone() ->
err(modify, 'gone', 302).
-spec err_gone(binary(), binary()) -> error().
-spec err_gone(binary(), binary()) -> stanza_error().
err_gone(Text, Lang) ->
err(modify, 'gone', 302, Text, Lang).
%% RFC 6120 sasy error type SHOULD be "cancel".
%% RFC 3920 and XEP-0082 says it SHOULD be "wait".
-spec err_internal_server_error() -> error().
-spec err_internal_server_error() -> stanza_error().
err_internal_server_error() ->
err(wait, 'internal-server-error', 500).
-spec err_internal_server_error(binary(), binary()) -> error().
-spec err_internal_server_error(binary(), binary()) -> stanza_error().
err_internal_server_error(Text, Lang) ->
err(wait, 'internal-server-error', 500, Text, Lang).
-spec err_item_not_found() -> error().
-spec err_item_not_found() -> stanza_error().
err_item_not_found() ->
err(cancel, 'item-not-found', 404).
-spec err_item_not_found(binary(), binary()) -> error().
-spec err_item_not_found(binary(), binary()) -> stanza_error().
err_item_not_found(Text, Lang) ->
err(cancel, 'item-not-found', 404, Text, Lang).
-spec err_jid_malformed() -> error().
-spec err_jid_malformed() -> stanza_error().
err_jid_malformed() ->
err(modify, 'jid-malformed', 400).
-spec err_jid_malformed(binary(), binary()) -> error().
-spec err_jid_malformed(binary(), binary()) -> stanza_error().
err_jid_malformed(Text, Lang) ->
err(modify, 'jid-malformed', 400, Text, Lang).
-spec err_not_acceptable() -> error().
-spec err_not_acceptable() -> stanza_error().
err_not_acceptable() ->
err(modify, 'not-acceptable', 406).
-spec err_not_acceptable(binary(), binary()) -> error().
-spec err_not_acceptable(binary(), binary()) -> stanza_error().
err_not_acceptable(Text, Lang) ->
err(modify, 'not-acceptable', 406, Text, Lang).
-spec err_not_allowed() -> error().
-spec err_not_allowed() -> stanza_error().
err_not_allowed() ->
err(cancel, 'not-allowed', 405).
-spec err_not_allowed(binary(), binary()) -> error().
-spec err_not_allowed(binary(), binary()) -> stanza_error().
err_not_allowed(Text, Lang) ->
err(cancel, 'not-allowed', 405, Text, Lang).
-spec err_not_authorized() -> error().
-spec err_not_authorized() -> stanza_error().
err_not_authorized() ->
err(auth, 'not-authorized', 401).
-spec err_not_authorized(binary(), binary()) -> error().
-spec err_not_authorized(binary(), binary()) -> stanza_error().
err_not_authorized(Text, Lang) ->
err(auth, 'not-authorized', 401, Text, Lang).
-spec err_payment_required() -> error().
-spec err_payment_required() -> stanza_error().
err_payment_required() ->
err(auth, 'not-authorized', 402).
-spec err_payment_required(binary(), binary()) -> error().
-spec err_payment_required(binary(), binary()) -> stanza_error().
err_payment_required(Text, Lang) ->
err(auth, 'not-authorized', 402, Text, Lang).
%% <policy-violation/> is defined in neither RFC 3920 nor XEP-0086.
%% We choose '403' error code (as in <forbidden/>).
-spec err_policy_violation() -> error().
-spec err_policy_violation() -> stanza_error().
err_policy_violation() ->
err(modify, 'policy-violation', 403).
-spec err_policy_violation(binary(), binary()) -> error().
-spec err_policy_violation(binary(), binary()) -> stanza_error().
err_policy_violation(Text, Lang) ->
err(modify, 'policy-violation', 403, Text, Lang).
-spec err_recipient_unavailable() -> error().
-spec err_recipient_unavailable() -> stanza_error().
err_recipient_unavailable() ->
err(wait, 'recipient-unavailable', 404).
-spec err_recipient_unavailable(binary(), binary()) -> error().
-spec err_recipient_unavailable(binary(), binary()) -> stanza_error().
err_recipient_unavailable(Text, Lang) ->
err(wait, 'recipient-unavailable', 404, Text, Lang).
-spec err_redirect() -> error().
-spec err_redirect() -> stanza_error().
err_redirect() ->
err(modify, 'redirect', 302).
-spec err_redirect(binary(), binary()) -> error().
-spec err_redirect(binary(), binary()) -> stanza_error().
err_redirect(Text, Lang) ->
err(modify, 'redirect', 302, Text, Lang).
-spec err_registration_required() -> error().
-spec err_registration_required() -> stanza_error().
err_registration_required() ->
err(auth, 'registration-required', 407).
-spec err_registration_required(binary(), binary()) -> error().
-spec err_registration_required(binary(), binary()) -> stanza_error().
err_registration_required(Text, Lang) ->
err(auth, 'registration-required', 407, Text, Lang).
-spec err_remote_server_not_found() -> error().
-spec err_remote_server_not_found() -> stanza_error().
err_remote_server_not_found() ->
err(cancel, 'remote-server-not-found', 404).
-spec err_remote_server_not_found(binary(), binary()) -> error().
-spec err_remote_server_not_found(binary(), binary()) -> stanza_error().
err_remote_server_not_found(Text, Lang) ->
err(cancel, 'remote-server-not-found', 404, Text, Lang).
-spec err_remote_server_timeout() -> error().
-spec err_remote_server_timeout() -> stanza_error().
err_remote_server_timeout() ->
err(wait, 'remote-server-timeout', 504).
-spec err_remote_server_timeout(binary(), binary()) -> error().
-spec err_remote_server_timeout(binary(), binary()) -> stanza_error().
err_remote_server_timeout(Text, Lang) ->
err(wait, 'remote-server-timeout', 504, Text, Lang).
-spec err_resource_constraint() -> error().
-spec err_resource_constraint() -> stanza_error().
err_resource_constraint() ->
err(wait, 'resource-constraint', 500).
-spec err_resource_constraint(binary(), binary()) -> error().
-spec err_resource_constraint(binary(), binary()) -> stanza_error().
err_resource_constraint(Text, Lang) ->
err(wait, 'resource-constraint', 500, Text, Lang).
-spec err_service_unavailable() -> error().
-spec err_service_unavailable() -> stanza_error().
err_service_unavailable() ->
err(cancel, 'service-unavailable', 503).
-spec err_service_unavailable(binary(), binary()) -> error().
-spec err_service_unavailable(binary(), binary()) -> stanza_error().
err_service_unavailable(Text, Lang) ->
err(cancel, 'service-unavailable', 503, Text, Lang).
-spec err_subscription_required() -> error().
-spec err_subscription_required() -> stanza_error().
err_subscription_required() ->
err(auth, 'subscription-required', 407).
-spec err_subscription_required(binary(), binary()) -> error().
-spec err_subscription_required(binary(), binary()) -> stanza_error().
err_subscription_required(Text, Lang) ->
err(auth, 'subscription-required', 407, Text, Lang).
%% No error type is defined for <undefined-confition/>.
%% Let user provide the type.
-spec err_undefined_condition('auth' | 'cancel' | 'continue' |
'modify' | 'wait') -> error().
'modify' | 'wait') -> stanza_error().
err_undefined_condition(Type) ->
err(Type, 'undefined-condition', 500).
-spec err_undefined_condition('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
binary(), binary()) -> error().
binary(), binary()) -> stanza_error().
err_undefined_condition(Type, Text, Lang) ->
err(Type, 'undefined-condition', 500, Text, Lang).
%% RFC 6120 says error type SHOULD be "wait" or "modify".
%% RFC 3920 and XEP-0082 says it SHOULD be "wait".
-spec err_unexpected_request() -> error().
-spec err_unexpected_request() -> stanza_error().
err_unexpected_request() ->
err(wait, 'unexpected-request', 400).
-spec err_unexpected_request(binary(), binary()) -> error().
-spec err_unexpected_request(binary(), binary()) -> stanza_error().
err_unexpected_request(Text, Lang) ->
err(wait, 'unexpected-request', 400, Text, Lang).
@ -786,17 +786,17 @@ serr_unsupported_version(Text, Lang) ->
%%% Internal functions
%%%===================================================================
-spec err('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
atom() | gone() | redirect(), non_neg_integer()) -> error().
atom() | gone() | redirect(), non_neg_integer()) -> stanza_error().
err(Type, Reason, Code) ->
#error{type = Type, reason = Reason, code = Code}.
#stanza_error{type = Type, reason = Reason, code = Code}.
-spec err('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
atom() | gone() | redirect(), non_neg_integer(),
binary(), binary()) -> error().
binary(), binary()) -> stanza_error().
err(Type, Reason, Code, Text, Lang) ->
#error{type = Type, reason = Reason, code = Code,
text = #text{lang = Lang,
data = translate:translate(Lang, Text)}}.
#stanza_error{type = Type, reason = Reason, code = Code,
text = #text{lang = Lang,
data = translate:translate(Lang, Text)}}.
-spec serr(atom() | 'see-other-host'()) -> stream_error().
serr(Reason) ->

View File

@ -2567,7 +2567,7 @@ encode({redirect, _} = Redirect) ->
encode_error_redirect(Redirect,
[{<<"xmlns">>,
<<"urn:ietf:params:xml:ns:xmpp-stanzas">>}]);
encode({error, _, _, _, _, _, _} = Error) ->
encode({stanza_error, _, _, _, _, _, _} = Error) ->
encode_error(Error,
[{<<"xmlns">>, <<"jabber:client">>}]);
encode({bind, _, _} = Bind) ->
@ -3176,7 +3176,6 @@ get_name({delay, _, _, _}) -> <<"delay">>;
get_name({disco_info, _, _, _, _}) -> <<"query">>;
get_name({disco_item, _, _, _}) -> <<"item">>;
get_name({disco_items, _, _, _}) -> <<"query">>;
get_name({error, _, _, _, _, _, _}) -> <<"error">>;
get_name({expire, _, _}) -> <<"x">>;
get_name({feature_csi, _}) -> <<"csi">>;
get_name({feature_register}) -> <<"register">>;
@ -3329,6 +3328,8 @@ get_name({sm_failed, _, _, _}) -> <<"failed">>;
get_name({sm_r, _}) -> <<"r">>;
get_name({sm_resume, _, _, _}) -> <<"resume">>;
get_name({sm_resumed, _, _, _}) -> <<"resumed">>;
get_name({stanza_error, _, _, _, _, _, _}) ->
<<"error">>;
get_name({stanza_id, _, _}) -> <<"stanza-id">>;
get_name({starttls, _}) -> <<"starttls">>;
get_name({starttls_failure}) -> <<"failure">>;
@ -3441,8 +3442,6 @@ get_ns({disco_item, _, _, _}) ->
<<"http://jabber.org/protocol/disco#items">>;
get_ns({disco_items, _, _, _}) ->
<<"http://jabber.org/protocol/disco#items">>;
get_ns({error, _, _, _, _, _, _}) ->
<<"jabber:client">>;
get_ns({expire, _, _}) -> <<"jabber:x:expire">>;
get_ns({feature_csi, Xmlns}) -> Xmlns;
get_ns({feature_register}) ->
@ -3633,6 +3632,8 @@ get_ns({sm_failed, _, _, Xmlns}) -> Xmlns;
get_ns({sm_r, Xmlns}) -> Xmlns;
get_ns({sm_resume, _, _, Xmlns}) -> Xmlns;
get_ns({sm_resumed, _, _, Xmlns}) -> Xmlns;
get_ns({stanza_error, _, _, _, _, _, _}) ->
<<"jabber:client">>;
get_ns({stanza_id, _, _}) -> <<"urn:xmpp:sid:0">>;
get_ns({starttls, _}) ->
<<"urn:ietf:params:xml:ns:xmpp-tls">>;
@ -3778,7 +3779,8 @@ pp(presence, 9) ->
sub_els];
pp(gone, 1) -> [uri];
pp(redirect, 1) -> [uri];
pp(error, 6) -> [type, code, by, reason, text, sub_els];
pp(stanza_error, 6) ->
[type, code, by, reason, text, sub_els];
pp(bind, 2) -> [jid, resource];
pp(legacy_auth, 4) ->
[username, password, digest, resource];
@ -25595,7 +25597,7 @@ decode_error(__TopXMLNS, __IgnoreEls,
{Type, Code, By} = decode_error_attrs(__TopXMLNS,
_attrs, undefined, undefined,
undefined),
{error, Type, Code, By, Reason, Text, __Els}.
{stanza_error, Type, Code, By, Reason, Text, __Els}.
decode_error_els(__TopXMLNS, __IgnoreEls, [], Text,
Reason, __Els) ->
@ -25965,8 +25967,8 @@ decode_error_attrs(__TopXMLNS, [], Type, Code, By) ->
decode_error_attr_code(__TopXMLNS, Code),
decode_error_attr_by(__TopXMLNS, By)}.
encode_error({error, Type, Code, By, Reason, Text,
__Els},
encode_error({stanza_error, Type, Code, By, Reason,
Text, __Els},
_xmlns_attrs) ->
_els = [encode(_el) || _el <- __Els] ++
lists:reverse('encode_error_$text'(Text,

View File

@ -528,7 +528,7 @@
-xml(error,
#elem{name = <<"error">>,
xmlns = <<"jabber:client">>,
result = {error, '$type', '$code', '$by', '$reason', '$text', '$_els'},
result = {stanza_error, '$type', '$code', '$by', '$reason', '$text', '$_els'},
attrs = [#attr{name = <<"type">>,
label = '$type',
required = true,