about summary refs log tree commit diff stats
path: root/src/jabber.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/jabber.c')
-rw-r--r--src/jabber.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/jabber.c b/src/jabber.c
index 42051ffb..3ceb238d 100644
--- a/src/jabber.c
+++ b/src/jabber.c
@@ -426,18 +426,34 @@ _groupchat_message_handler(xmpp_stanza_t * const stanza)
     char *room = NULL;
     char *nick = NULL;
     char *message = NULL;
-    xmpp_stanza_t *subject = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_SUBJECT);
     gchar *room_jid = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
 
-    // handle subject
-    if (subject != NULL) {
-        message = xmpp_stanza_get_text(subject);
-        if (message != NULL) {
-            room = room_get_room_from_full_jid(room_jid);
-            prof_handle_room_subject(room, message);
-        }
+    // handle room broadcasts
+    if (room_from_jid_is_room(room_jid)) {
+        xmpp_stanza_t *subject = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_SUBJECT);
 
-        return 1;
+        // handle subject
+        if (subject != NULL) {
+            message = xmpp_stanza_get_text(subject);
+            if (message != NULL) {
+                room = room_get_room_from_full_jid(room_jid);
+                prof_handle_room_subject(room, message);
+            }
+
+            return 1;
+
+        // handle other room broadcasts
+        } else {
+            xmpp_stanza_t *body = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_BODY);
+            if (body != NULL) {
+                message = xmpp_stanza_get_text(body);
+                if (message != NULL) {
+                    prof_handle_room_broadcast(room_jid, message);
+                }
+            }
+
+            return 1;
+        }
     }
 
     // room jid not of form room/nick