mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-22 17:28:25 +01:00
Fix compilation issues on R19
This commit is contained in:
parent
024124decb
commit
0737958b45
@ -7,12 +7,12 @@
|
||||
%%% Created : 1 May 2013 by Evgeniy Khramtsov <ekhramtsov@process-one.net>
|
||||
%%%-------------------------------------------------------------------
|
||||
|
||||
{deps, [{lager, ".*", {git, "https://github.com/basho/lager", {tag, "3.0.2"}}},
|
||||
{deps, [{lager, ".*", {git, "https://github.com/basho/lager", {tag, "3.2.1"}}},
|
||||
{p1_utils, ".*", {git, "https://github.com/processone/p1_utils", {tag, "1.0.4"}}},
|
||||
{cache_tab, ".*", {git, "https://github.com/processone/cache_tab", {tag, "1.0.3"}}},
|
||||
{fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.0.5"}}},
|
||||
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.4"}}},
|
||||
{fast_xml, ".*", {git, "https://github.com/processone/fast_xml", {tag, "1.1.13"}}},
|
||||
{fast_xml, ".*", {git, "https://github.com/processone/fast_xml", {tag, "1.1.14"}}},
|
||||
{stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.0.5"}}},
|
||||
{esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.6"}}},
|
||||
{fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.4"}}},
|
||||
@ -34,7 +34,7 @@
|
||||
"527722d12d0433b837cdb92a60900c2cb5df8942"}}},
|
||||
%% Forces correct dependency for riakc and allow using newer meck version)
|
||||
{if_var_true, riak, {hamcrest, ".*", {git, "https://github.com/hyperthunk/hamcrest-erlang",
|
||||
"908a24fda4a46776a5135db60ca071e3d783f9f6"}}}, % for riak_pb-2.1.0.7
|
||||
"13f9bfb9b27d216e8e033b0e0a9a29097ed923dd"}}}, % for riak_pb-2.1.0.7
|
||||
{if_var_true, riak, {protobuffs, ".*", {git, "https://github.com/basho/erlang_protobuffs",
|
||||
"6e7fc924506e2dc166a6170e580ce1d95ebbd5bd"}}}, % for riak_pb-2.1.0.7 with correct meck dependency
|
||||
%% Elixir support, needed to run tests
|
||||
|
@ -41,13 +41,7 @@
|
||||
%% Parse an ad-hoc request. Return either an adhoc_request record or
|
||||
%% an {error, ErrorType} tuple.
|
||||
%%
|
||||
-spec(parse_request/1 ::
|
||||
(
|
||||
IQ :: iq_request())
|
||||
-> adhoc_response()
|
||||
%%
|
||||
| {error, _}
|
||||
).
|
||||
-spec parse_request(IQ :: iq_request()) -> adhoc_response() | {error, _}.
|
||||
|
||||
parse_request(#iq{type = set, lang = Lang, sub_el = SubEl, xmlns = ?NS_COMMANDS}) ->
|
||||
?DEBUG("entering parse_request...", []),
|
||||
@ -88,12 +82,9 @@ find_xdata_el1([_ | Els]) -> find_xdata_el1(Els).
|
||||
%% record, filling in values for language, node and session id from
|
||||
%% the request.
|
||||
%%
|
||||
-spec(produce_response/2 ::
|
||||
(
|
||||
Adhoc_Request :: adhoc_request(),
|
||||
Adhoc_Response :: adhoc_response())
|
||||
-> Xmlel::xmlel()
|
||||
).
|
||||
-spec produce_response(Adhoc_Request :: adhoc_request(),
|
||||
Adhoc_Response :: adhoc_response()) ->
|
||||
Xmlel::xmlel().
|
||||
|
||||
%% Produce a <command/> node to use as response from an adhoc_response
|
||||
%% record.
|
||||
@ -104,11 +95,7 @@ produce_response(#adhoc_request{lang = Lang, node = Node, sessionid = SessionID}
|
||||
}).
|
||||
|
||||
%%
|
||||
-spec(produce_response/1 ::
|
||||
(
|
||||
Adhoc_Response::adhoc_response())
|
||||
-> Xmlel::xmlel()
|
||||
).
|
||||
-spec produce_response(Adhoc_Response::adhoc_response()) -> Xmlel::xmlel().
|
||||
|
||||
produce_response(
|
||||
#adhoc_response{
|
||||
|
@ -88,13 +88,8 @@ start() ->
|
||||
ok.
|
||||
|
||||
%%
|
||||
-spec(register_mechanism/3 ::
|
||||
(
|
||||
Mechanim :: mechanism(),
|
||||
Module :: module(),
|
||||
PasswordType :: password_type())
|
||||
-> any()
|
||||
).
|
||||
-spec register_mechanism(Mechanim :: mechanism(), Module :: module(),
|
||||
PasswordType :: password_type()) -> any().
|
||||
|
||||
register_mechanism(Mechanism, Module, PasswordType) ->
|
||||
case is_disabled(Mechanism) of
|
||||
@ -139,11 +134,7 @@ check_credentials(_State, Props) ->
|
||||
_LUser -> ok
|
||||
end.
|
||||
|
||||
-spec(listmech/1 ::
|
||||
(
|
||||
Host ::binary())
|
||||
-> Mechanisms::mechanisms()
|
||||
).
|
||||
-spec listmech(Host ::binary()) -> Mechanisms::mechanisms().
|
||||
|
||||
listmech(Host) ->
|
||||
Mechs = ets:select(sasl_mechanism,
|
||||
@ -213,12 +204,7 @@ server_step(State, ClientIn) ->
|
||||
%% Remove the anonymous mechanism from the list if not enabled for the given
|
||||
%% host
|
||||
%%
|
||||
-spec(filter_anonymous/2 ::
|
||||
(
|
||||
Host :: binary(),
|
||||
Mechs :: mechanisms())
|
||||
-> mechanisms()
|
||||
).
|
||||
-spec filter_anonymous(Host :: binary(), Mechs :: mechanisms()) -> mechanisms().
|
||||
|
||||
filter_anonymous(Host, Mechs) ->
|
||||
case ejabberd_auth_anonymous:is_sasl_anonymous_enabled(Host) of
|
||||
@ -226,11 +212,7 @@ filter_anonymous(Host, Mechs) ->
|
||||
false -> Mechs -- [<<"ANONYMOUS">>]
|
||||
end.
|
||||
|
||||
-spec(is_disabled/1 ::
|
||||
(
|
||||
Mechanism :: mechanism())
|
||||
-> boolean()
|
||||
).
|
||||
-spec is_disabled(Mechanism :: mechanism()) -> boolean().
|
||||
|
||||
is_disabled(Mechanism) ->
|
||||
Disabled = ejabberd_config:get_option(
|
||||
|
@ -90,7 +90,7 @@ hosts_to_start(State) ->
|
||||
|
||||
%% @private
|
||||
%% At the moment, these functions are mainly used to setup unit tests.
|
||||
-spec(start/2 :: (Hosts :: [binary()], Opts :: [acl:acl() | local_config()]) -> ok).
|
||||
-spec start(Hosts :: [binary()], Opts :: [acl:acl() | local_config()]) -> ok.
|
||||
start(Hosts, Opts) ->
|
||||
mnesia_init(),
|
||||
set_opts(set_hosts_in_options(Hosts, #state{opts = Opts})).
|
||||
|
47
src/jlib.erl
47
src/jlib.erl
@ -307,21 +307,16 @@ get_iq_namespace(#xmlel{name = <<"iq">>, children = Els}) ->
|
||||
get_iq_namespace(_) -> <<"">>.
|
||||
|
||||
%%
|
||||
-spec(iq_query_info/1 ::
|
||||
(
|
||||
Xmlel :: xmlel())
|
||||
-> iq_request() | 'reply' | 'invalid' | 'not_iq'
|
||||
).
|
||||
-spec iq_query_info(Xmlel :: xmlel()) ->
|
||||
iq_request() | 'reply' | 'invalid' | 'not_iq'.
|
||||
|
||||
%% @spec (xmlelement()) -> iq() | reply | invalid | not_iq
|
||||
iq_query_info(El) -> iq_info_internal(El, request).
|
||||
|
||||
%%
|
||||
-spec(iq_query_or_response_info/1 ::
|
||||
(
|
||||
Xmlel :: xmlel())
|
||||
-> iq_request() | iq_reply() | 'reply' | 'invalid' | 'not_iq'
|
||||
).
|
||||
-spec iq_query_or_response_info(Xmlel :: xmlel()) ->
|
||||
iq_request() | iq_reply() |
|
||||
'reply' | 'invalid' | 'not_iq'.
|
||||
|
||||
iq_query_or_response_info(El) ->
|
||||
iq_info_internal(El, any).
|
||||
@ -373,11 +368,7 @@ iq_type_to_string(get) -> <<"get">>;
|
||||
iq_type_to_string(result) -> <<"result">>;
|
||||
iq_type_to_string(error) -> <<"error">>.
|
||||
|
||||
-spec(iq_to_xml/1 ::
|
||||
(
|
||||
IQ :: iq())
|
||||
-> xmlel()
|
||||
).
|
||||
-spec iq_to_xml(IQ :: iq()) -> xmlel().
|
||||
|
||||
iq_to_xml(#iq{id = ID, type = Type, sub_el = SubEl}) ->
|
||||
if ID /= <<"">> ->
|
||||
@ -391,13 +382,8 @@ iq_to_xml(#iq{id = ID, type = Type, sub_el = SubEl}) ->
|
||||
children = SubEl}
|
||||
end.
|
||||
|
||||
-spec(parse_xdata_submit/1 ::
|
||||
(
|
||||
El :: xmlel())
|
||||
-> [{Var::binary(), Values::[binary()]}]
|
||||
%%
|
||||
| 'invalid'
|
||||
).
|
||||
-spec parse_xdata_submit(El :: xmlel()) ->
|
||||
[{Var::binary(), Values::[binary()]}] | 'invalid'.
|
||||
|
||||
parse_xdata_submit(#xmlel{attrs = Attrs, children = Els}) ->
|
||||
case fxml:get_attr_s(<<"type">>, Attrs) of
|
||||
@ -409,12 +395,9 @@ parse_xdata_submit(#xmlel{attrs = Attrs, children = Els}) ->
|
||||
invalid
|
||||
end.
|
||||
|
||||
-spec(parse_xdata_fields/2 ::
|
||||
(
|
||||
Xmlels :: [xmlel() | cdata()],
|
||||
Res :: [{Var::binary(), Values :: [binary()]}])
|
||||
-> [{Var::binary(), Values::[binary()]}]
|
||||
).
|
||||
-spec parse_xdata_fields(Xmlels :: [xmlel() | cdata()],
|
||||
Res :: [{Var::binary(), Values :: [binary()]}]) ->
|
||||
[{Var::binary(), Values::[binary()]}].
|
||||
|
||||
parse_xdata_fields([], Res) -> Res;
|
||||
parse_xdata_fields([#xmlel{name = <<"field">>, attrs = Attrs, children = SubEls}
|
||||
@ -429,12 +412,8 @@ parse_xdata_fields([#xmlel{name = <<"field">>, attrs = Attrs, children = SubEls}
|
||||
parse_xdata_fields([_ | Els], Res) ->
|
||||
parse_xdata_fields(Els, Res).
|
||||
|
||||
-spec(parse_xdata_values/2 ::
|
||||
(
|
||||
Xmlels :: [xmlel() | cdata()],
|
||||
Res :: [binary()])
|
||||
-> [binary()]
|
||||
).
|
||||
-spec parse_xdata_values(Xmlels :: [xmlel() | cdata()],
|
||||
Res :: [binary()]) -> [binary()].
|
||||
|
||||
parse_xdata_values([], Res) -> Res;
|
||||
parse_xdata_values([#xmlel{name = <<"value">>, children = SubEls} | Els], Res) ->
|
||||
|
@ -234,11 +234,7 @@ stop(Host) ->
|
||||
%% {stop, Reason}
|
||||
%% Description: Initiates the server
|
||||
%%--------------------------------------------------------------------
|
||||
-spec(init/1 ::
|
||||
(
|
||||
[binary() | [{_,_}],...])
|
||||
-> {'ok',state()}
|
||||
).
|
||||
-spec init([binary() | [{_,_}],...]) -> {'ok',state()}.
|
||||
|
||||
init([ServerHost, Opts]) ->
|
||||
?DEBUG("pubsub init ~p ~p", [ServerHost, Opts]),
|
||||
@ -480,15 +476,10 @@ send_loop(State) ->
|
||||
%% disco hooks handling functions
|
||||
%%
|
||||
|
||||
-spec(disco_local_identity/5 ::
|
||||
(
|
||||
Acc :: [xmlel()],
|
||||
_From :: jid(),
|
||||
To :: jid(),
|
||||
Node :: <<>> | mod_pubsub:nodeId(),
|
||||
Lang :: binary())
|
||||
-> [xmlel()]
|
||||
).
|
||||
-spec disco_local_identity(Acc :: [xmlel()], _From :: jid(),
|
||||
To :: jid(), Node :: <<>> | mod_pubsub:nodeId(),
|
||||
Lang :: binary()) -> [xmlel()].
|
||||
|
||||
disco_local_identity(Acc, _From, To, <<>>, _Lang) ->
|
||||
case lists:member(?PEPNODE, plugins(host(To#jid.lserver))) of
|
||||
true ->
|
||||
@ -502,15 +493,10 @@ disco_local_identity(Acc, _From, To, <<>>, _Lang) ->
|
||||
disco_local_identity(Acc, _From, _To, _Node, _Lang) ->
|
||||
Acc.
|
||||
|
||||
-spec(disco_local_features/5 ::
|
||||
(
|
||||
Acc :: [xmlel()],
|
||||
_From :: jid(),
|
||||
To :: jid(),
|
||||
Node :: <<>> | mod_pubsub:nodeId(),
|
||||
Lang :: binary())
|
||||
-> [binary(),...]
|
||||
).
|
||||
-spec disco_local_features(Acc :: [xmlel()], _From :: jid(),
|
||||
To :: jid(), Node :: <<>> | mod_pubsub:nodeId(),
|
||||
Lang :: binary()) -> [binary(),...].
|
||||
|
||||
disco_local_features(Acc, _From, To, <<>>, _Lang) ->
|
||||
Host = host(To#jid.lserver),
|
||||
Feats = case Acc of
|
||||
@ -528,15 +514,10 @@ disco_local_items(Acc, _From, _To, _Node, _Lang) -> Acc.
|
||||
% when is_binary(Node) ->
|
||||
% disco_sm_identity(Acc, From, To, iolist_to_binary(Node),
|
||||
% Lang);
|
||||
-spec(disco_sm_identity/5 ::
|
||||
(
|
||||
Acc :: empty | [xmlel()],
|
||||
From :: jid(),
|
||||
To :: jid(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
Lang :: binary())
|
||||
-> [xmlel()]
|
||||
).
|
||||
-spec disco_sm_identity(Acc :: empty | [xmlel()], From :: jid(),
|
||||
To :: jid(), Node :: mod_pubsub:nodeId(),
|
||||
Lang :: binary()) -> [xmlel()].
|
||||
|
||||
disco_sm_identity(empty, From, To, Node, Lang) ->
|
||||
disco_sm_identity([], From, To, Node, Lang);
|
||||
disco_sm_identity(Acc, From, To, Node, _Lang) ->
|
||||
@ -571,15 +552,9 @@ disco_identity(Host, Node, From) ->
|
||||
_ -> []
|
||||
end.
|
||||
|
||||
-spec(disco_sm_features/5 ::
|
||||
(
|
||||
Acc :: empty | {result, Features::[Feature::binary()]},
|
||||
From :: jid(),
|
||||
To :: jid(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
Lang :: binary())
|
||||
-> {result, Features::[Feature::binary()]}
|
||||
).
|
||||
-spec disco_sm_features(Acc :: empty | {result, Features::[Feature::binary()]},
|
||||
From :: jid(), To :: jid(), Node :: mod_pubsub:nodeId(),
|
||||
Lang :: binary()) -> {result, Features::[Feature::binary()]}.
|
||||
%disco_sm_features(Acc, From, To, Node, Lang)
|
||||
% when is_binary(Node) ->
|
||||
% disco_sm_features(Acc, From, To, iolist_to_binary(Node),
|
||||
@ -607,15 +582,9 @@ disco_features(Host, Node, From) ->
|
||||
_ -> []
|
||||
end.
|
||||
|
||||
-spec(disco_sm_items/5 ::
|
||||
(
|
||||
Acc :: empty | {result, [xmlel()]},
|
||||
From :: jid(),
|
||||
To :: jid(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
Lang :: binary())
|
||||
-> {result, [xmlel()]}
|
||||
).
|
||||
-spec disco_sm_items(Acc :: empty | {result, [xmlel()]}, From :: jid(),
|
||||
To :: jid(), Node :: mod_pubsub:nodeId(),
|
||||
Lang :: binary()) -> {result, [xmlel()]}.
|
||||
%disco_sm_items(Acc, From, To, Node, Lang)
|
||||
% when is_binary(Node) ->
|
||||
% disco_sm_items(Acc, From, To, iolist_to_binary(Node),
|
||||
@ -627,13 +596,8 @@ disco_sm_items({result, OtherItems}, From, To, Node, _Lang) ->
|
||||
disco_items(jid:tolower(jid:remove_resource(To)), Node, From))};
|
||||
disco_sm_items(Acc, _From, _To, _Node, _Lang) -> Acc.
|
||||
|
||||
-spec(disco_items/3 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
From :: jid())
|
||||
-> [xmlel()]
|
||||
).
|
||||
-spec disco_items(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
From :: jid()) -> [xmlel()].
|
||||
disco_items(Host, <<>>, From) ->
|
||||
Action = fun (#pubsub_node{nodeid = {_, Node},
|
||||
options = Options, type = Type, id = Nidx, owners = O},
|
||||
@ -847,12 +811,8 @@ handle_call(stop, _From, State) ->
|
||||
%% @private
|
||||
handle_cast(_Msg, State) -> {noreply, State}.
|
||||
|
||||
-spec(handle_info/2 ::
|
||||
(
|
||||
_ :: {route, From::jid(), To::jid(), Packet::xmlel()},
|
||||
State :: state())
|
||||
-> {noreply, state()}
|
||||
).
|
||||
-spec handle_info(_ :: {route, From::jid(), To::jid(), Packet::xmlel()},
|
||||
State :: state()) -> {noreply, state()}.
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%% Function: handle_info(Info, State) -> {noreply, State} |
|
||||
@ -935,17 +895,9 @@ terminate(_Reason,
|
||||
%% @private
|
||||
code_change(_OldVsn, State, _Extra) -> {ok, State}.
|
||||
|
||||
-spec(do_route/7 ::
|
||||
(
|
||||
ServerHost :: binary(),
|
||||
Access :: atom(),
|
||||
Plugins :: [binary(),...],
|
||||
Host :: mod_pubsub:hostPubsub(),
|
||||
From :: jid(),
|
||||
To :: jid(),
|
||||
Packet :: xmlel())
|
||||
-> ok
|
||||
).
|
||||
-spec do_route(ServerHost :: binary(), Access :: atom(),
|
||||
Plugins :: [binary(),...], Host :: mod_pubsub:hostPubsub(),
|
||||
From :: jid(), To :: jid(), Packet :: xmlel()) -> ok.
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%%% Internal functions
|
||||
@ -1132,14 +1084,8 @@ iq_disco_info(Host, SNode, From, Lang) ->
|
||||
node_disco_info(Host, Node, From)
|
||||
end.
|
||||
|
||||
-spec(iq_disco_items/4 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: <<>> | mod_pubsub:nodeId(),
|
||||
From :: jid(),
|
||||
Rsm :: none | rsm_in())
|
||||
-> {result, [xmlel()]}
|
||||
).
|
||||
-spec iq_disco_items(Host :: mod_pubsub:host(), Node :: <<>> | mod_pubsub:nodeId(),
|
||||
From :: jid(), Rsm :: none | rsm_in()) -> {result, [xmlel()]}.
|
||||
iq_disco_items(Host, <<>>, From, _RSM) ->
|
||||
{result,
|
||||
lists:map(fun (#pubsub_node{nodeid = {_, SubNode}, options = Options}) ->
|
||||
@ -1202,13 +1148,7 @@ iq_disco_items(Host, Item, From, RSM) ->
|
||||
end
|
||||
end.
|
||||
|
||||
-spec(iq_sm/3 ::
|
||||
(
|
||||
From :: jid(),
|
||||
To :: jid(),
|
||||
IQ :: iq_request())
|
||||
-> iq_result() | iq_error()
|
||||
).
|
||||
-spec iq_sm(From :: jid(), To :: jid(), IQ :: iq_request()) -> iq_result() | iq_error().
|
||||
iq_sm(From, To, #iq{type = Type, sub_el = SubEl, xmlns = XMLNS, lang = Lang} = IQ) ->
|
||||
ServerHost = To#jid.lserver,
|
||||
LOwner = jid:tolower(jid:remove_resource(To)),
|
||||
@ -1233,36 +1173,17 @@ iq_get_vcard(Lang) ->
|
||||
<<(translate:translate(Lang, <<"ejabberd Publish-Subscribe module">>))/binary,
|
||||
"\nCopyright (c) 2004-2016 ProcessOne">>}]}].
|
||||
|
||||
-spec(iq_pubsub/6 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
ServerHost :: binary(),
|
||||
From :: jid(),
|
||||
IQType :: 'get' | 'set',
|
||||
SubEl :: xmlel(),
|
||||
Lang :: binary())
|
||||
-> {result, [xmlel()]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec iq_pubsub(Host :: mod_pubsub:host(), ServerHost :: binary(), From :: jid(),
|
||||
IQType :: 'get' | 'set', SubEl :: xmlel(), Lang :: binary()) ->
|
||||
{result, [xmlel()]} | {error, xmlel()}.
|
||||
|
||||
iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang) ->
|
||||
iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, all, plugins(Host)).
|
||||
|
||||
-spec(iq_pubsub/8 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
ServerHost :: binary(),
|
||||
From :: jid(),
|
||||
IQType :: 'get' | 'set',
|
||||
SubEl :: xmlel(),
|
||||
Lang :: binary(),
|
||||
Access :: atom(),
|
||||
Plugins :: [binary(),...])
|
||||
-> {result, [xmlel()]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec iq_pubsub(Host :: mod_pubsub:host(), ServerHost :: binary(), From :: jid(),
|
||||
IQType :: 'get' | 'set', SubEl :: xmlel(), Lang :: binary(),
|
||||
Access :: atom(), Plugins :: [binary(),...]) ->
|
||||
{result, [xmlel()]} | {error, xmlel()}.
|
||||
|
||||
iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
|
||||
#xmlel{children = SubEls} = SubEl,
|
||||
@ -1368,18 +1289,10 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
|
||||
end.
|
||||
|
||||
|
||||
-spec(iq_pubsub_owner/6 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
ServerHost :: binary(),
|
||||
From :: jid(),
|
||||
IQType :: 'get' | 'set',
|
||||
SubEl :: xmlel(),
|
||||
Lang :: binary())
|
||||
-> {result, [xmlel()]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec iq_pubsub_owner(Host :: mod_pubsub:host(), ServerHost :: binary(), From :: jid(),
|
||||
IQType :: 'get' | 'set', SubEl :: xmlel(), Lang :: binary()) ->
|
||||
{result, [xmlel()]} | {error, xmlel()}.
|
||||
|
||||
iq_pubsub_owner(Host, ServerHost, From, IQType, SubEl, Lang) ->
|
||||
#xmlel{children = SubEls} = SubEl,
|
||||
Action = fxml:remove_cdata(SubEls),
|
||||
@ -1654,10 +1567,10 @@ send_authorization_approval(Host, JID, SNode, Subscription) ->
|
||||
%{S, SID} ->
|
||||
% [{<<"subscription">>, subscription_to_string(S)},
|
||||
% {<<"subid">>, SID}];
|
||||
S ->
|
||||
S ->
|
||||
[{<<"subscription">>, subscription_to_string(S)}]
|
||||
end,
|
||||
Stanza = event_stanza(<<"subscription">>,
|
||||
Stanza = event_stanza(<<"subscription">>,
|
||||
[{<<"jid">>, jid:to_string(JID)}
|
||||
| nodeAttr(SNode)]
|
||||
++ SubAttrs),
|
||||
@ -1802,33 +1715,17 @@ update_auth(Host, Node, Type, Nidx, Subscriber, Allow, Subs) ->
|
||||
%%<li>nodetree create_node checks if nodeid already exists</li>
|
||||
%%<li>node plugin create_node just sets default affiliation/subscription</li>
|
||||
%%</ul>
|
||||
-spec(create_node/5 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
ServerHost :: binary(),
|
||||
Node :: <<>> | mod_pubsub:nodeId(),
|
||||
Owner :: jid(),
|
||||
Type :: binary())
|
||||
-> {result, [xmlel(),...]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec create_node(Host :: mod_pubsub:host(), ServerHost :: binary(),
|
||||
Node :: <<>> | mod_pubsub:nodeId(), Owner :: jid(),
|
||||
Type :: binary()) -> {result, [xmlel(),...]} | {error, xmlel()}.
|
||||
create_node(Host, ServerHost, Node, Owner, Type) ->
|
||||
create_node(Host, ServerHost, Node, Owner, Type, all, []).
|
||||
|
||||
-spec(create_node/7 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
ServerHost :: binary(),
|
||||
Node :: <<>> | mod_pubsub:nodeId(),
|
||||
Owner :: jid(),
|
||||
Type :: binary(),
|
||||
Access :: atom(),
|
||||
Configuration :: [xmlel()])
|
||||
-> {result, [xmlel(),...]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec create_node(Host :: mod_pubsub:host(), ServerHost :: binary(),
|
||||
Node :: <<>> | mod_pubsub:nodeId(), Owner :: jid(),
|
||||
Type :: binary(), Access :: atom(), Configuration :: [xmlel()]) ->
|
||||
{result, [xmlel(),...]} | {error, xmlel()}.
|
||||
|
||||
create_node(Host, ServerHost, <<>>, Owner, Type, Access, Configuration) ->
|
||||
case lists:member(<<"instant-nodes">>, plugin_features(Host, Type)) of
|
||||
true ->
|
||||
@ -1942,15 +1839,8 @@ 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/3 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
Owner :: jid())
|
||||
-> {result, [xmlel(),...]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec delete_node(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
Owner :: jid()) -> {result, [xmlel(),...]} | {error, xmlel()}.
|
||||
delete_node(_Host, <<>>, _Owner) ->
|
||||
{error, ?ERRT_NOT_ALLOWED(?MYLANG, <<"No node specified">>)};
|
||||
delete_node(Host, Node, Owner) ->
|
||||
@ -2026,17 +1916,9 @@ delete_node(Host, Node, Owner) ->
|
||||
%%<li>The node does not support subscriptions.</li>
|
||||
%%<li>The node does not exist.</li>
|
||||
%%</ul>
|
||||
-spec(subscribe_node/5 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
From :: jid(),
|
||||
JID :: binary(),
|
||||
Configuration :: [xmlel()])
|
||||
-> {result, [xmlel(),...]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec subscribe_node(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
From :: jid(), JID :: binary(), Configuration :: [xmlel()]) ->
|
||||
{result, [xmlel(),...]} | {error, xmlel()}.
|
||||
subscribe_node(Host, Node, From, JID, Configuration) ->
|
||||
SubModule = subscription_plugin(Host),
|
||||
SubOpts = case SubModule:parse_options_xform(Configuration) of
|
||||
@ -2145,17 +2027,11 @@ subscribe_node(Host, Node, From, JID, Configuration) ->
|
||||
%%<li>The node does not exist.</li>
|
||||
%%<li>The request specifies a subscription ID that is not valid or current.</li>
|
||||
%%</ul>
|
||||
-spec(unsubscribe_node/5 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
From :: jid(),
|
||||
JID :: binary() | ljid(),
|
||||
SubId :: mod_pubsub:subId())
|
||||
-> {result, []}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec unsubscribe_node(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
From :: jid(), JID :: binary() | ljid(),
|
||||
SubId :: mod_pubsub:subId()) ->
|
||||
{result, []} | {error, xmlel()}.
|
||||
|
||||
unsubscribe_node(Host, Node, From, JID, SubId) when is_binary(JID) ->
|
||||
unsubscribe_node(Host, Node, From, string_to_ljid(JID), SubId);
|
||||
unsubscribe_node(Host, Node, From, Subscriber, SubId) ->
|
||||
@ -2183,18 +2059,12 @@ unsubscribe_node(Host, Node, From, Subscriber, SubId) ->
|
||||
%%<li>The item contains more than one payload element or the namespace of the root payload element does not match the configured namespace for the node.</li>
|
||||
%%<li>The request does not match the node configuration.</li>
|
||||
%%</ul>
|
||||
-spec(publish_item/6 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
ServerHost :: binary(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
Publisher :: jid(),
|
||||
ItemId :: <<>> | mod_pubsub:itemId(),
|
||||
Payload :: mod_pubsub:payload())
|
||||
-> {result, [xmlel(),...]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec publish_item(Host :: mod_pubsub:host(), ServerHost :: binary(),
|
||||
Node :: mod_pubsub:nodeId(), Publisher :: jid(),
|
||||
ItemId :: <<>> | mod_pubsub:itemId(),
|
||||
Payload :: mod_pubsub:payload()) ->
|
||||
{result, [xmlel(),...]} | {error, xmlel()}.
|
||||
|
||||
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) ->
|
||||
@ -2319,16 +2189,10 @@ publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload, PubOpts, Access
|
||||
%%<li>The node does not support persistent items.</li>
|
||||
%%<li>The service does not support the deletion of items.</li>
|
||||
%%</ul>
|
||||
-spec(delete_item/4 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
Publisher :: jid(),
|
||||
ItemId :: mod_pubsub:itemId())
|
||||
-> {result, []}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec delete_item(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
Publisher :: jid(), ItemId :: mod_pubsub:itemId()) ->
|
||||
{result, []} | {error, xmlel()}.
|
||||
|
||||
delete_item(Host, Node, Publisher, ItemId) ->
|
||||
delete_item(Host, Node, Publisher, ItemId, false).
|
||||
delete_item(_, <<>>, _, _, _) ->
|
||||
@ -2383,15 +2247,10 @@ delete_item(Host, Node, Publisher, ItemId, ForceNotify) ->
|
||||
%%<li>The node is not configured to persist items.</li>
|
||||
%%<li>The specified node does not exist.</li>
|
||||
%%</ul>
|
||||
-spec(purge_node/3 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
Owner :: jid())
|
||||
-> {result, []}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec purge_node(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
Owner :: jid()) ->
|
||||
{result, []} | {error, xmlel()}.
|
||||
|
||||
purge_node(Host, Node, Owner) ->
|
||||
Action = fun (#pubsub_node{options = Options, type = Type, id = Nidx}) ->
|
||||
Features = plugin_features(Host, Type),
|
||||
@ -2435,19 +2294,12 @@ purge_node(Host, Node, Owner) ->
|
||||
%% <p>The permission are not checked in this function.</p>
|
||||
%% @todo We probably need to check that the user doing the query has the right
|
||||
%% to read the items.
|
||||
-spec(get_items/7 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
From :: jid(),
|
||||
SubId :: mod_pubsub:subId(),
|
||||
SMaxItems :: binary(),
|
||||
ItemIds :: [mod_pubsub:itemId()],
|
||||
Rsm :: none | rsm_in())
|
||||
-> {result, [xmlel(),...]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec get_items(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
From :: jid(), SubId :: mod_pubsub:subId(),
|
||||
SMaxItems :: binary(), ItemIds :: [mod_pubsub:itemId()],
|
||||
Rsm :: none | rsm_in()) ->
|
||||
{result, [xmlel(),...]} | {error, xmlel()}.
|
||||
|
||||
get_items(Host, Node, From, SubId, SMaxItems, ItemIds, RSM) ->
|
||||
MaxItems = if SMaxItems == <<>> ->
|
||||
case get_max_items_node(Host) of
|
||||
@ -2511,7 +2363,7 @@ get_items(Host, Node, From, SubId, SMaxItems, ItemIds, RSM) ->
|
||||
|
||||
get_items(Host, Node) ->
|
||||
Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
|
||||
node_call(Host, Type, get_items, [Nidx, service_jid(Host), none])
|
||||
node_call(Host, Type, get_items, [Nidx, service_jid(Host), none])
|
||||
end,
|
||||
case transaction(Host, Node, Action, sync_dirty) of
|
||||
{result, {_, {Items, _}}} -> Items;
|
||||
@ -2610,16 +2462,10 @@ dispatch_items(From, To, _Node, Stanza) ->
|
||||
ejabberd_router:route(service_jid(From), jid:make(To), Stanza).
|
||||
|
||||
%% @doc <p>Return the list of affiliations as an XMPP response.</p>
|
||||
-spec(get_affiliations/4 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
JID :: jid(),
|
||||
Plugins :: [binary()])
|
||||
-> {result, [xmlel(),...]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec get_affiliations(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
JID :: jid(), Plugins :: [binary()]) ->
|
||||
{result, [xmlel(),...]} | {error, xmlel()}.
|
||||
|
||||
get_affiliations(Host, Node, JID, Plugins) when is_list(Plugins) ->
|
||||
Result = lists:foldl( fun (Type, {Status, Acc}) ->
|
||||
Features = plugin_features(Host, Type),
|
||||
@ -2663,15 +2509,10 @@ get_affiliations(Host, Node, JID, Plugins) when is_list(Plugins) ->
|
||||
Error
|
||||
end.
|
||||
|
||||
-spec(get_affiliations/3 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
JID :: jid())
|
||||
-> {result, [xmlel(),...]}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec get_affiliations(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
JID :: jid()) ->
|
||||
{result, [xmlel(),...]} | {error, xmlel()}.
|
||||
|
||||
get_affiliations(Host, Node, JID) ->
|
||||
Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
|
||||
Features = plugin_features(Host, Type),
|
||||
@ -2708,16 +2549,10 @@ get_affiliations(Host, Node, JID) ->
|
||||
Error
|
||||
end.
|
||||
|
||||
-spec(set_affiliations/4 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Node :: mod_pubsub:nodeId(),
|
||||
From :: jid(),
|
||||
EntitiesEls :: [xmlel()])
|
||||
-> {result, []}
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec set_affiliations(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
|
||||
From :: jid(), EntitiesEls :: [xmlel()]) ->
|
||||
{result, []} | {error, xmlel()}.
|
||||
|
||||
set_affiliations(Host, Node, From, EntitiesEls) ->
|
||||
Owner = jid:tolower(jid:remove_resource(From)),
|
||||
Entities = lists:foldl(fun
|
||||
@ -3113,15 +2948,13 @@ set_subscriptions(Host, Node, From, EntitiesEls) ->
|
||||
end
|
||||
end.
|
||||
|
||||
-spec(get_presence_and_roster_permissions/5 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
From :: ljid(),
|
||||
Owners :: [ljid(),...],
|
||||
AccessModel :: mod_pubsub:accessModel(),
|
||||
AllowedGroups :: [binary()])
|
||||
-> {PresenceSubscription::boolean(), RosterGroup::boolean()}
|
||||
).
|
||||
-spec get_presence_and_roster_permissions(Host :: mod_pubsub:host(),
|
||||
From :: ljid(), Owners :: [ljid(),...],
|
||||
AccessModel :: mod_pubsub:accessModel(),
|
||||
AllowedGroups :: [binary()]) ->
|
||||
{PresenceSubscription::boolean(),
|
||||
RosterGroup::boolean()}.
|
||||
|
||||
get_presence_and_roster_permissions(Host, From, Owners, AccessModel, AllowedGroups) ->
|
||||
if (AccessModel == presence) or (AccessModel == roster) ->
|
||||
case Host of
|
||||
@ -3179,11 +3012,7 @@ subscription_to_string(pending) -> <<"pending">>;
|
||||
subscription_to_string(unconfigured) -> <<"unconfigured">>;
|
||||
subscription_to_string(_) -> <<"none">>.
|
||||
|
||||
-spec(service_jid/1 ::
|
||||
(
|
||||
Host :: mod_pubsub:host())
|
||||
-> jid()
|
||||
).
|
||||
-spec service_jid(Host :: mod_pubsub:host()) -> jid().
|
||||
service_jid(#jid{} = Jid) -> Jid;
|
||||
service_jid({U, S, R}) -> jid:make(U, S, R);
|
||||
service_jid(Host) -> jid:make(<<>>, Host, <<>>).
|
||||
@ -3217,12 +3046,7 @@ sub_option_can_deliver(_, _, {deliver, false}) -> false;
|
||||
sub_option_can_deliver(_, _, {expire, When}) -> p1_time_compat:timestamp() < When;
|
||||
sub_option_can_deliver(_, _, _) -> true.
|
||||
|
||||
-spec(presence_can_deliver/2 ::
|
||||
(
|
||||
Entity :: ljid(),
|
||||
_ :: boolean())
|
||||
-> boolean()
|
||||
).
|
||||
-spec presence_can_deliver(Entity :: ljid(), _ :: boolean()) -> boolean().
|
||||
presence_can_deliver(_, false) ->
|
||||
true;
|
||||
presence_can_deliver({User, Server, Resource}, true) ->
|
||||
@ -3243,12 +3067,10 @@ presence_can_deliver({User, Server, Resource}, true) ->
|
||||
false, Ss)
|
||||
end.
|
||||
|
||||
-spec(state_can_deliver/2 ::
|
||||
(
|
||||
Entity::ljid(),
|
||||
SubOptions :: mod_pubsub:subOptions() | [])
|
||||
-> [ljid()]
|
||||
).
|
||||
-spec state_can_deliver(Entity::ljid(),
|
||||
SubOptions :: mod_pubsub:subOptions() | []) ->
|
||||
[ljid()].
|
||||
|
||||
state_can_deliver({U, S, R}, []) -> [{U, S, R}];
|
||||
state_can_deliver({U, S, R}, SubOptions) ->
|
||||
case lists:keysearch(show_values, 1, SubOptions) of
|
||||
@ -3268,13 +3090,10 @@ state_can_deliver({U, S, R}, SubOptions) ->
|
||||
[], Resources)
|
||||
end.
|
||||
|
||||
-spec(get_resource_state/3 ::
|
||||
(
|
||||
Entity :: ljid(),
|
||||
ShowValues :: [binary()],
|
||||
JIDs :: [ljid()])
|
||||
-> [ljid()]
|
||||
).
|
||||
-spec get_resource_state(Entity :: ljid(), ShowValues :: [binary()],
|
||||
JIDs :: [ljid()]) ->
|
||||
[ljid()].
|
||||
|
||||
get_resource_state({U, S, R}, ShowValues, JIDs) ->
|
||||
case ejabberd_sm:get_session_pid(U, S, R) of
|
||||
none ->
|
||||
@ -3293,11 +3112,8 @@ get_resource_state({U, S, R}, ShowValues, JIDs) ->
|
||||
end
|
||||
end.
|
||||
|
||||
-spec(payload_xmlelements/1 ::
|
||||
(
|
||||
Payload :: mod_pubsub:payload())
|
||||
-> Count :: non_neg_integer()
|
||||
).
|
||||
-spec payload_xmlelements(Payload :: mod_pubsub:payload()) ->
|
||||
Count :: non_neg_integer().
|
||||
payload_xmlelements(Payload) ->
|
||||
payload_xmlelements(Payload, 0).
|
||||
|
||||
@ -4040,12 +3856,9 @@ unset_cached_item(Host, Nidx) ->
|
||||
_ -> ok
|
||||
end.
|
||||
|
||||
-spec(get_cached_item/2 ::
|
||||
(
|
||||
Host :: mod_pubsub:host(),
|
||||
Nidx :: mod_pubsub:nodeIdx())
|
||||
-> undefined | mod_pubsub:pubsubItem()
|
||||
).
|
||||
-spec get_cached_item(Host :: mod_pubsub:host(), Nidx :: mod_pubsub:nodeIdx()) ->
|
||||
undefined | mod_pubsub:pubsubItem().
|
||||
|
||||
get_cached_item({_, ServerHost, _}, Nidx) ->
|
||||
get_cached_item(ServerHost, Nidx);
|
||||
get_cached_item(Host, Nidx) ->
|
||||
@ -4340,7 +4153,7 @@ string_to_ljid(JID) ->
|
||||
end
|
||||
end.
|
||||
|
||||
-spec(uniqid/0 :: () -> mod_pubsub:itemId()).
|
||||
-spec uniqid() -> mod_pubsub:itemId().
|
||||
uniqid() ->
|
||||
{T1, T2, T3} = p1_time_compat:timestamp(),
|
||||
iolist_to_binary(io_lib:fwrite("~.16B~.16B~.16B", [T1, T2, T3])).
|
||||
@ -4355,12 +4168,7 @@ itemsEls(Items) ->
|
||||
[#xmlel{name = <<"item">>, attrs = itemAttr(ItemId), children = Payload}
|
||||
|| #pubsub_item{itemid = {ItemId, _}, payload = Payload} <- Items].
|
||||
|
||||
-spec(add_message_type/2 ::
|
||||
(
|
||||
Message :: xmlel(),
|
||||
Type :: atom())
|
||||
-> xmlel()
|
||||
).
|
||||
-spec add_message_type(Message :: xmlel(), Type :: atom()) -> xmlel().
|
||||
|
||||
add_message_type(Message, normal) -> Message;
|
||||
add_message_type(#xmlel{name = <<"message">>, attrs = Attrs, children = Els}, Type) ->
|
||||
|
@ -402,17 +402,13 @@ get_entity_subscriptions(Host, Owner) ->
|
||||
end,
|
||||
{result, Reply}.
|
||||
|
||||
-spec(get_entity_subscriptions_for_send_last/2 ::
|
||||
(
|
||||
Host :: mod_pubsub:hostPubsub(),
|
||||
Owner :: jid())
|
||||
-> {result,
|
||||
[{mod_pubsub:pubsubNode(),
|
||||
mod_pubsub:subscription(),
|
||||
mod_pubsub:subId(),
|
||||
ljid()}]
|
||||
}
|
||||
).
|
||||
-spec get_entity_subscriptions_for_send_last(Host :: mod_pubsub:hostPubsub(),
|
||||
Owner :: jid()) ->
|
||||
{result, [{mod_pubsub:pubsubNode(),
|
||||
mod_pubsub:subscription(),
|
||||
mod_pubsub:subId(),
|
||||
ljid()}]}.
|
||||
|
||||
get_entity_subscriptions_for_send_last(Host, Owner) ->
|
||||
SubKey = jid:tolower(Owner),
|
||||
GenKey = jid:remove_resource(SubKey),
|
||||
@ -611,11 +607,9 @@ get_state(Nidx, JID) ->
|
||||
{SJID, _} = State#pubsub_state.stateid,
|
||||
State#pubsub_state{items = itemids(Nidx, SJID)}.
|
||||
|
||||
-spec(get_state_without_itemids/2 ::
|
||||
(Nidx :: mod_pubsub:nodeIdx(),
|
||||
Key :: ljid()) ->
|
||||
mod_pubsub:pubsubState()
|
||||
).
|
||||
-spec get_state_without_itemids(Nidx :: mod_pubsub:nodeIdx(), Key :: ljid()) ->
|
||||
mod_pubsub:pubsubState().
|
||||
|
||||
get_state_without_itemids(Nidx, JID) ->
|
||||
J = encode_jid(JID),
|
||||
case catch
|
||||
@ -973,17 +967,11 @@ update_subscription(Nidx, JID, Subscription) ->
|
||||
"-affiliation='n'"
|
||||
]).
|
||||
|
||||
-spec(decode_jid/1 ::
|
||||
( SJID :: binary())
|
||||
-> ljid()
|
||||
).
|
||||
-spec decode_jid(SJID :: binary()) -> ljid().
|
||||
decode_jid(SJID) ->
|
||||
jid:tolower(jid:from_string(SJID)).
|
||||
|
||||
-spec(decode_affiliation/1 ::
|
||||
( Arg :: binary())
|
||||
-> atom()
|
||||
).
|
||||
-spec decode_affiliation(Arg :: binary()) -> atom().
|
||||
decode_affiliation(<<"o">>) -> owner;
|
||||
decode_affiliation(<<"p">>) -> publisher;
|
||||
decode_affiliation(<<"u">>) -> publish_only;
|
||||
@ -991,19 +979,13 @@ decode_affiliation(<<"m">>) -> member;
|
||||
decode_affiliation(<<"c">>) -> outcast;
|
||||
decode_affiliation(_) -> none.
|
||||
|
||||
-spec(decode_subscription/1 ::
|
||||
( Arg :: binary())
|
||||
-> atom()
|
||||
).
|
||||
-spec decode_subscription(Arg :: binary()) -> atom().
|
||||
decode_subscription(<<"s">>) -> subscribed;
|
||||
decode_subscription(<<"p">>) -> pending;
|
||||
decode_subscription(<<"u">>) -> unconfigured;
|
||||
decode_subscription(_) -> none.
|
||||
|
||||
-spec(decode_subscriptions/1 ::
|
||||
( Subscriptions :: binary())
|
||||
-> [] | [{atom(), binary()},...]
|
||||
).
|
||||
-spec decode_subscriptions(Subscriptions :: binary()) -> [] | [{atom(), binary()},...].
|
||||
decode_subscriptions(Subscriptions) ->
|
||||
lists:foldl(fun (Subscription, Acc) ->
|
||||
case str:tokens(Subscription, <<":">>) of
|
||||
@ -1013,36 +995,24 @@ decode_subscriptions(Subscriptions) ->
|
||||
end,
|
||||
[], str:tokens(Subscriptions, <<",">>)).
|
||||
|
||||
-spec(encode_jid/1 ::
|
||||
( JID :: ljid())
|
||||
-> binary()
|
||||
).
|
||||
-spec encode_jid(JID :: ljid()) -> binary().
|
||||
encode_jid(JID) ->
|
||||
jid:to_string(JID).
|
||||
|
||||
-spec(encode_jid_like/1 :: (JID :: ljid()) -> binary()).
|
||||
-spec encode_jid_like(JID :: ljid()) -> binary().
|
||||
encode_jid_like(JID) ->
|
||||
ejabberd_sql:escape_like_arg_circumflex(jid:to_string(JID)).
|
||||
|
||||
-spec(encode_host/1 ::
|
||||
( Host :: host())
|
||||
-> binary()
|
||||
).
|
||||
-spec encode_host(Host :: host()) -> binary().
|
||||
encode_host({_U, _S, _R} = LJID) -> encode_jid(LJID);
|
||||
encode_host(Host) -> Host.
|
||||
|
||||
-spec(encode_host_like/1 ::
|
||||
( Host :: host())
|
||||
-> binary()
|
||||
).
|
||||
-spec encode_host_like(Host :: host()) -> binary().
|
||||
encode_host_like({_U, _S, _R} = LJID) -> ejabberd_sql:escape(encode_jid_like(LJID));
|
||||
encode_host_like(Host) ->
|
||||
ejabberd_sql:escape(ejabberd_sql:escape_like_arg_circumflex(Host)).
|
||||
|
||||
-spec(encode_affiliation/1 ::
|
||||
( Arg :: atom())
|
||||
-> binary()
|
||||
).
|
||||
-spec encode_affiliation(Arg :: atom()) -> binary().
|
||||
encode_affiliation(owner) -> <<"o">>;
|
||||
encode_affiliation(publisher) -> <<"p">>;
|
||||
encode_affiliation(publish_only) -> <<"u">>;
|
||||
@ -1050,19 +1020,13 @@ encode_affiliation(member) -> <<"m">>;
|
||||
encode_affiliation(outcast) -> <<"c">>;
|
||||
encode_affiliation(_) -> <<"n">>.
|
||||
|
||||
-spec(encode_subscription/1 ::
|
||||
( Arg :: atom())
|
||||
-> binary()
|
||||
).
|
||||
-spec encode_subscription(Arg :: atom()) -> binary().
|
||||
encode_subscription(subscribed) -> <<"s">>;
|
||||
encode_subscription(pending) -> <<"p">>;
|
||||
encode_subscription(unconfigured) -> <<"u">>;
|
||||
encode_subscription(_) -> <<"n">>.
|
||||
|
||||
-spec(encode_subscriptions/1 ::
|
||||
( Subscriptions :: [] | [{atom(), binary()},...])
|
||||
-> binary()
|
||||
).
|
||||
-spec encode_subscriptions(Subscriptions :: [] | [{atom(), binary()},...]) -> binary().
|
||||
encode_subscriptions(Subscriptions) ->
|
||||
str:join([<<(encode_subscription(S))/binary, ":", SubId/binary>>
|
||||
|| {S, SubId} <- Subscriptions], <<",">>).
|
||||
|
@ -167,12 +167,8 @@ oid(Key, Name) -> {Key, Name}.
|
||||
|
||||
%% Key = jlib:jid() | host()
|
||||
%% Node = string()
|
||||
-spec(find_node/2 ::
|
||||
(
|
||||
Key :: mod_pubsub:hostPubsub(),
|
||||
Node :: mod_pubsub:nodeId())
|
||||
-> mod_pubsub:pubsubNode() | false
|
||||
).
|
||||
-spec find_node(Key :: mod_pubsub:hostPubsub(), Node :: mod_pubsub:nodeId()) ->
|
||||
mod_pubsub:pubsubNode() | false.
|
||||
find_node(Key, Node) ->
|
||||
case mnesia:read(pubsub_node, oid(Key, Node), read) of
|
||||
[] -> false;
|
||||
@ -188,14 +184,11 @@ find_opt(Key, Default, Options) ->
|
||||
_ -> Default
|
||||
end.
|
||||
|
||||
-spec(traversal_helper/4 ::
|
||||
(
|
||||
Pred :: fun(),
|
||||
Tr :: fun(),
|
||||
Host :: mod_pubsub:hostPubsub(),
|
||||
Nodes :: [mod_pubsub:nodeId(),...])
|
||||
-> [{Depth::non_neg_integer(), Nodes::[mod_pubsub:pubsubNode(),...]}]
|
||||
).
|
||||
-spec traversal_helper(Pred :: fun(), Tr :: fun(), Host :: mod_pubsub:hostPubsub(),
|
||||
Nodes :: [mod_pubsub:nodeId(),...]) ->
|
||||
[{Depth::non_neg_integer(),
|
||||
Nodes::[mod_pubsub:pubsubNode(),...]}].
|
||||
|
||||
traversal_helper(Pred, Tr, Host, Nodes) ->
|
||||
traversal_helper(Pred, Tr, 0, Host, Nodes, []).
|
||||
|
||||
@ -220,15 +213,10 @@ remove_config_parent(Node, [{collection, Parents} | T], Acc) ->
|
||||
remove_config_parent(Node, [H | T], Acc) ->
|
||||
remove_config_parent(Node, T, [H | Acc]).
|
||||
|
||||
-spec(validate_parentage/3 ::
|
||||
(
|
||||
Key :: mod_pubsub:hostPubsub(),
|
||||
Owners :: [ljid(),...],
|
||||
Parent_Nodes :: [mod_pubsub:nodeId()])
|
||||
-> true
|
||||
%%%
|
||||
| {error, xmlel()}
|
||||
).
|
||||
-spec validate_parentage(Key :: mod_pubsub:hostPubsub(), Owners :: [ljid(),...],
|
||||
Parent_Nodes :: [mod_pubsub:nodeId()]) ->
|
||||
true | {error, xmlel()}.
|
||||
|
||||
validate_parentage(_Key, _Owners, []) ->
|
||||
true;
|
||||
validate_parentage(Key, Owners, [[] | T]) ->
|
||||
|
@ -152,13 +152,9 @@ create_table() ->
|
||||
Other -> Other
|
||||
end.
|
||||
|
||||
-spec(add_subscription/3 ::
|
||||
(
|
||||
_JID :: ljid(),
|
||||
_NodeId :: mod_pubsub:nodeIdx(),
|
||||
Options :: [] | mod_pubsub:subOptions())
|
||||
-> SubId :: mod_pubsub:subId()
|
||||
).
|
||||
-spec add_subscription(_JID :: ljid(), _NodeId :: mod_pubsub:nodeIdx(),
|
||||
Options :: [] | mod_pubsub:subOptions()) ->
|
||||
SubId :: mod_pubsub:subId().
|
||||
|
||||
add_subscription(_JID, _NodeId, []) -> make_subid();
|
||||
add_subscription(_JID, _NodeId, Options) ->
|
||||
@ -166,25 +162,13 @@ add_subscription(_JID, _NodeId, Options) ->
|
||||
mnesia:write(#pubsub_subscription{subid = SubID, options = Options}),
|
||||
SubID.
|
||||
|
||||
-spec(delete_subscription/3 ::
|
||||
(
|
||||
_JID :: _,
|
||||
_NodeId :: _,
|
||||
SubId :: mod_pubsub:subId())
|
||||
-> ok
|
||||
).
|
||||
-spec delete_subscription(_JID :: _, _NodeId :: _, SubId :: mod_pubsub:subId()) -> ok.
|
||||
|
||||
delete_subscription(_JID, _NodeId, SubID) ->
|
||||
mnesia:delete({pubsub_subscription, SubID}).
|
||||
|
||||
-spec(read_subscription/3 ::
|
||||
(
|
||||
_JID :: ljid(),
|
||||
_NodeId :: _,
|
||||
SubID :: mod_pubsub:subId())
|
||||
-> mod_pubsub:pubsubSubscription()
|
||||
| {error, notfound}
|
||||
).
|
||||
-spec read_subscription(_JID :: ljid(), _NodeId :: _, SubID :: mod_pubsub:subId()) ->
|
||||
mod_pubsub:pubsubSubscription() | {error, notfound}.
|
||||
|
||||
read_subscription(_JID, _NodeId, SubID) ->
|
||||
case mnesia:read({pubsub_subscription, SubID}) of
|
||||
@ -192,19 +176,13 @@ read_subscription(_JID, _NodeId, SubID) ->
|
||||
_ -> {error, notfound}
|
||||
end.
|
||||
|
||||
-spec(write_subscription/4 ::
|
||||
(
|
||||
_JID :: ljid(),
|
||||
_NodeId :: _,
|
||||
SubID :: mod_pubsub:subId(),
|
||||
Options :: mod_pubsub:subOptions())
|
||||
-> ok
|
||||
).
|
||||
-spec write_subscription(_JID :: ljid(), _NodeId :: _, SubID :: mod_pubsub:subId(),
|
||||
Options :: mod_pubsub:subOptions()) -> ok.
|
||||
|
||||
write_subscription(_JID, _NodeId, SubID, Options) ->
|
||||
mnesia:write(#pubsub_subscription{subid = SubID, options = Options}).
|
||||
|
||||
-spec(make_subid/0 :: () -> SubId::mod_pubsub:subId()).
|
||||
-spec make_subid() -> SubId::mod_pubsub:subId().
|
||||
make_subid() ->
|
||||
{T1, T2, T3} = p1_time_compat:timestamp(),
|
||||
iolist_to_binary(io_lib:fwrite("~.16B~.16B~.16B", [T1, T2, T3])).
|
||||
@ -272,13 +250,8 @@ xopt_to_bool(Option, _) ->
|
||||
ErrTxt = iolist_to_binary(io_lib:format(Txt, [Option])),
|
||||
{error, ?ERRT_NOT_ACCEPTABLE(?MYLANG, ErrTxt)}.
|
||||
|
||||
-spec(get_option_xfield/3 ::
|
||||
(
|
||||
Lang :: binary(),
|
||||
Key :: atom(),
|
||||
Options :: mod_pubsub:subOptions())
|
||||
-> xmlel()
|
||||
).
|
||||
-spec get_option_xfield(Lang :: binary(), Key :: atom(),
|
||||
Options :: mod_pubsub:subOptions()) -> xmlel().
|
||||
|
||||
%% Return a field for an XForm for Key, with data filled in, if
|
||||
%% applicable, from Options.
|
||||
|
@ -73,54 +73,34 @@
|
||||
|
||||
init() -> ok = create_table().
|
||||
|
||||
-spec(subscribe_node/3 ::
|
||||
(
|
||||
_JID :: _,
|
||||
_NodeId :: _,
|
||||
Options :: [] | mod_pubsub:subOptions())
|
||||
-> {result, mod_pubsub:subId()}
|
||||
).
|
||||
-spec subscribe_node(_JID :: _, _NodeId :: _, Options :: [] | mod_pubsub:subOptions()) ->
|
||||
{result, mod_pubsub:subId()}.
|
||||
|
||||
subscribe_node(_JID, _NodeId, Options) ->
|
||||
SubID = make_subid(),
|
||||
(?DB_MOD):add_subscription(#pubsub_subscription{subid = SubID, options = Options}),
|
||||
{result, SubID}.
|
||||
|
||||
-spec(unsubscribe_node/3 ::
|
||||
(
|
||||
_JID :: _,
|
||||
_NodeId :: _,
|
||||
SubID :: mod_pubsub:subId())
|
||||
-> {result, mod_pubsub:subscription()}
|
||||
| {error, notfound}
|
||||
).
|
||||
-spec unsubscribe_node(_JID :: _, _NodeId :: _, SubID :: mod_pubsub:subId()) ->
|
||||
{result, mod_pubsub:subscription()} | {error, notfound}.
|
||||
|
||||
unsubscribe_node(_JID, _NodeId, SubID) ->
|
||||
case (?DB_MOD):read_subscription(SubID) of
|
||||
{ok, Sub} -> (?DB_MOD):delete_subscription(SubID), {result, Sub};
|
||||
notfound -> {error, notfound}
|
||||
end.
|
||||
|
||||
-spec(get_subscription/3 ::
|
||||
(
|
||||
_JID :: _,
|
||||
_NodeId :: _,
|
||||
SubId :: mod_pubsub:subId())
|
||||
-> {result, mod_pubsub:subscription()}
|
||||
| {error, notfound}
|
||||
).
|
||||
-spec get_subscription(_JID :: _, _NodeId :: _, SubId :: mod_pubsub:subId()) ->
|
||||
{result, mod_pubsub:subscription()} | {error, notfound}.
|
||||
|
||||
get_subscription(_JID, _NodeId, SubID) ->
|
||||
case (?DB_MOD):read_subscription(SubID) of
|
||||
{ok, Sub} -> {result, Sub};
|
||||
notfound -> {error, notfound}
|
||||
end.
|
||||
|
||||
-spec(set_subscription/4 ::
|
||||
(
|
||||
_JID :: _,
|
||||
_NodeId :: _,
|
||||
SubId :: mod_pubsub:subId(),
|
||||
Options :: mod_pubsub:subOptions())
|
||||
-> {result, ok}
|
||||
).
|
||||
-spec set_subscription(_JID :: _, _NodeId :: _, SubId :: mod_pubsub:subId(),
|
||||
Options :: mod_pubsub:subOptions()) -> {result, ok}.
|
||||
set_subscription(_JID, _NodeId, SubID, Options) ->
|
||||
case (?DB_MOD):read_subscription(SubID) of
|
||||
{ok, _} ->
|
||||
@ -167,7 +147,7 @@ parse_options_xform(XFields) ->
|
||||
%%====================================================================
|
||||
create_table() -> ok.
|
||||
|
||||
-spec(make_subid/0 :: () -> mod_pubsub:subId()).
|
||||
-spec make_subid() -> mod_pubsub:subId().
|
||||
make_subid() ->
|
||||
{T1, T2, T3} = p1_time_compat:timestamp(),
|
||||
iolist_to_binary(io_lib:fwrite("~.16B~.16B~.16B", [T1, T2, T3])).
|
||||
|
Loading…
Reference in New Issue
Block a user