From d533fc95953298c7c186d1eab83a78f9989772ef Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 7 Jan 2013 18:54:07 +0200 Subject: jabber.c: removed explicit type conversion According to the C99 standard integer type will be converted to real floating type before the comparison. --- src/jabber.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jabber.c b/src/jabber.c index 65ed30df..9e44bb89 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -217,7 +217,7 @@ jabber_process_events(void) } else if (prefs_get_reconnect() != 0) { if ((jabber_conn.conn_status == JABBER_DISCONNECTED) && (reconnect_timer != NULL)) { - if (g_timer_elapsed(reconnect_timer, NULL) > (prefs_get_reconnect() * 1.0)) { + if (g_timer_elapsed(reconnect_timer, NULL) > prefs_get_reconnect()) { log_debug("Attempting reconnect as %s", saved_user); jabber_connect(saved_user, saved_password, saved_altdomain); } -- cgit 1.4.1-2-gfad0 From 5e8d9e942bc2de269fa6790c298b52a3b8dd765f Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 7 Jan 2013 20:16:41 +0200 Subject: free saved login information in jabber_free_resources() --- src/jabber.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/jabber.c b/src/jabber.c index 9e44bb89..0452183d 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -82,6 +82,13 @@ static int _presence_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata); static int _ping_timed_handler(xmpp_conn_t * const conn, void * const userdata); +#define FREE_SET_NULL(resource) \ +{\ + if (resource != NULL) \ + free(resource); \ + resource = NULL; \ +} + void jabber_init(const int disable_tls) { @@ -514,8 +521,10 @@ jabber_get_status(void) void jabber_free_resources(void) { - saved_user = NULL; - saved_password = NULL; + FREE_SET_NULL(saved_user); + FREE_SET_NULL(saved_password); + FREE_SET_NULL(saved_account); + FREE_SET_NULL(saved_altdomain); chat_sessions_clear(); g_hash_table_remove_all(sub_requests); xmpp_conn_release(jabber_conn.conn); -- cgit 1.4.1-2-gfad0 From d0ab292d73902f7fe5696436ccd64d913bdc8719 Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 7 Jan 2013 20:24:04 +0200 Subject: jabber.c: added assert before reconnect_timer allocation Development build will be terminated if reconnect_timer was allocated previously and wasn't destroyed. --- src/jabber.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/jabber.c b/src/jabber.c index 0452183d..3372f845 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -22,6 +22,7 @@ #include #include +#include #include @@ -800,6 +801,7 @@ _connection_handler(xmpp_conn_t * const conn, } else if (jabber_conn.conn_status == JABBER_CONNECTED) { prof_handle_lost_connection(); if (prefs_get_reconnect() != 0) { + assert(reconnect_timer == NULL); reconnect_timer = g_timer_new(); } xmpp_stop(ctx); -- cgit 1.4.1-2-gfad0 From 59676bd16e69c37b07a12c4f2a3296195f9e1d76 Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 7 Jan 2013 20:33:56 +0200 Subject: jabber.c: removed extra resources release These resources are released in jabber_free_resources(). --- src/jabber.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/jabber.c b/src/jabber.c index 3372f845..fb558020 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -788,14 +788,6 @@ _connection_handler(xmpp_conn_t * const conn, if (jabber_conn.conn_status == JABBER_DISCONNECTING) { jabber_conn.conn_status = JABBER_DISCONNECTED; jabber_conn.presence = PRESENCE_OFFLINE; - if (saved_user != NULL) { - free(saved_user); - saved_user = NULL; - } - if (saved_password != NULL) { - free(saved_password); - saved_password = NULL; - } // lost connection for unkown reason } else if (jabber_conn.conn_status == JABBER_CONNECTED) { -- cgit 1.4.1-2-gfad0 From 621832ee4a621f82f4bd693e7c7bf52944c3671a Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 7 Jan 2013 21:21:19 +0200 Subject: free resources when login attempt fails The next call of jabber_connect allocates these resources again. --- src/jabber.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/jabber.c b/src/jabber.c index fb558020..8d2dc572 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -804,17 +804,9 @@ _connection_handler(xmpp_conn_t * const conn, } else { if (reconnect_timer == NULL) { prof_handle_failed_login(); - if (saved_user != NULL) { - free(saved_user); - saved_user = NULL; - } - if (saved_password != NULL) { - free(saved_password); - saved_password = NULL; - } - xmpp_stop(ctx); jabber_conn.conn_status = JABBER_DISCONNECTED; jabber_conn.presence = PRESENCE_OFFLINE; + jabber_free_resources(); } else { xmpp_stop(ctx); if (prefs_get_reconnect() != 0) { -- cgit 1.4.1-2-gfad0 From e0e8110746a1dfeeff6bf03aae00d7d0c9a56517 Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 7 Jan 2013 21:35:20 +0200 Subject: jabber.c: set jabber status in one place in connection handler --- src/jabber.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/jabber.c b/src/jabber.c index 8d2dc572..a13feea8 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -202,8 +202,8 @@ jabber_disconnect(void) // if connected, send end stream and wait for response if (jabber_conn.conn_status == JABBER_CONNECTED) { log_info("Closing connection"); - xmpp_disconnect(jabber_conn.conn); jabber_conn.conn_status = JABBER_DISCONNECTING; + xmpp_disconnect(jabber_conn.conn); while (jabber_get_connection_status() == JABBER_DISCONNECTING) { jabber_process_events(); @@ -782,40 +782,33 @@ _connection_handler(xmpp_conn_t * const conn, } } - } else { - - // received close stream response from server after disconnect - if (jabber_conn.conn_status == JABBER_DISCONNECTING) { - jabber_conn.conn_status = JABBER_DISCONNECTED; - jabber_conn.presence = PRESENCE_OFFLINE; + } else if (status == XMPP_CONN_DISCONNECT) { // lost connection for unkown reason - } else if (jabber_conn.conn_status == JABBER_CONNECTED) { + if (jabber_conn.conn_status == JABBER_CONNECTED) { prof_handle_lost_connection(); if (prefs_get_reconnect() != 0) { assert(reconnect_timer == NULL); reconnect_timer = g_timer_new(); } xmpp_stop(ctx); - jabber_conn.conn_status = JABBER_DISCONNECTED; - jabber_conn.presence = PRESENCE_OFFLINE; // login attempt failed - } else { + } else if (jabber_conn.conn_status != JABBER_DISCONNECTING) { if (reconnect_timer == NULL) { prof_handle_failed_login(); - jabber_conn.conn_status = JABBER_DISCONNECTED; - jabber_conn.presence = PRESENCE_OFFLINE; jabber_free_resources(); } else { xmpp_stop(ctx); if (prefs_get_reconnect() != 0) { g_timer_start(reconnect_timer); } - jabber_conn.conn_status = JABBER_DISCONNECTED; - jabber_conn.presence = PRESENCE_OFFLINE; } } + + // close stream response from server after disconnect is handled too + jabber_conn.conn_status = JABBER_DISCONNECTED; + jabber_conn.presence = PRESENCE_OFFLINE; } } -- cgit 1.4.1-2-gfad0 From 5542752afbf581ef9a060472c0db08107d9810e4 Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 7 Jan 2013 22:02:07 +0200 Subject: jabber.c: removed xmpp_stop calls xmpp_stop() stops event loop xmpp_run() that profanity doesn't start. --- src/jabber.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/jabber.c b/src/jabber.c index a13feea8..48495000 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -791,7 +791,6 @@ _connection_handler(xmpp_conn_t * const conn, assert(reconnect_timer == NULL); reconnect_timer = g_timer_new(); } - xmpp_stop(ctx); // login attempt failed } else if (jabber_conn.conn_status != JABBER_DISCONNECTING) { @@ -799,7 +798,6 @@ _connection_handler(xmpp_conn_t * const conn, prof_handle_failed_login(); jabber_free_resources(); } else { - xmpp_stop(ctx); if (prefs_get_reconnect() != 0) { g_timer_start(reconnect_timer); } -- cgit 1.4.1-2-gfad0 From 0f0e04603a1c8a08532764dddf76b8535e0bb80e Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Mon, 7 Jan 2013 22:13:24 +0200 Subject: added resources release to connetion handler --- src/chat_session.c | 3 ++- src/jabber.c | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/chat_session.c b/src/chat_session.c index 3cd50404..10465032 100644 --- a/src/chat_session.c +++ b/src/chat_session.c @@ -63,7 +63,8 @@ chat_sessions_init(void) void chat_sessions_clear(void) { - g_hash_table_remove_all(sessions); + if (sessions != NULL) + g_hash_table_remove_all(sessions); } void diff --git a/src/jabber.c b/src/jabber.c index 48495000..ffe4d2b6 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -527,7 +527,8 @@ jabber_free_resources(void) FREE_SET_NULL(saved_account); FREE_SET_NULL(saved_altdomain); chat_sessions_clear(); - g_hash_table_remove_all(sub_requests); + if (sub_requests != NULL) + g_hash_table_remove_all(sub_requests); xmpp_conn_release(jabber_conn.conn); xmpp_ctx_free(jabber_conn.ctx); xmpp_shutdown(); @@ -790,6 +791,9 @@ _connection_handler(xmpp_conn_t * const conn, if (prefs_get_reconnect() != 0) { assert(reconnect_timer == NULL); reconnect_timer = g_timer_new(); + // TODO: free resources but leave saved_* untouched + } else { + jabber_free_resources(); } // login attempt failed @@ -801,6 +805,7 @@ _connection_handler(xmpp_conn_t * const conn, if (prefs_get_reconnect() != 0) { g_timer_start(reconnect_timer); } + // TODO: free resources but leave saved_* untouched } } -- cgit 1.4.1-2-gfad0