about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-11-07 01:10:05 +0000
committerJames Booth <boothj5@gmail.com>2012-11-07 01:10:05 +0000
commit82e65734c0cf81a8cc01064dfe65b22433e22db5 (patch)
tree904feb7f527608ec07abf942c87073cd37c51bc7 /src
parentd2a923126b428dfc6decd133f649820c8f7ad407 (diff)
downloadprofani-tty-82e65734c0cf81a8cc01064dfe65b22433e22db5.tar.gz
jabber: tidy groupchat message handler
Diffstat (limited to 'src')
-rw-r--r--src/jabber.c84
1 files changed, 39 insertions, 45 deletions
diff --git a/src/jabber.c b/src/jabber.c
index 5187d86b..e7a4cf40 100644
--- a/src/jabber.c
+++ b/src/jabber.c
@@ -379,57 +379,51 @@ _jabber_roster_request(void)
 static int
 _groupchat_message_handler(xmpp_stanza_t * const stanza)
 {
+    char *room = NULL;
+    char *nick = NULL;
+
     gchar *room_jid = xmpp_stanza_get_attribute(stanza, "from");
+    if (!room_parse_room_jid(room_jid, &room, &nick)) {
+        log_error("Could not parse room jid: %s", room_jid);
+        g_free(room);
+        g_free(nick);
 
-    if (room_is_active(room_jid)) {
-        xmpp_stanza_t *delay = xmpp_stanza_get_child_by_name(stanza, "delay");
-
-        // handle chat room history
-        if (delay != NULL) {
-            char *utc_stamp = xmpp_stanza_get_attribute(delay, "stamp");
-            GTimeVal tv_stamp;
-
-            if(g_time_val_from_iso8601(utc_stamp, &tv_stamp)) {
-                xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, "body");
-
-                if (body != NULL) {
-                    char *room = NULL;
-                    char *nick = NULL;
-                    gboolean parse_success = room_parse_room_jid(room_jid, &room, &nick);
-
-                    if (parse_success) {
-                        char *message = xmpp_stanza_get_text(body);
-                        prof_handle_room_history(room, nick, tv_stamp, message);
-                        g_free(room);
-                        g_free(nick);
-                    } else {
-                        log_error("Could not parse room jid: %s", room_jid);
-                    }
-                }
-            } else {
-                log_error("Couldn't parse datetime string receiving room history: %s", utc_stamp);
-            }
+        return 1;
+    }
 
-        // handle regular chat room message
-        } else {
-            xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, "body");
-            if (body != NULL) {
-                char *room = NULL;
-                char *nick = NULL;
-                gboolean parse_success = room_parse_room_jid(room_jid, &room, &nick);
-
-                if (parse_success) {
-                    char *message = xmpp_stanza_get_text(body);
-                    prof_handle_room_message(room, nick, message);
-                    g_free(room);
-                    g_free(nick);
-                } else {
-                    log_error("Could not parse room jid: %s", room_jid);
-                }
+    if (!room_is_active(room_jid)) {
+        log_error("Message recieved for inactive groupchat: %s", room_jid);
+        g_free(room);
+        g_free(nick);
+
+        return 1;
+    }
+
+    char *message = NULL;
+    xmpp_stanza_t *delay = xmpp_stanza_get_child_by_name(stanza, "delay");
+    xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, "body");
+    if (body != NULL) {
+        message = xmpp_stanza_get_text(body);
+    }
+
+    // handle chat room history
+    if (delay != NULL) {
+        char *utc_stamp = xmpp_stanza_get_attribute(delay, "stamp");
+        GTimeVal tv_stamp;
+
+        if (g_time_val_from_iso8601(utc_stamp, &tv_stamp)) {
+            if (message != NULL) {
+                prof_handle_room_history(room, nick, tv_stamp, message);
             }
+        } else {
+            log_error("Couldn't parse datetime string receiving room history: %s", utc_stamp);
         }
+
+    // handle regular chat room message
     } else {
-        log_error("Message recieved for inactive groupchat: %s", room_jid);
+        if (message != NULL) {
+            prof_handle_room_message(room, nick, message);
+        }
     }
 
     return 1;