1
0
Fork 0

Cancel autoping timer on disconnect or connection loss

If Profanity is disconnected in any way before ping response is
received, the autoping timer will expire after the next connection
is established. As result, user will be disconnected immediately.

Cancel autoping timer in ev_disconnect_cleanup(), so it is done
for all kind of disconnections.
This commit is contained in:
Dmitry Podgorny 2019-06-03 13:04:04 +03:00
parent 5b4277840a
commit 6138a5f79b
4 changed files with 15 additions and 8 deletions

View File

@ -53,6 +53,7 @@ ev_disconnect_cleanup(void)
ui_disconnected();
session_disconnect();
roster_destroy();
iq_autoping_timer_cancel();
muc_invites_clear();
muc_confserver_clear();
chat_sessions_clear();

View File

@ -262,6 +262,16 @@ iq_id_handler_add(const char *const id, ProfIqCallback func, ProfIqFreeCallback
g_hash_table_insert(id_handlers, strdup(id), handler);
}
void
iq_autoping_timer_cancel(void)
{
autoping_wait = FALSE;
if (autoping_time) {
g_timer_destroy(autoping_time);
autoping_time = NULL;
}
}
void
iq_autoping_check(void)
{
@ -283,10 +293,8 @@ iq_autoping_check(void)
if (timeout > 0 && seconds_elapsed >= timeout) {
cons_show("Autoping response timed out after %u seconds.", timeout);
log_debug("Autoping check: timed out after %u seconds, disconnecting", timeout);
iq_autoping_timer_cancel();
session_autoping_fail();
autoping_wait = FALSE;
g_timer_destroy(autoping_time);
autoping_time = NULL;
}
}
@ -1371,11 +1379,7 @@ _autoping_timed_send(xmpp_conn_t *const conn, void *const userdata)
static int
_auto_pong_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
{
autoping_wait = FALSE;
if (autoping_time) {
g_timer_destroy(autoping_time);
autoping_time = NULL;
}
iq_autoping_timer_cancel();
const char *id = xmpp_stanza_get_id(stanza);
if (id == NULL) {

View File

@ -187,6 +187,7 @@ void iq_room_affiliation_set(const char *const room, const char *const jid, char
void iq_room_kick_occupant(const char *const room, const char *const nick, const char *const reason);
void iq_room_role_set(const char *const room, const char *const nick, char *role, const char *const reason);
void iq_room_role_list(const char * const room, char *role);
void iq_autoping_timer_cancel(void);
void iq_autoping_check(void);
void iq_http_upload_request(HTTPUpload *upload);
void iq_command_list(const char *const target);

View File

@ -206,6 +206,7 @@ void iq_room_role_set(const char * const room, const char * const nick, char *ro
const char * const reason) {}
void iq_room_role_list(const char * const room, char *role) {}
void iq_last_activity_request(gchar *jid) {}
void iq_autoping_timer_cancel(void) {}
void iq_autoping_check(void) {}
void iq_rooms_cache_clear(void) {}
void iq_command_list(const char *const target) {}