about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2013-01-20 21:01:30 +0000
committerJames Booth <boothj5@gmail.com>2013-01-20 21:01:30 +0000
commitdfeb884e9b6114b765adae9104e68d60ef5444ab (patch)
tree34aa88c86dbac8604428bd2a8eca2f07a8ced000
parenteeafd627160ed7b52dcada511be10aebaa388392 (diff)
downloadprofani-tty-dfeb884e9b6114b765adae9104e68d60ef5444ab.tar.gz
Added check for caps in stanza
-rw-r--r--src/jabber.c31
-rw-r--r--src/stanza.c16
-rw-r--r--src/stanza.h1
3 files changed, 36 insertions, 12 deletions
diff --git a/src/jabber.c b/src/jabber.c
index bc314b0d..a9dc5709 100644
--- a/src/jabber.c
+++ b/src/jabber.c
@@ -1175,13 +1175,17 @@ _room_presence_handler(const char * const jid, xmpp_stanza_t * const stanza)
     } else {
         char *type = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_TYPE);
         char *show_str, *status_str;
-        char *caps_str = stanza_get_caps_str(stanza);
+        char *caps_str = NULL;
 
-        if (caps_str != NULL) {
-            if (!caps_contains(caps_str)) {
-                xmpp_stanza_t *iq = stanza_create_disco_iq(jabber_conn.ctx, jid, caps_str);
-                xmpp_send(jabber_conn.conn, iq);
-                xmpp_stanza_release(iq);
+        if (stanza_contains_caps(stanza)) {
+            caps_str = stanza_get_caps_str(stanza);
+
+            if (caps_str != NULL) {
+                if (!caps_contains(caps_str)) {
+                    xmpp_stanza_t *iq = stanza_create_disco_iq(jabber_conn.ctx, jid, caps_str);
+                    xmpp_send(jabber_conn.conn, iq);
+                    xmpp_stanza_release(iq);
+                }
             }
         }
 
@@ -1265,13 +1269,16 @@ _presence_handler(xmpp_conn_t * const conn,
             g_date_time_unref(now);
         }
 
-        char *caps_str = stanza_get_caps_str(stanza);
+        char *caps_str = NULL;
+        if (stanza_contains_caps(stanza)) {
+            caps_str = stanza_get_caps_str(stanza);
 
-        if (caps_str != NULL) {
-            if (!caps_contains(caps_str)) {
-                xmpp_stanza_t *iq = stanza_create_disco_iq(jabber_conn.ctx, from, caps_str);
-                xmpp_send(jabber_conn.conn, iq);
-                xmpp_stanza_release(iq);
+            if (caps_str != NULL) {
+                if (!caps_contains(caps_str)) {
+                    xmpp_stanza_t *iq = stanza_create_disco_iq(jabber_conn.ctx, from, caps_str);
+                    xmpp_send(jabber_conn.conn, iq);
+                    xmpp_stanza_release(iq);
+                }
             }
         }
 
diff --git a/src/stanza.c b/src/stanza.c
index e27aa40d..3abc0abd 100644
--- a/src/stanza.c
+++ b/src/stanza.c
@@ -415,6 +415,22 @@ stanza_get_idle_time(xmpp_stanza_t * const stanza)
     }
 }
 
+gboolean
+stanza_contains_caps(xmpp_stanza_t * const stanza)
+{
+    xmpp_stanza_t *caps = xmpp_stanza_get_child_by_name(stanza, STANZA_NAME_C);
+
+    if (caps == NULL) {
+        return FALSE;
+    }
+
+    if (strcmp(xmpp_stanza_get_ns(caps), STANZA_NS_CAPS) != 0) {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
 char *
 stanza_get_caps_str(xmpp_stanza_t * const stanza)
 {
diff --git a/src/stanza.h b/src/stanza.h
index 0d9edf07..4e8d52be 100644
--- a/src/stanza.h
+++ b/src/stanza.h
@@ -138,6 +138,7 @@ char * stanza_get_new_nick(xmpp_stanza_t * const stanza);
 
 int stanza_get_idle_time(xmpp_stanza_t * const stanza);
 char * stanza_get_caps_str(xmpp_stanza_t * const stanza);
+gboolean stanza_contains_caps(xmpp_stanza_t * const stanza);
 
 DataForm * stanza_get_form(xmpp_stanza_t * const stanza);