about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-12-31 00:11:58 +0000
committerJames Booth <boothj5@gmail.com>2015-12-31 00:11:58 +0000
commit2847e39659e40c9d0a4a7160d2a16ab221329dcc (patch)
tree2a448de65594526a3e88308f0193dcdf2bf45779 /src
parenta0c9b0cb7057e3b4d2f193a5f90467957f7a651a (diff)
downloadprofani-tty-2847e39659e40c9d0a4a7160d2a16ab221329dcc.tar.gz
Tidy ping handlers
Diffstat (limited to 'src')
-rw-r--r--src/xmpp/iq.c102
1 files changed, 53 insertions, 49 deletions
diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c
index 5930f83f..2fbc471a 100644
--- a/src/xmpp/iq.c
+++ b/src/xmpp/iq.c
@@ -126,18 +126,20 @@ iq_add_handlers(void)
 void
 iq_set_autoping(const int seconds)
 {
-    xmpp_conn_t * const conn = connection_get_conn();
-    xmpp_ctx_t * const ctx = connection_get_ctx();
+    if (jabber_get_connection_status() != JABBER_CONNECTED) {
+        return;
+    }
 
-    if (jabber_get_connection_status() == JABBER_CONNECTED) {
-        xmpp_timed_handler_delete(conn, _autoping_timed_handler);
+    xmpp_conn_t * const conn = connection_get_conn();
+    xmpp_timed_handler_delete(conn, _autoping_timed_handler);
 
-        if (seconds != 0) {
-            int millis = seconds * 1000;
-            xmpp_timed_handler_add(conn, _autoping_timed_handler, millis,
-                ctx);
-        }
+    if (seconds == 0) {
+        return;
     }
+
+    int millis = seconds * 1000;
+    xmpp_ctx_t * const ctx = connection_get_ctx();
+    xmpp_timed_handler_add(conn, _autoping_timed_handler, millis, ctx);
 }
 
 void
@@ -522,42 +524,45 @@ _error_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza,
 }
 
 static int
-_pong_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza,
-    void *const userdata)
+_auto_pong_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, void *const userdata)
 {
     char *id = xmpp_stanza_get_id(stanza);
-    char *type = xmpp_stanza_get_type(stanza);
-
-    if (id) {
-        log_debug("IQ pong handler fired, id: %s.", id);
-    } else {
+    if (id == NULL) {
         log_debug("IQ pong handler fired.");
+        return 0;
     }
 
-    if (id && type) {
-        // show warning if error
-        if (strcmp(type, STANZA_TYPE_ERROR) == 0) {
-            char *error_msg = stanza_get_error_message(stanza);
-            log_warning("Server ping (id=%s) responded with error: %s", id, error_msg);
-            free(error_msg);
-
-            // turn off autoping if error type is 'cancel'
-            xmpp_stanza_t *error = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_ERROR);
-            if (error) {
-                char *errtype = xmpp_stanza_get_type(error);
-                if (errtype) {
-                    if (strcmp(errtype, "cancel") == 0) {
-                        log_warning("Server ping (id=%s) error type 'cancel', disabling autoping.", id);
-                        prefs_set_autoping(0);
-                        cons_show_error("Server ping not supported, autoping disabled.");
-                        xmpp_timed_handler_delete(conn, _autoping_timed_handler);
-                    }
-                }
-            }
-        }
+    log_debug("IQ pong handler fired, id: %s.", id);
+
+    char *type = xmpp_stanza_get_type(stanza);
+    if (type == NULL) {
+        return 0;
+    }
+    if (g_strcmp0(type, STANZA_TYPE_ERROR) != 0) {
+        return 0;
+    }
+
+    // show warning if error
+    char *error_msg = stanza_get_error_message(stanza);
+    log_warning("Server ping (id=%s) responded with error: %s", id, error_msg);
+    free(error_msg);
+
+    // turn off autoping if error type is 'cancel'
+    xmpp_stanza_t *error = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_ERROR);
+    if (error == NULL) {
+        return 0;
+    }
+    char *errtype = xmpp_stanza_get_type(error);
+    if (errtype == NULL) {
+        return 0;
+    }
+    if (g_strcmp0(errtype, "cancel") == 0) {
+        log_warning("Server ping (id=%s) error type 'cancel', disabling autoping.", id);
+        prefs_set_autoping(0);
+        cons_show_error("Server ping not supported, autoping disabled.");
+        xmpp_timed_handler_delete(conn, _autoping_timed_handler);
     }
 
-    // remove this handler
     return 0;
 }
 
@@ -841,20 +846,19 @@ _manual_pong_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza,
 static int
 _autoping_timed_handler(xmpp_conn_t *const conn, void *const userdata)
 {
-    xmpp_ctx_t *ctx = (xmpp_ctx_t *)userdata;
-
-    if (jabber_get_connection_status() == JABBER_CONNECTED) {
-
-        xmpp_stanza_t *iq = stanza_create_ping_iq(ctx, NULL);
-        char *id = xmpp_stanza_get_id(iq);
+    if (jabber_get_connection_status() != JABBER_CONNECTED) {
+        return 1;
+    }
 
-        // add pong handler
-        xmpp_id_handler_add(conn, _pong_handler, id, ctx);
+    xmpp_ctx_t *ctx = (xmpp_ctx_t *)userdata;
+    xmpp_stanza_t *iq = stanza_create_ping_iq(ctx, NULL);
+    char *id = xmpp_stanza_get_id(iq);
 
-        xmpp_send(conn, iq);
-        xmpp_stanza_release(iq);
-    }
+    // add pong handler
+    xmpp_id_handler_add(conn, _auto_pong_handler, id, ctx);
 
+    xmpp_send(conn, iq);
+    xmpp_stanza_release(iq);
     return 1;
 }