mirror of
https://github.com/processone/ejabberd
synced 2025-10-06 03:50:15 +02:00
Initial version of new XMPP stream behaviour (for review)
This commit is contained in:
parent
23f7075313
commit
5cc8e807df
17 changed files with 1857 additions and 2998 deletions
|
@ -29,7 +29,7 @@
|
|||
|
||||
-protocol({xep, 191, '1.2'}).
|
||||
|
||||
-export([start/2, stop/1, process_iq/1,
|
||||
-export([start/2, stop/1, process_iq/1, c2s_handle_info/2,
|
||||
process_iq_set/3, process_iq_get/3, mod_opt_type/1, depends/2]).
|
||||
|
||||
-include("ejabberd.hrl").
|
||||
|
@ -52,6 +52,10 @@ start(Host, Opts) ->
|
|||
process_iq_get, 40),
|
||||
ejabberd_hooks:add(privacy_iq_set, Host, ?MODULE,
|
||||
process_iq_set, 40),
|
||||
ejabberd_hooks:add(c2s_handle_info, Host, ?MODULE,
|
||||
c2s_handle_info, 40),
|
||||
ejabberd_hooks:add(c2s_handle_info, Host, ?MODULE,
|
||||
c2s_handle_info, 40),
|
||||
mod_disco:register_feature(Host, ?NS_BLOCKING),
|
||||
gen_iq_handler:add_iq_handler(ejabberd_sm, Host,
|
||||
?NS_BLOCKING, ?MODULE, process_iq, IQDisc).
|
||||
|
@ -229,14 +233,12 @@ make_userlist(Name, List) ->
|
|||
-spec broadcast_list_update(binary(), binary(), binary(), userlist()) -> ok.
|
||||
broadcast_list_update(LUser, LServer, Name, UserList) ->
|
||||
ejabberd_sm:route(jid:make(LUser, LServer, <<"">>),
|
||||
jid:make(LUser, LServer, <<"">>),
|
||||
{broadcast, {privacy_list, UserList, Name}}).
|
||||
{privacy_list, UserList, Name}).
|
||||
|
||||
-spec broadcast_blocklist_event(binary(), binary(), block_event()) -> ok.
|
||||
broadcast_blocklist_event(LUser, LServer, Event) ->
|
||||
JID = jid:make(LUser, LServer, <<"">>),
|
||||
ejabberd_sm:route(JID, JID,
|
||||
{broadcast, {blocking, Event}}).
|
||||
ejabberd_sm:route(JID, {blocking, Event}).
|
||||
|
||||
-spec process_blocklist_get(binary(), binary(), binary()) ->
|
||||
{error, stanza_error()} | {result, block_list()}.
|
||||
|
@ -251,6 +253,27 @@ process_blocklist_get(LUser, LServer, Lang) ->
|
|||
{result, #block_list{items = Items}}
|
||||
end.
|
||||
|
||||
-spec c2s_handle_info(ejabberd_c2s:next_state(), term()) -> ejabberd_c2s:next_state().
|
||||
c2s_handle_info({noreply, #{user := U, server := S, resource := R} = State},
|
||||
{blocking, Action}) ->
|
||||
SubEl = case Action of
|
||||
{block, JIDs} ->
|
||||
#block{items = JIDs};
|
||||
{unblock, JIDs} ->
|
||||
#unblock{items = JIDs};
|
||||
unblock_all ->
|
||||
#unblock{}
|
||||
end,
|
||||
PushIQ = #iq{type = set,
|
||||
from = jid:make(U, S),
|
||||
to = jid:make(U, S, R),
|
||||
id = <<"push", (randoms:get_string())/binary>>,
|
||||
sub_els = [SubEl]},
|
||||
%% No need to replace active privacy list here,
|
||||
%% blocking pushes are always accompanied by
|
||||
%% Privacy List pushes
|
||||
ejabberd_c2s:send(State, PushIQ).
|
||||
|
||||
-spec db_mod(binary()) -> module().
|
||||
db_mod(LServer) ->
|
||||
DBType = gen_mod:db_type(LServer, mod_privacy),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue