Don't send ping if resource is gone

This commit is contained in:
Jérôme Sautret 2022-04-26 18:56:38 +02:00
parent f61f5beb5b
commit f4959c8b28
1 changed files with 37 additions and 29 deletions

View File

@ -142,10 +142,11 @@ handle_info({iq_reply, timeout, JID}, State) ->
#jid{user = User, server = Server,
resource = Resource} =
JID,
case ejabberd_sm:get_session_pid(User, Server, Resource)
of
Pid when is_pid(Pid) -> ejabberd_c2s:close(Pid, ping_timeout);
_ -> ok
case ejabberd_sm:get_session_pid(User, Server, Resource) of
Pid when is_pid(Pid) ->
ejabberd_c2s:close(Pid, ping_timeout);
_ ->
ok
end,
del_timer(JID, State#state.timers);
_ ->
@ -153,14 +154,21 @@ handle_info({iq_reply, timeout, JID}, State) ->
end,
{noreply, State#state{timers = Timers}};
handle_info({timeout, _TRef, {ping, JID}}, State) ->
Timers = case ejabberd_sm:get_session_pid(JID#jid.luser,
JID#jid.lserver,
JID#jid.lresource) of
none ->
del_timer(JID, State#state.timers);
_ ->
Host = State#state.host,
From = jid:make(Host),
IQ = #iq{from = From, to = JID, type = get, sub_els = [#ping{}]},
ejabberd_router:route_iq(IQ, JID,
gen_mod:get_module_proc(Host, ?MODULE),
State#state.ping_ack_timeout),
Timers = add_timer(JID, State#state.ping_interval,
State#state.timers),
add_timer(JID, State#state.ping_interval,
State#state.timers)
end,
{noreply, State#state{timers = Timers}};
handle_info(Info, State) ->
?WARNING_MSG("Unexpected info: ~p", [Info]),