diff options
-rw-r--r-- | src/jabber.c | 31 | ||||
-rw-r--r-- | src/stanza.c | 16 | ||||
-rw-r--r-- | src/stanza.h | 1 |
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); |