Extend autoping timer on each stanza we receive.

Sometimes the server is too busy sending other stanzas or our connection is
saturated because of something else, so the pong arrives too late.
Prevent the autoping disconnect event by extending the timeout
each time a stanza is received.

Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
This commit is contained in:
Steffen Jaeckel
2023-05-22 16:58:57 +02:00
parent 0de0594c5a
commit e668c4f7df
4 changed files with 12 additions and 2 deletions

View File

@@ -176,8 +176,7 @@ static int
_iq_handler(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* const userdata)
{
log_debug("iq stanza handler fired");
iq_autoping_timer_cancel(); // reset the autoping timer
autoping_timer_extend();
char* text;
size_t text_size;
@@ -1391,6 +1390,13 @@ _autoping_timed_send(xmpp_conn_t* const conn, void* const userdata)
return 1;
}
void
autoping_timer_extend(void)
{
if (autoping_time)
g_timer_start(autoping_time);
}
static int
_auto_pong_id_handler(xmpp_stanza_t* const stanza, void* const userdata)
{

View File

@@ -153,6 +153,7 @@ static int
_message_handler(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* const userdata)
{
log_debug("Message stanza handler fired");
autoping_timer_extend();
if (_handled_by_plugin(stanza)) {
return 1;

View File

@@ -347,6 +347,7 @@ static int
_presence_handler(xmpp_conn_t* const conn, xmpp_stanza_t* const stanza, void* const userdata)
{
log_debug("Presence stanza handler fired");
autoping_timer_extend();
char* text = NULL;
size_t text_size;

View File

@@ -269,6 +269,8 @@ void iq_mam_request_older(ProfChatWin* win);
void iq_register_change_password(const char* const user, const char* const password);
void iq_muc_register_nick(const char* const roomjid);
void autoping_timer_extend(void);
EntityCapabilities* caps_lookup(const char* const jid);
void caps_close(void);
void caps_destroy(EntityCapabilities* caps);