diff options
Diffstat (limited to 'src/jabber.c')
-rw-r--r-- | src/jabber.c | 34 |
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 |