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

View File

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

View File

@ -487,7 +487,7 @@ process_privacy(#privacy_query{lists = Lists,
Txt = <<"No module is handling this query">>, Txt = <<"No module is handling this query">>,
Error = {error, xmpp:err_feature_not_implemented(Txt, ?MYLANG)}, Error = {error, xmpp:err_feature_not_implemented(Txt, ?MYLANG)},
case mod_privacy:process_iq_set(Error, IQ) of 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 == [], if Reason == 'item-not-found', Lists == [],
Active == undefined, Default /= undefined -> Active == undefined, Default /= undefined ->
%% Failed to set default list because there is no %% 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. %% Route the error packet only if the originating packet is not an error itself.
%% RFC3920 9.3.1 %% RFC3920 9.3.1
-spec route_error(jid(), jid(), xmlel(), xmlel()) -> ok; -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) -> route_error(From, To, #xmlel{} = ErrPacket, #xmlel{} = OrigPacket) ->
#xmlel{attrs = Attrs} = OrigPacket, #xmlel{attrs = Attrs} = OrigPacket,
@ -94,7 +94,7 @@ route_error(From, To, #xmlel{} = ErrPacket, #xmlel{} = OrigPacket) ->
false -> route(From, To, ErrPacket); false -> route(From, To, ErrPacket);
true -> ok true -> ok
end; end;
route_error(From, To, Packet, #error{} = Err) -> route_error(From, To, Packet, #stanza_error{} = Err) ->
Type = xmpp:get_type(Packet), Type = xmpp:get_type(Packet),
if Type == error; Type == result -> if Type == error; Type == result ->
ok; ok;

View File

@ -541,7 +541,7 @@ send_element(StateData, El) ->
El1 = fix_ns(xmpp:encode(El)), El1 = fix_ns(xmpp:encode(El)),
send_text(StateData, fxml:element_to_binary(El1)). 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) -> send_error(StateData, Stanza, Error) ->
Type = xmpp:get_type(Stanza), Type = xmpp:get_type(Stanza),
if Type == error; Type == result; if Type == error; Type == result;

View File

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

View File

@ -308,7 +308,7 @@ send_element(StateData, El) ->
El1 = fix_ns(xmpp:encode(El)), El1 = fix_ns(xmpp:encode(El)),
send_text(StateData, fxml:element_to_binary(El1)). 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) -> send_error(StateData, Stanza, Error) ->
Type = xmpp:get_type(Stanza), Type = xmpp:get_type(Stanza),
if Type == error; Type == result; if Type == error; Type == result;

View File

@ -178,7 +178,7 @@
-callback get_items(nodeIdx(), jid(), accessModel(), -callback get_items(nodeIdx(), jid(), accessModel(),
boolean(), boolean(), binary(), boolean(), boolean(), binary(),
undefined | rsm_set()) -> 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()) -> -callback get_items(nodeIdx(), jid(), undefined | rsm_set()) ->
{result, {[pubsubItem()], 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. 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()) -> jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]} | empty. {error, stanza_error()} | {result, [binary()]} | empty.
get_local_features(Acc, _From, _To, <<"">>, _Lang) -> get_local_features(Acc, _From, _To, <<"">>, _Lang) ->
Feats = case Acc of Feats = case Acc of
{result, I} -> I; {result, I} -> I;
@ -238,7 +238,7 @@ process_adhoc_request(#iq{from = From, to = To,
process_adhoc_request(#iq{} = IQ, _Hooks) -> process_adhoc_request(#iq{} = IQ, _Hooks) ->
xmpp:make_error(IQ, xmpp:err_bad_request()). 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()]}. jid(), jid(), binary()) -> {result, [disco_item()]}.
ping_item(Acc, _From, #jid{server = Server} = _To, ping_item(Acc, _From, #jid{server = Server} = _To,
Lang) -> Lang) ->
@ -252,7 +252,7 @@ ping_item(Acc, _From, #jid{server = Server} = _To,
{result, Items ++ Nodes}. {result, Items ++ Nodes}.
-spec ping_command(adhoc_command(), jid(), jid(), adhoc_command()) -> -spec ping_command(adhoc_command(), jid(), jid(), adhoc_command()) ->
adhoc_command() | {error, error()}. adhoc_command() | {error, stanza_error()}.
ping_command(_Acc, _From, _To, ping_command(_Acc, _From, _To,
#adhoc_command{lang = Lang, node = <<"ping">>, #adhoc_command{lang = Lang, node = <<"ping">>,
action = Action} = Request) -> action = Action} = Request) ->

View File

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

View File

@ -72,19 +72,19 @@ depends(_Host, _Opts) ->
process_iq(IQ) -> process_iq(IQ) ->
xmpp:make_error(IQ, xmpp:err_not_allowed()). 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()) -> iq(), userlist()) ->
{error, error()} | {result, block_list()}. {error, stanza_error()} | {result, block_list()}.
process_iq_get(_, #iq{lang = Lang, from = From, process_iq_get(_, #iq{lang = Lang, from = From,
sub_els = [#block_list{}]}, _) -> sub_els = [#block_list{}]}, _) ->
#jid{luser = LUser, lserver = LServer} = From, #jid{luser = LUser, lserver = LServer} = From,
{stop, process_blocklist_get(LUser, LServer, Lang)}; {stop, process_blocklist_get(LUser, LServer, Lang)};
process_iq_get(Acc, _, _) -> Acc. 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} |
{result, xmpp_element() | undefined, userlist()}, {result, xmpp_element() | undefined, userlist()},
iq()) -> {error, error()} | iq()) -> {error, stanza_error()} |
{result, undefined} | {result, undefined} |
{result, undefined, userlist()}. {result, undefined, userlist()}.
process_iq_set(_, #iq{from = From, lang = Lang, sub_els = [SubEl]}) -> 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()], -spec process_blocklist_block(binary(), binary(), [ljid()],
binary()) -> binary()) ->
{error, error()} | {error, stanza_error()} |
{result, undefined, userlist()}. {result, undefined, userlist()}.
process_blocklist_block(LUser, LServer, JIDs, Lang) -> process_blocklist_block(LUser, LServer, JIDs, Lang) ->
Filter = fun (List) -> Filter = fun (List) ->
@ -171,7 +171,7 @@ process_blocklist_block(LUser, LServer, JIDs, Lang) ->
end. end.
-spec process_blocklist_unblock_all(binary(), binary(), binary()) -> -spec process_blocklist_unblock_all(binary(), binary(), binary()) ->
{error, error()} | {error, stanza_error()} |
{result, undefined} | {result, undefined} |
{result, undefined, userlist()}. {result, undefined, userlist()}.
process_blocklist_unblock_all(LUser, LServer, Lang) -> process_blocklist_unblock_all(LUser, LServer, Lang) ->
@ -195,7 +195,7 @@ process_blocklist_unblock_all(LUser, LServer, Lang) ->
end. end.
-spec process_blocklist_unblock(binary(), binary(), [ljid()], binary()) -> -spec process_blocklist_unblock(binary(), binary(), [ljid()], binary()) ->
{error, error()} | {error, stanza_error()} |
{result, undefined} | {result, undefined} |
{result, undefined, userlist()}. {result, undefined, userlist()}.
process_blocklist_unblock(LUser, LServer, JIDs, Lang) -> process_blocklist_unblock(LUser, LServer, JIDs, Lang) ->
@ -240,7 +240,7 @@ broadcast_blocklist_event(LUser, LServer, Event) ->
{broadcast, {blocking, Event}}). {broadcast, {blocking, Event}}).
-spec process_blocklist_get(binary(), binary(), binary()) -> -spec process_blocklist_get(binary(), binary(), binary()) ->
{error, error()} | {result, block_list()}. {error, stanza_error()} | {result, block_list()}.
process_blocklist_get(LUser, LServer, Lang) -> process_blocklist_get(LUser, LServer, Lang) ->
Mod = db_mod(LServer), Mod = db_mod(LServer),
case Mod:process_blocklist_get(LUser, LServer) of 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] [#caps{hash = <<"sha-1">>, node = ?EJABBERD_URI, version = Hash}|Acc]
end. end.
-spec disco_features({error, error()} | {result, [binary()]} | empty, -spec disco_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), jid(), jid(),
binary(), binary()) -> binary(), binary()) ->
{error, error()} | {result, [binary()]} | empty. {error, stanza_error()} | {result, [binary()]} | empty.
disco_features(Acc, From, To, Node, Lang) -> disco_features(Acc, From, To, Node, Lang) ->
case is_valid_node(Node) of case is_valid_node(Node) of
true -> true ->

View File

@ -270,8 +270,8 @@ get_local_features(Acc, From,
end. end.
%%%----------------------------------------------------------------------- %%%-----------------------------------------------------------------------
-spec adhoc_sm_items(empty | {error, error()} | {result, [disco_item()]}, -spec adhoc_sm_items(empty | {error, stanza_error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {error, error()} | jid(), jid(), binary()) -> {error, stanza_error()} |
{result, [disco_item()]} | {result, [disco_item()]} |
empty. empty.
adhoc_sm_items(Acc, From, #jid{lserver = LServer} = To, 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()]}, -spec adhoc_local_items(empty | {error, stanza_error()} | {result, [disco_item()]},
jid(), jid(), binary()) -> {error, error()} | jid(), jid(), binary()) -> {error, stanza_error()} |
{result, [disco_item()]} | {result, [disco_item()]} |
empty. empty.
adhoc_local_items(Acc, From, adhoc_local_items(Acc, From,
@ -773,7 +773,7 @@ get_stopped_nodes(_Lang) ->
end). end).
-spec adhoc_local_commands(adhoc_command(), jid(), jid(), adhoc_command()) -> -spec adhoc_local_commands(adhoc_command(), jid(), jid(), adhoc_command()) ->
adhoc_command() | {error, error()}. adhoc_command() | {error, stanza_error()}.
adhoc_local_commands(Acc, From, adhoc_local_commands(Acc, From,
#jid{lserver = LServer} = To, #jid{lserver = LServer} = To,
#adhoc_command{node = Node, lang = Lang} = Request) -> #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) -> get_local_identity(Acc, _From, _To, _Node, _Lang) ->
Acc. Acc.
-spec get_local_features({error, error()} | {result, [binary()]} | empty, -spec get_local_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) -> jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]}. {error, stanza_error()} | {result, [binary()]}.
get_local_features({error, _Error} = Acc, _From, _To, get_local_features({error, _Error} = Acc, _From, _To,
_Node, _Lang) -> _Node, _Lang) ->
Acc; Acc;
@ -222,10 +222,10 @@ get_local_features(Acc, _From, _To, _Node, Lang) ->
{error, xmpp:err_item_not_found(Txt, Lang)} {error, xmpp:err_item_not_found(Txt, Lang)}
end. end.
-spec get_local_services({error, error()} | {result, [disco_item()]} | empty, -spec get_local_services({error, stanza_error()} | {result, [disco_item()]} | empty,
jid(), jid(), jid(), jid(),
binary(), binary()) -> binary(), binary()) ->
{error, error()} | {result, [disco_item()]}. {error, stanza_error()} | {result, [disco_item()]}.
get_local_services({error, _Error} = Acc, _From, _To, get_local_services({error, _Error} = Acc, _From, _To,
_Node, _Lang) -> _Node, _Lang) ->
Acc; Acc;
@ -296,10 +296,10 @@ process_sm_iq_items(#iq{type = get, lang = Lang,
xmpp:make_error(IQ, xmpp:err_subscription_required(Txt, Lang)) xmpp:make_error(IQ, xmpp:err_subscription_required(Txt, Lang))
end. end.
-spec get_sm_items({error, error()} | {result, [disco_item()]} | empty, -spec get_sm_items({error, stanza_error()} | {result, [disco_item()]} | empty,
jid(), jid(), jid(), jid(),
binary(), binary()) -> binary(), binary()) ->
{error, error()} | {result, [disco_item()]}. {error, stanza_error()} | {result, [disco_item()]}.
get_sm_items({error, _Error} = Acc, _From, _To, _Node, get_sm_items({error, _Error} = Acc, _From, _To, _Node,
_Lang) -> _Lang) ->
Acc; Acc;
@ -383,9 +383,9 @@ get_sm_identity(Acc, _From,
_ -> [] _ -> []
end. end.
-spec get_sm_features({error, error()} | {result, [binary()]} | empty, -spec get_sm_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) -> jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]}. {error, stanza_error()} | {result, [binary()]}.
get_sm_features(empty, From, To, _Node, Lang) -> get_sm_features(empty, From, To, _Node, Lang) ->
#jid{luser = LFrom, lserver = LSFrom} = From, #jid{luser = LFrom, lserver = LSFrom} = From,
#jid{luser = LTo, lserver = LSTo} = To, #jid{luser = LTo, lserver = LSTo} = To,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -100,8 +100,8 @@ stop(Host) ->
process_iq(IQ) -> process_iq(IQ) ->
xmpp:make_error(IQ, xmpp:err_not_allowed()). 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, privacy_query()}. iq(), userlist()) -> {error, stanza_error()} | {result, privacy_query()}.
process_iq_get(_, #iq{from = From, lang = Lang, process_iq_get(_, #iq{from = From, lang = Lang,
sub_els = [#privacy_query{lists = Lists}]}, sub_els = [#privacy_query{lists = Lists}]},
#userlist{name = Active}) -> #userlist{name = Active}) ->
@ -117,7 +117,7 @@ process_iq_get(_, #iq{from = From, lang = Lang,
end. end.
-spec process_lists_get(binary(), binary(), binary(), binary()) -> -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) -> process_lists_get(LUser, LServer, Active, Lang) ->
Mod = gen_mod:db_mod(LServer, ?MODULE), Mod = gen_mod:db_mod(LServer, ?MODULE),
case Mod:process_lists_get(LUser, LServer) of case Mod:process_lists_get(LUser, LServer) of
@ -135,7 +135,7 @@ process_lists_get(LUser, LServer, Active, Lang) ->
end. end.
-spec process_list_get(binary(), binary(), binary(), binary()) -> -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) -> process_list_get(LUser, LServer, Name, Lang) ->
Mod = gen_mod:db_mod(LServer, ?MODULE), Mod = gen_mod:db_mod(LServer, ?MODULE),
case Mod:process_list_get(LUser, LServer, Name) of case Mod:process_list_get(LUser, LServer, Name) of
@ -214,10 +214,10 @@ decode_value(Type, Value) ->
undefined -> none undefined -> none
end. end.
-spec process_iq_set({error, error()} | -spec process_iq_set({error, stanza_error()} |
{result, xmpp_element() | undefined} | {result, xmpp_element() | undefined} |
{result, xmpp_element() | undefined, userlist()}, {result, xmpp_element() | undefined, userlist()},
iq()) -> {error, error()} | iq()) -> {error, stanza_error()} |
{result, undefined, userlist()}. {result, undefined, userlist()}.
process_iq_set(_, #iq{from = From, lang = Lang, process_iq_set(_, #iq{from = From, lang = Lang,
sub_els = [#privacy_query{default = Default, sub_els = [#privacy_query{default = Default,
@ -239,7 +239,7 @@ process_iq_set(_, #iq{from = From, lang = Lang,
end. end.
-spec process_default_set(binary(), binary(), none | binary(), -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) -> process_default_set(LUser, LServer, Value, Lang) ->
Mod = gen_mod:db_mod(LServer, ?MODULE), Mod = gen_mod:db_mod(LServer, ?MODULE),
case Mod:process_default_set(LUser, LServer, Value) of case Mod:process_default_set(LUser, LServer, Value) of
@ -258,7 +258,7 @@ process_default_set(LUser, LServer, Value, Lang) ->
end. end.
-spec process_active_set(binary(), binary(), none | binary(), binary()) -> -spec process_active_set(binary(), binary(), none | binary(), binary()) ->
{error, error()} | {error, stanza_error()} |
{result, undefined, userlist()}. {result, undefined, userlist()}.
process_active_set(_LUser, _LServer, none, _Lang) -> process_active_set(_LUser, _LServer, none, _Lang) ->
{result, undefined, #userlist{}}; {result, undefined, #userlist{}};
@ -280,7 +280,7 @@ set_privacy_list(#privacy{us = {_, LServer}} = Privacy) ->
Mod:set_privacy_list(Privacy). Mod:set_privacy_list(Privacy).
-spec process_lists_set(binary(), binary(), binary(), [privacy_item()], -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) -> process_lists_set(LUser, LServer, Name, [], Lang) ->
Mod = gen_mod:db_mod(LServer, ?MODULE), Mod = gen_mod:db_mod(LServer, ?MODULE),
case Mod:remove_privacy_list(LUser, LServer, Name) of 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) -> disco_local_identity(Acc, _From, _To, _Node, _Lang) ->
Acc. Acc.
-spec disco_local_features({error, error()} | {result, [binary()]} | empty, -spec disco_local_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) -> jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]} | empty. {error, stanza_error()} | {result, [binary()]} | empty.
disco_local_features(Acc, _From, To, <<>>, _Lang) -> disco_local_features(Acc, _From, To, <<>>, _Lang) ->
Host = host(To#jid.lserver), Host = host(To#jid.lserver),
Feats = case Acc of Feats = case Acc of
@ -538,9 +538,9 @@ disco_local_features(Acc, _From, To, <<>>, _Lang) ->
disco_local_features(Acc, _From, _To, _Node, _Lang) -> disco_local_features(Acc, _From, _To, _Node, _Lang) ->
Acc. 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()) -> 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, <<>>, _Lang) -> Acc;
disco_local_items(Acc, _From, _To, _Node, _Lang) -> Acc. disco_local_items(Acc, _From, _To, _Node, _Lang) -> Acc.
@ -578,9 +578,9 @@ disco_identity(Host, Node, From) ->
_ -> [] _ -> []
end. end.
-spec disco_sm_features({error, error()} | {result, [binary()]} | empty, -spec disco_sm_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) -> jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]}. {error, stanza_error()} | {result, [binary()]}.
disco_sm_features(empty, From, To, Node, Lang) -> disco_sm_features(empty, From, To, Node, Lang) ->
disco_sm_features({result, []}, From, To, Node, Lang); disco_sm_features({result, []}, From, To, Node, Lang);
disco_sm_features({result, OtherFeatures} = _Acc, From, To, Node, _Lang) -> disco_sm_features({result, OtherFeatures} = _Acc, From, To, Node, _Lang) ->
@ -612,9 +612,9 @@ disco_features(Host, Node, From) ->
_ -> [] _ -> []
end. 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()) -> 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(empty, From, To, Node, Lang) ->
disco_sm_items({result, []}, From, To, Node, Lang); disco_sm_items({result, []}, From, To, Node, Lang);
disco_sm_items({result, OtherItems}, 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]}}. features = [?NS_COMMANDS]}}.
-spec node_disco_info(binary(), binary(), jid()) -> {result, disco_info()} | -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) ->
node_disco_info(Host, Node, From, true, true). node_disco_info(Host, Node, From, true, true).
-spec node_disco_info(binary(), binary(), jid(), boolean(), boolean()) -> -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) -> node_disco_info(Host, Node, _From, _Identity, _Features) ->
Action = Action =
fun(#pubsub_node{type = Type, options = Options}) -> fun(#pubsub_node{type = Type, options = Options}) ->
@ -1075,7 +1075,7 @@ node_disco_info(Host, Node, _From, _Identity, _Features) ->
end. end.
-spec iq_disco_info(binary(), binary(), jid(), binary()) -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) -> iq_disco_info(Host, SNode, From, Lang) ->
[Node | _] = case SNode of [Node | _] = case SNode of
<<>> -> [<<>>]; <<>> -> [<<>>];
@ -1105,7 +1105,7 @@ iq_disco_info(Host, SNode, From, Lang) ->
end. end.
-spec iq_disco_items(host(), binary(), jid(), undefined | rsm_set()) -> -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) -> iq_disco_items(Host, <<>>, From, _RSM) ->
Items = Items =
lists:map( lists:map(
@ -1193,7 +1193,7 @@ iq_get_vcard(Lang) ->
desc = <<Desc/binary, $\n, Copyright/binary>>}. desc = <<Desc/binary, $\n, Copyright/binary>>}.
-spec iq_pubsub(binary() | ljid(), atom(), iq()) -> -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, iq_pubsub(Host, Access, #iq{from = From, type = IQType, lang = Lang,
sub_els = [SubEl]}) -> sub_els = [SubEl]}) ->
case {IQType, SubEl} of case {IQType, SubEl} of
@ -1272,7 +1272,7 @@ iq_pubsub(Host, Access, #iq{from = From, type = IQType, lang = Lang,
end. end.
-spec iq_pubsub_owner(binary() | ljid(), iq()) -> {result, pubsub_owner() | undefined} | -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, iq_pubsub_owner(Host, #iq{type = IQType, from = From,
lang = Lang, sub_els = [SubEl]}) -> lang = Lang, sub_els = [SubEl]}) ->
case {IQType, SubEl} of case {IQType, SubEl} of
@ -1312,7 +1312,7 @@ iq_pubsub_owner(Host, #iq{type = IQType, from = From,
end. end.
-spec adhoc_request(binary(), binary(), jid(), adhoc_command(), -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_request(Host, _ServerHost, Owner,
#adhoc_command{node = ?NS_PUBSUB_GET_PENDING, lang = Lang, #adhoc_command{node = ?NS_PUBSUB_GET_PENDING, lang = Lang,
action = execute, xdata = undefined}, action = execute, xdata = undefined},
@ -1342,7 +1342,7 @@ adhoc_request(_Host, _ServerHost, _Owner, Other, _Access, _Plugins) ->
{error, xmpp:err_item_not_found()}. {error, xmpp:err_item_not_found()}.
-spec send_pending_node_form(binary(), jid(), binary(), -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) -> send_pending_node_form(Host, Owner, _Lang, Plugins) ->
Filter = fun (Type) -> Filter = fun (Type) ->
lists:member(<<"get-pending">>, plugin_features(Host, Type)) lists:member(<<"get-pending">>, plugin_features(Host, Type))
@ -1369,7 +1369,7 @@ send_pending_node_form(Host, Owner, _Lang, Plugins) ->
end. end.
-spec get_pending_nodes(binary(), jid(), [binary()]) -> {ok, [binary()]} | -spec get_pending_nodes(binary(), jid(), [binary()]) -> {ok, [binary()]} |
{error, error()}. {error, stanza_error()}.
get_pending_nodes(Host, Owner, Plugins) -> get_pending_nodes(Host, Owner, Plugins) ->
Tr = fun (Type) -> Tr = fun (Type) ->
case node_call(Host, Type, get_pending_nodes, [Host, Owner]) of 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 %% @doc <p>Send a subscription approval form to Owner for all pending
%% subscriptions on Host and Node.</p> %% subscriptions on Host and Node.</p>
-spec send_pending_auth_events(binary(), binary(), jid(), -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) -> send_pending_auth_events(Host, Node, Owner, Lang) ->
?DEBUG("Sending pending auth events for ~s on ~s:~s", ?DEBUG("Sending pending auth events for ~s on ~s:~s",
[jid:to_string(Owner), Host, Node]), [jid:to_string(Owner), Host, Node]),
@ -1520,7 +1520,7 @@ handle_authorization_response(Host, From, To, Packet, X) ->
end. end.
-spec update_auth(binary(), binary(), _, _, jid() | error, boolean(), _) -> -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) -> update_auth(Host, Node, Type, Nidx, Subscriber, Allow, Subs) ->
Sub= lists:filter(fun Sub= lists:filter(fun
({pending, _}) -> true; ({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> %%<li>node plugin create_node just sets default affiliation/subscription</li>
%%</ul> %%</ul>
-spec create_node(host(), binary(), binary(), jid(), -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) ->
create_node(Host, ServerHost, Node, Owner, Type, all, []). create_node(Host, ServerHost, Node, Owner, Type, all, []).
-spec create_node(host(), binary(), binary(), jid(), binary(), -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) -> create_node(Host, ServerHost, <<>>, Owner, Type, Access, Configuration) ->
case lists:member(<<"instant-nodes">>, plugin_features(Host, Type)) of case lists:member(<<"instant-nodes">>, plugin_features(Host, Type)) of
true -> 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 node is the root collection node, which cannot be deleted.</li>
%%<li>The specified node does not exist.</li> %%<li>The specified node does not exist.</li>
%%</ul> %%</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) -> delete_node(_Host, <<>>, _Owner) ->
{error, xmpp:err_not_allowed(<<"No node specified">>, ?MYLANG)}; {error, xmpp:err_not_allowed(<<"No node specified">>, ?MYLANG)};
delete_node(Host, Node, Owner) -> delete_node(Host, Node, Owner) ->
@ -1770,7 +1770,7 @@ delete_node(Host, Node, Owner) ->
%%<li>The node does not exist.</li> %%<li>The node does not exist.</li>
%%</ul> %%</ul>
-spec subscribe_node(host(), binary(), jid(), binary(), [{binary(), [binary()]}]) -> -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) -> subscribe_node(Host, Node, From, JID, Configuration) ->
SubModule = subscription_plugin(Host), SubModule = subscription_plugin(Host),
SubOpts = case SubModule:parse_options_xform(Configuration) of 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> %%<li>The request specifies a subscription ID that is not valid or current.</li>
%%</ul> %%</ul>
-spec unsubscribe_node(host(), binary(), jid(), jid(), binary()) -> -spec unsubscribe_node(host(), binary(), jid(), jid(), binary()) ->
{result, undefined} | {error, error()}. {result, undefined} | {error, stanza_error()}.
unsubscribe_node(Host, Node, From, JID, SubId) -> unsubscribe_node(Host, Node, From, JID, SubId) ->
Subscriber = jid:tolower(JID), Subscriber = jid:tolower(JID),
Action = fun (#pubsub_node{type = Type, id = Nidx}) -> 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> %%<li>The request does not match the node configuration.</li>
%%</ul> %%</ul>
-spec publish_item(host(), binary(), binary(), jid(), binary(), -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) ->
publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload, [], all). publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload, [], all).
publish_item(Host, ServerHost, Node, Publisher, <<>>, Payload, PubOpts, Access) -> 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, Reply};
{result, {_, Result}} -> {result, {_, Result}} ->
{result, Result}; {result, Result};
{error, #error{reason = 'item-not-found'}} -> {error, #stanza_error{reason = 'item-not-found'}} ->
Type = select_type(ServerHost, Host, Node), Type = select_type(ServerHost, Host, Node),
case lists:member(<<"auto-create">>, plugin_features(Host, Type)) of case lists:member(<<"auto-create">>, plugin_features(Host, Type)) of
true -> 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> %%<li>The service does not support the deletion of items.</li>
%%</ul> %%</ul>
-spec delete_item(host(), binary(), jid(), binary()) -> {result, undefined} | -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) ->
delete_item(Host, Node, Publisher, ItemId, false). delete_item(Host, Node, Publisher, ItemId, false).
delete_item(_, <<>>, _, _, _) -> delete_item(_, <<>>, _, _, _) ->
@ -2071,7 +2071,7 @@ delete_item(Host, Node, Publisher, ItemId, ForceNotify) ->
%%<li>The specified node does not exist.</li> %%<li>The specified node does not exist.</li>
%%</ul> %%</ul>
-spec purge_node(mod_pubsub:host(), binary(), jid()) -> {result, undefined} | -spec purge_node(mod_pubsub:host(), binary(), jid()) -> {result, undefined} |
{error, error()}. {error, stanza_error()}.
purge_node(Host, Node, Owner) -> purge_node(Host, Node, Owner) ->
Action = fun (#pubsub_node{options = Options, type = Type, id = Nidx}) -> Action = fun (#pubsub_node{options = Options, type = Type, id = Nidx}) ->
Features = plugin_features(Host, Type), Features = plugin_features(Host, Type),
@ -2117,7 +2117,7 @@ purge_node(Host, Node, Owner) ->
%% to read the items. %% to read the items.
-spec get_items(host(), binary(), jid(), binary(), -spec get_items(host(), binary(), jid(), binary(),
binary(), [binary()], undefined | rsm_set()) -> binary(), [binary()], undefined | rsm_set()) ->
{result, pubsub()} | {error, error()}. {result, pubsub()} | {error, stanza_error()}.
get_items(Host, Node, From, SubId, SMaxItems, ItemIds, RSM) -> get_items(Host, Node, From, SubId, SMaxItems, ItemIds, RSM) ->
MaxItems = if SMaxItems == undefined -> MaxItems = if SMaxItems == undefined ->
case get_max_items_node(Host) of 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> %% @doc <p>Return the list of affiliations as an XMPP response.</p>
-spec get_affiliations(host(), binary(), jid(), [binary()]) -> -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) -> get_affiliations(Host, Node, JID, Plugins) when is_list(Plugins) ->
Result = Result =
lists:foldl( lists:foldl(
@ -2310,7 +2310,7 @@ get_affiliations(Host, Node, JID, Plugins) when is_list(Plugins) ->
end. end.
-spec get_affiliations(host(), binary(), jid()) -> -spec get_affiliations(host(), binary(), jid()) ->
{result, pubsub_owner()} | {error, error()}. {result, pubsub_owner()} | {error, stanza_error()}.
get_affiliations(Host, Node, JID) -> get_affiliations(Host, Node, JID) ->
Action = Action =
fun(#pubsub_node{type = Type, id = Nidx}) -> fun(#pubsub_node{type = Type, id = Nidx}) ->
@ -2342,7 +2342,7 @@ get_affiliations(Host, Node, JID) ->
end. end.
-spec set_affiliations(host(), binary(), jid(), [ps_affiliation()]) -> -spec set_affiliations(host(), binary(), jid(), [ps_affiliation()]) ->
{result, undefined} | {error, error()}. {result, undefined} | {error, stanza_error()}.
set_affiliations(Host, Node, From, Affs) -> set_affiliations(Host, Node, From, Affs) ->
Owner = jid:tolower(jid:remove_resource(From)), Owner = jid:tolower(jid:remove_resource(From)),
Action = Action =
@ -2396,7 +2396,7 @@ set_affiliations(Host, Node, From, Affs) ->
end. end.
-spec get_options(binary(), binary(), jid(), binary(), binary()) -> -spec get_options(binary(), binary(), jid(), binary(), binary()) ->
{result, xdata()} | {error, error()}. {result, xdata()} | {error, stanza_error()}.
get_options(Host, Node, JID, SubId, Lang) -> get_options(Host, Node, JID, SubId, Lang) ->
Action = fun (#pubsub_node{type = Type, id = Nidx}) -> Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
case lists:member(<<"subscription-options">>, plugin_features(Host, Type)) of case lists:member(<<"subscription-options">>, plugin_features(Host, Type)) of
@ -2413,7 +2413,7 @@ get_options(Host, Node, JID, SubId, Lang) ->
end. end.
-spec get_options_helper(binary(), jid(), binary(), binary(), _, binary(), -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) -> get_options_helper(Host, JID, Lang, Node, Nidx, SubId, Type) ->
Subscriber = jid:tolower(JID), Subscriber = jid:tolower(JID),
{result, Subs} = node_call(Host, Type, get_subscriptions, [Nidx, Subscriber]), {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(), -spec set_options(binary(), binary(), jid(), binary(),
[{binary(), [binary()]}]) -> [{binary(), [binary()]}]) ->
{result, undefined} | {error, error()}. {result, undefined} | {error, stanza_error()}.
set_options(Host, Node, JID, SubId, Configuration) -> set_options(Host, Node, JID, SubId, Configuration) ->
Action = fun (#pubsub_node{type = Type, id = Nidx}) -> Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
case lists:member(<<"subscription-options">>, plugin_features(Host, Type)) of 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(), -spec set_options_helper(binary(), [{binary(), [binary()]}], jid(),
nodeIdx(), binary(), binary()) -> nodeIdx(), binary(), binary()) ->
{result, undefined} | {error, error()}. {result, undefined} | {error, stanza_error()}.
set_options_helper(Host, Configuration, JID, Nidx, SubId, Type) -> set_options_helper(Host, Configuration, JID, Nidx, SubId, Type) ->
SubModule = subscription_plugin(Host), SubModule = subscription_plugin(Host),
SubOpts = case SubModule:parse_options_xform(Configuration) of SubOpts = case SubModule:parse_options_xform(Configuration) of
@ -2494,7 +2494,7 @@ set_options_helper(Host, Configuration, JID, Nidx, SubId, Type) ->
end. end.
-spec write_sub(binary(), nodeIdx(), ljid(), binary(), _) -> {result, undefined} | -spec write_sub(binary(), nodeIdx(), ljid(), binary(), _) -> {result, undefined} |
{error, error()}. {error, stanza_error()}.
write_sub(_Host, _Nidx, _Subscriber, _SubId, invalid) -> write_sub(_Host, _Nidx, _Subscriber, _SubId, invalid) ->
{error, extended_error(xmpp:err_bad_request(), err_invalid_options())}; {error, extended_error(xmpp:err_bad_request(), err_invalid_options())};
write_sub(_Host, _Nidx, _Subscriber, _SubId, []) -> 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> %% @doc <p>Return the list of subscriptions as an XMPP response.</p>
-spec get_subscriptions(host(), binary(), jid(), [binary()]) -> -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) -> get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
Result = lists:foldl(fun (Type, {Status, Acc}) -> Result = lists:foldl(fun (Type, {Status, Acc}) ->
Features = plugin_features(Host, Type), Features = plugin_features(Host, Type),
@ -2576,7 +2576,7 @@ get_subscriptions(Host, Node, JID, Plugins) when is_list(Plugins) ->
end. end.
-spec get_subscriptions(host(), binary(), jid()) -> {result, pubsub_owner()} | -spec get_subscriptions(host(), binary(), jid()) -> {result, pubsub_owner()} |
{error, error()}. {error, stanza_error()}.
get_subscriptions(Host, Node, JID) -> get_subscriptions(Host, Node, JID) ->
Action = fun (#pubsub_node{type = Type, id = Nidx}) -> Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
Features = plugin_features(Host, Type), 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()]) -> -spec set_subscriptions(host(), binary(), jid(), [ps_subscription()]) ->
{result, undefined} | {error, error()}. {result, undefined} | {error, stanza_error()}.
set_subscriptions(Host, Node, From, Entities) -> set_subscriptions(Host, Node, From, Entities) ->
Owner = jid:tolower(jid:remove_resource(From)), Owner = jid:tolower(jid:remove_resource(From)),
Notify = fun(#ps_subscription{jid = JID, type = Sub}) -> Notify = fun(#ps_subscription{jid = JID, type = Sub}) ->
@ -3163,7 +3163,7 @@ user_resource(_, _, Resource) ->
%%%%%%% Configuration handling %%%%%%% Configuration handling
-spec get_configure(host(), binary(), binary(), jid(), -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) -> get_configure(Host, ServerHost, Node, From, Lang) ->
Action = fun (#pubsub_node{options = Options, type = Type, id = Nidx}) -> Action = fun (#pubsub_node{options = Options, type = Type, id = Nidx}) ->
case node_call(Host, Type, get_affiliation, [Nidx, From]) of 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> %%<li>The specified node does not exist.</li>
%%</ul> %%</ul>
-spec set_configure(host(), binary(), jid(), [{binary(), [binary()]}], -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) -> set_configure(_Host, <<>>, _From, _Config, _Lang) ->
{error, extended_error(xmpp:err_bad_request(), err_nodeid_required())}; {error, extended_error(xmpp:err_bad_request(), err_nodeid_required())};
set_configure(Host, Node, From, Config, Lang) -> set_configure(Host, Node, From, Config, Lang) ->
@ -3851,9 +3851,9 @@ transaction_retry(Host, ServerHost, Fun, Trans, DBType, Count) ->
%%%% helpers %%%% helpers
%% Add pubsub-specific error element %% 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) -> extended_error(StanzaErr, PubSubErr) ->
StanzaErr#error{sub_els = [PubSubErr]}. StanzaErr#stanza_error{sub_els = [PubSubErr]}.
-spec err_closed_node() -> ps_error(). -spec err_closed_node() -> ps_error().
err_closed_node() -> err_closed_node() ->
@ -4033,7 +4033,7 @@ purge_offline(LJID) ->
?DEBUG("on_user_offline ~p", [Error]) ?DEBUG("on_user_offline ~p", [Error])
end. 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) -> purge_offline(Host, LJID, Node) ->
Nidx = Node#pubsub_node.id, Nidx = Node#pubsub_node.id,
Type = Node#pubsub_node.type, Type = Node#pubsub_node.type,

View File

@ -150,9 +150,9 @@ do_route(From, To, #iq{} = IQ) ->
do_route(_, _, _) -> do_route(_, _, _) ->
ok. ok.
-spec get_sm_features({error, error()} | empty | {result, [binary()]}, -spec get_sm_features({error, stanza_error()} | empty | {result, [binary()]},
jid(), jid(), binary(), binary()) -> jid(), jid(), binary(), binary()) ->
{error, error()} | empty | {result, [binary()]}. {error, stanza_error()} | empty | {result, [binary()]}.
get_sm_features({error, _Error} = Acc, _From, _To, get_sm_features({error, _Error} = Acc, _From, _To,
_Node, _Lang) -> _Node, _Lang) ->
Acc; Acc;
@ -230,9 +230,9 @@ process_search(#iq{type = set, lang = Lang} = IQ) ->
Txt = <<"Incorrect data form">>, Txt = <<"Incorrect data form">>,
xmpp:make_error(IQ, xmpp:err_bad_request(Txt, Lang)). 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()) -> jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [disco_item()]}. {error, stanza_error()} | {result, [disco_item()]}.
disco_items(empty, _From, _To, <<"">>, _Lang) -> disco_items(empty, _From, _To, <<"">>, _Lang) ->
{result, []}; {result, []};
disco_items(empty, _From, _To, _Node, Lang) -> 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) -> disco_items(Acc, _From, _To, _Node, _Lang) ->
Acc. Acc.
-spec disco_features({error, error()} | {result, [binary()]} | empty, -spec disco_features({error, stanza_error()} | {result, [binary()]} | empty,
jid(), jid(), binary(), binary()) -> jid(), jid(), binary(), binary()) ->
{error, error()} | {result, [binary()]}. {error, stanza_error()} | {result, [binary()]}.
disco_features({error, _Error} = Acc, _From, _To, _Node, _Lang) -> disco_features({error, _Error} = Acc, _From, _To, _Node, _Lang) ->
Acc; Acc;
disco_features(Acc, _From, _To, <<"">>, _Lang) -> 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, end,
IQ#iq{type = result, to = From, from = To, sub_els = SubEls}. IQ#iq{type = result, to = From, from = To, sub_els = SubEls}.
-spec make_error(message(), error() | xmlel()) -> message(); -spec make_error(message(), stanza_error() | xmlel()) -> message();
(presence(), error() | xmlel()) -> presence(); (presence(), stanza_error() | xmlel()) -> presence();
(iq(), error() | xmlel()) -> iq(); (iq(), stanza_error() | xmlel()) -> iq();
(xmlel(), error() | xmlel()) -> xmlel(). (xmlel(), stanza_error() | xmlel()) -> xmlel().
make_error(#message{type = Type, from = From, to = To, sub_els = Els} = Msg, make_error(#message{type = Type, from = From, to = To, sub_els = Els} = Msg,
Err) when Type /= error -> Err) when Type /= error ->
Msg#message{type = error, from = To, to = From, sub_els = Els ++ [Err]}; 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(#message{to = J}) -> J;
get_to(#presence{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) -> get_error(Stanza) ->
case get_subtag(Stanza, #error{}) of case get_subtag(Stanza, #stanza_error{}) of
false -> undefined; false -> undefined;
Error -> Error Error -> Error
end. 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(#message{} = Msg, F, T) -> Msg#message{from = F, to = T};
set_from_to(#presence{} = Pres, F, T) -> Pres#presence{from = F, to = T}. set_from_to(#presence{} = Pres, F, T) -> Pres#presence{from = F, to = T}.
-spec set_error(iq(), error()) -> iq(); -spec set_error(iq(), stanza_error()) -> iq();
(message(), error()) -> message(); (message(), stanza_error()) -> message();
(presence(), error()) -> presence(). (presence(), stanza_error()) -> presence().
set_error(Stanza, E) -> set_subtag(Stanza, E). set_error(Stanza, E) -> set_subtag(Stanza, E).
-spec set_els(iq(), [xmpp_element() | xmlel()]) -> iq(); -spec set_els(iq(), [xmpp_element() | xmlel()]) -> iq();
@ -383,199 +383,199 @@ pp(Term) ->
%%%=================================================================== %%%===================================================================
%%% Functions to construct general XMPP errors %%% Functions to construct general XMPP errors
%%%=================================================================== %%%===================================================================
-spec err_bad_request() -> error(). -spec err_bad_request() -> stanza_error().
err_bad_request() -> err_bad_request() ->
err(modify, 'bad-request', 400). 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_bad_request(Text, Lang) ->
err(modify, 'bad-request', 400, Text, Lang). err(modify, 'bad-request', 400, Text, Lang).
-spec err_conflict() -> error(). -spec err_conflict() -> stanza_error().
err_conflict() -> err_conflict() ->
err(cancel, 'conflict', 409). err(cancel, 'conflict', 409).
-spec err_conflict(binary(), binary()) -> error(). -spec err_conflict(binary(), binary()) -> stanza_error().
err_conflict(Text, Lang) -> err_conflict(Text, Lang) ->
err(cancel, 'conflict', 409, 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_feature_not_implemented() ->
err(cancel, 'feature-not-implemented', 501). 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_feature_not_implemented(Text, Lang) ->
err(cancel, 'feature-not-implemented', 501, Text, Lang). err(cancel, 'feature-not-implemented', 501, Text, Lang).
-spec err_forbidden() -> error(). -spec err_forbidden() -> stanza_error().
err_forbidden() -> err_forbidden() ->
err(auth, 'forbidden', 403). err(auth, 'forbidden', 403).
-spec err_forbidden(binary(), binary()) -> error(). -spec err_forbidden(binary(), binary()) -> stanza_error().
err_forbidden(Text, Lang) -> err_forbidden(Text, Lang) ->
err(auth, 'forbidden', 403, Text, Lang). err(auth, 'forbidden', 403, Text, Lang).
%% RFC 6120 says error type SHOULD be "cancel". %% RFC 6120 says error type SHOULD be "cancel".
%% RFC 3920 and XEP-0082 says it SHOULD be "modify". %% RFC 3920 and XEP-0082 says it SHOULD be "modify".
-spec err_gone() -> error(). -spec err_gone() -> stanza_error().
err_gone() -> err_gone() ->
err(modify, 'gone', 302). err(modify, 'gone', 302).
-spec err_gone(binary(), binary()) -> error(). -spec err_gone(binary(), binary()) -> stanza_error().
err_gone(Text, Lang) -> err_gone(Text, Lang) ->
err(modify, 'gone', 302, Text, Lang). err(modify, 'gone', 302, Text, Lang).
%% RFC 6120 sasy error type SHOULD be "cancel". %% RFC 6120 sasy error type SHOULD be "cancel".
%% RFC 3920 and XEP-0082 says it SHOULD be "wait". %% 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_internal_server_error() ->
err(wait, 'internal-server-error', 500). 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_internal_server_error(Text, Lang) ->
err(wait, 'internal-server-error', 500, 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_item_not_found() ->
err(cancel, 'item-not-found', 404). 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_item_not_found(Text, Lang) ->
err(cancel, 'item-not-found', 404, 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_jid_malformed() ->
err(modify, 'jid-malformed', 400). 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_jid_malformed(Text, Lang) ->
err(modify, 'jid-malformed', 400, Text, Lang). err(modify, 'jid-malformed', 400, Text, Lang).
-spec err_not_acceptable() -> error(). -spec err_not_acceptable() -> stanza_error().
err_not_acceptable() -> err_not_acceptable() ->
err(modify, 'not-acceptable', 406). 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_not_acceptable(Text, Lang) ->
err(modify, 'not-acceptable', 406, Text, Lang). err(modify, 'not-acceptable', 406, Text, Lang).
-spec err_not_allowed() -> error(). -spec err_not_allowed() -> stanza_error().
err_not_allowed() -> err_not_allowed() ->
err(cancel, 'not-allowed', 405). 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_not_allowed(Text, Lang) ->
err(cancel, 'not-allowed', 405, Text, Lang). err(cancel, 'not-allowed', 405, Text, Lang).
-spec err_not_authorized() -> error(). -spec err_not_authorized() -> stanza_error().
err_not_authorized() -> err_not_authorized() ->
err(auth, 'not-authorized', 401). 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_not_authorized(Text, Lang) ->
err(auth, 'not-authorized', 401, Text, Lang). err(auth, 'not-authorized', 401, Text, Lang).
-spec err_payment_required() -> error(). -spec err_payment_required() -> stanza_error().
err_payment_required() -> err_payment_required() ->
err(auth, 'not-authorized', 402). 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_payment_required(Text, Lang) ->
err(auth, 'not-authorized', 402, Text, Lang). err(auth, 'not-authorized', 402, Text, Lang).
%% <policy-violation/> is defined in neither RFC 3920 nor XEP-0086. %% <policy-violation/> is defined in neither RFC 3920 nor XEP-0086.
%% We choose '403' error code (as in <forbidden/>). %% We choose '403' error code (as in <forbidden/>).
-spec err_policy_violation() -> error(). -spec err_policy_violation() -> stanza_error().
err_policy_violation() -> err_policy_violation() ->
err(modify, 'policy-violation', 403). 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_policy_violation(Text, Lang) ->
err(modify, 'policy-violation', 403, Text, Lang). err(modify, 'policy-violation', 403, Text, Lang).
-spec err_recipient_unavailable() -> error(). -spec err_recipient_unavailable() -> stanza_error().
err_recipient_unavailable() -> err_recipient_unavailable() ->
err(wait, 'recipient-unavailable', 404). 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_recipient_unavailable(Text, Lang) ->
err(wait, 'recipient-unavailable', 404, Text, Lang). err(wait, 'recipient-unavailable', 404, Text, Lang).
-spec err_redirect() -> error(). -spec err_redirect() -> stanza_error().
err_redirect() -> err_redirect() ->
err(modify, 'redirect', 302). err(modify, 'redirect', 302).
-spec err_redirect(binary(), binary()) -> error(). -spec err_redirect(binary(), binary()) -> stanza_error().
err_redirect(Text, Lang) -> err_redirect(Text, Lang) ->
err(modify, 'redirect', 302, Text, Lang). err(modify, 'redirect', 302, Text, Lang).
-spec err_registration_required() -> error(). -spec err_registration_required() -> stanza_error().
err_registration_required() -> err_registration_required() ->
err(auth, 'registration-required', 407). 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_registration_required(Text, Lang) ->
err(auth, 'registration-required', 407, 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_remote_server_not_found() ->
err(cancel, 'remote-server-not-found', 404). 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_remote_server_not_found(Text, Lang) ->
err(cancel, 'remote-server-not-found', 404, 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_remote_server_timeout() ->
err(wait, 'remote-server-timeout', 504). 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_remote_server_timeout(Text, Lang) ->
err(wait, 'remote-server-timeout', 504, 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_resource_constraint() ->
err(wait, 'resource-constraint', 500). 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_resource_constraint(Text, Lang) ->
err(wait, 'resource-constraint', 500, Text, Lang). err(wait, 'resource-constraint', 500, Text, Lang).
-spec err_service_unavailable() -> error(). -spec err_service_unavailable() -> stanza_error().
err_service_unavailable() -> err_service_unavailable() ->
err(cancel, 'service-unavailable', 503). 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_service_unavailable(Text, Lang) ->
err(cancel, 'service-unavailable', 503, Text, Lang). err(cancel, 'service-unavailable', 503, Text, Lang).
-spec err_subscription_required() -> error(). -spec err_subscription_required() -> stanza_error().
err_subscription_required() -> err_subscription_required() ->
err(auth, 'subscription-required', 407). 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_subscription_required(Text, Lang) ->
err(auth, 'subscription-required', 407, Text, Lang). err(auth, 'subscription-required', 407, Text, Lang).
%% No error type is defined for <undefined-confition/>. %% No error type is defined for <undefined-confition/>.
%% Let user provide the type. %% Let user provide the type.
-spec err_undefined_condition('auth' | 'cancel' | 'continue' | -spec err_undefined_condition('auth' | 'cancel' | 'continue' |
'modify' | 'wait') -> error(). 'modify' | 'wait') -> stanza_error().
err_undefined_condition(Type) -> err_undefined_condition(Type) ->
err(Type, 'undefined-condition', 500). err(Type, 'undefined-condition', 500).
-spec err_undefined_condition('auth' | 'cancel' | 'continue' | 'modify' | 'wait', -spec err_undefined_condition('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
binary(), binary()) -> error(). binary(), binary()) -> stanza_error().
err_undefined_condition(Type, Text, Lang) -> err_undefined_condition(Type, Text, Lang) ->
err(Type, 'undefined-condition', 500, Text, Lang). err(Type, 'undefined-condition', 500, Text, Lang).
%% RFC 6120 says error type SHOULD be "wait" or "modify". %% RFC 6120 says error type SHOULD be "wait" or "modify".
%% RFC 3920 and XEP-0082 says it SHOULD be "wait". %% 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_unexpected_request() ->
err(wait, 'unexpected-request', 400). 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_unexpected_request(Text, Lang) ->
err(wait, 'unexpected-request', 400, Text, Lang). err(wait, 'unexpected-request', 400, Text, Lang).
@ -786,17 +786,17 @@ serr_unsupported_version(Text, Lang) ->
%%% Internal functions %%% Internal functions
%%%=================================================================== %%%===================================================================
-spec err('auth' | 'cancel' | 'continue' | 'modify' | 'wait', -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) -> 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', -spec err('auth' | 'cancel' | 'continue' | 'modify' | 'wait',
atom() | gone() | redirect(), non_neg_integer(), atom() | gone() | redirect(), non_neg_integer(),
binary(), binary()) -> error(). binary(), binary()) -> stanza_error().
err(Type, Reason, Code, Text, Lang) -> err(Type, Reason, Code, Text, Lang) ->
#error{type = Type, reason = Reason, code = Code, #stanza_error{type = Type, reason = Reason, code = Code,
text = #text{lang = Lang, text = #text{lang = Lang,
data = translate:translate(Lang, Text)}}. data = translate:translate(Lang, Text)}}.
-spec serr(atom() | 'see-other-host'()) -> stream_error(). -spec serr(atom() | 'see-other-host'()) -> stream_error().
serr(Reason) -> serr(Reason) ->

View File

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

View File

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