aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_sm.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_sm.erl')
-rw-r--r--src/ejabberd_sm.erl52
1 files changed, 2 insertions, 50 deletions
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index 8a9893437..e35f31079 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -39,7 +39,6 @@
stop/0,
route/1,
route/2,
- process_iq/1,
open_session/5,
open_session/6,
close_session/4,
@@ -58,8 +57,6 @@
get_vh_session_list/1,
get_vh_session_number/1,
get_vh_by_backend/1,
- register_iq_handler/4,
- unregister_iq_handler/2,
force_update_presence/1,
connected_users/0,
connected_users_number/0,
@@ -397,17 +394,6 @@ get_vh_session_number(Server) ->
Mod = get_sm_backend(LServer),
length(online(get_sessions(Mod, LServer))).
--spec register_iq_handler(binary(), binary(), atom(), atom()) -> ok.
-
-register_iq_handler(Host, XMLNS, Module, Fun) ->
- ?GEN_SERVER:cast(?MODULE,
- {register_iq_handler, Host, XMLNS, Module, Fun}).
-
--spec unregister_iq_handler(binary(), binary()) -> ok.
-
-unregister_iq_handler(Host, XMLNS) ->
- ?GEN_SERVER:cast(?MODULE, {unregister_iq_handler, Host, XMLNS}).
-
%% Why the hell do we have so many similar kicks?
c2s_handle_info(#{lang := Lang} = State, replaced) ->
State1 = State#{replaced => true},
@@ -437,7 +423,7 @@ init([]) ->
init_cache(),
lists:foreach(fun(Mod) -> Mod:init() end, get_sm_backends()),
clean_cache(),
- ets:new(sm_iqtable, [named_table, public, {read_concurrency, true}]),
+ gen_iq_handler:start(?MODULE),
ejabberd_hooks:add(host_up, ?MODULE, host_up, 50),
ejabberd_hooks:add(host_down, ?MODULE, host_down, 60),
ejabberd_hooks:add(config_reloaded, ?MODULE, config_reloaded, 50),
@@ -448,15 +434,6 @@ init([]) ->
handle_call(_Request, _From, State) ->
Reply = ok, {reply, Reply, State}.
-handle_cast({register_iq_handler, Host, XMLNS, Module, Function},
- State) ->
- ets:insert(sm_iqtable,
- {{Host, XMLNS}, Module, Function}),
- {noreply, State};
-handle_cast({unregister_iq_handler, Host, XMLNS},
- State) ->
- ets:delete(sm_iqtable, {Host, XMLNS}),
- {noreply, State};
handle_cast(_Msg, State) -> {noreply, State}.
handle_info({route, Packet}, State) ->
@@ -664,7 +641,7 @@ do_route(#message{to = #jid{lresource = <<"">>}, type = T} = Packet) ->
end;
do_route(#iq{to = #jid{lresource = <<"">>}} = Packet) ->
?DEBUG("processing IQ to bare JID:~n~s", [xmpp:pp(Packet)]),
- process_iq(Packet);
+ gen_iq_handler:handle(?MODULE, Packet);
do_route(Packet) ->
?DEBUG("processing packet to full JID:~n~s", [xmpp:pp(Packet)]),
To = xmpp:get_to(Packet),
@@ -849,31 +826,6 @@ get_max_user_sessions(LUser, Host) ->
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--spec process_iq(iq()) -> any().
-process_iq(#iq{to = To, type = T, lang = Lang, sub_els = [El]} = Packet)
- when T == get; T == set ->
- XMLNS = xmpp:get_ns(El),
- Host = To#jid.lserver,
- case ets:lookup(sm_iqtable, {Host, XMLNS}) of
- [{_, Module, Function}] ->
- gen_iq_handler:handle(Host, Module, Function, Packet);
- [] ->
- Txt = <<"No module is handling this query">>,
- Err = xmpp:err_service_unavailable(Txt, Lang),
- ejabberd_router:route_error(Packet, Err)
- end;
-process_iq(#iq{type = T, lang = Lang, sub_els = SubEls} = Packet)
- when T == get; T == set ->
- Txt = case SubEls of
- [] -> <<"No child elements found">>;
- _ -> <<"Too many child elements">>
- end,
- Err = xmpp:err_bad_request(Txt, Lang),
- ejabberd_router:route_error(Packet, Err);
-process_iq(#iq{}) ->
- ok.
-
-spec force_update_presence({binary(), binary()}) -> ok.
force_update_presence({LUser, LServer}) ->