# HG changeset patch # User Paul Aurich # Date 1249100679 0 # Node ID 46e80810b095ca85408715116c88c2ca79fb2afb # Parent 53f0956f76dcde83a8a1974b03840bfc39982587 jabber: Better inactivity timer logic. diff -r 53f0956f76dc -r 46e80810b095 libpurple/protocols/jabber/bosh.c --- a/libpurple/protocols/jabber/bosh.c Sat Aug 01 04:01:51 2009 +0000 +++ b/libpurple/protocols/jabber/bosh.c Sat Aug 01 04:24:39 2009 +0000 @@ -400,6 +400,21 @@ return TRUE; } +static void +restart_inactivity_timer(PurpleBOSHConnection *conn) +{ + if (conn->inactivity_timer != 0) { + purple_timeout_remove(conn->inactivity_timer); + conn->inactivity_timer = 0; + } + + if (conn->max_inactivity != 0) { + conn->inactivity_timer = + purple_timeout_add_seconds(conn->max_inactivity - 5 /* rounding */, + bosh_inactivity_cb, conn); + } +} + static void jabber_bosh_connection_received(PurpleBOSHConnection *conn, xmlnode *node) { xmlnode *child; JabberStream *js = conn->js; @@ -500,12 +515,12 @@ conn->max_inactivity = 0; } else { /* TODO: Integrate this with jabber.c keepalive checks... */ + /* TODO: Can this check fail? It shouldn't */ if (conn->inactivity_timer == 0) { - purple_debug_misc("jabber", "Starting BOSH inactivity timer for %d secs (compensating for rounding)\n", + purple_debug_misc("jabber", "Starting BOSH inactivity timer " + "for %d secs (compensating for rounding)\n", conn->max_inactivity - 5); - conn->inactivity_timer = purple_timeout_add_seconds( - conn->max_inactivity - 5 /* rounding */, - bosh_inactivity_cb, conn); + restart_inactivity_timer(conn); } } } @@ -919,6 +934,9 @@ int ret; size_t len; + /* Sending something to the server, restart the inactivity timer */ + restart_inactivity_timer(conn->bosh); + data = g_strdup_printf("POST %s HTTP/1.1\r\n" "Host: %s\r\n" "User-Agent: %s\r\n"