about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2013-01-20 23:10:59 +0000
committerJames Booth <boothj5@gmail.com>2013-01-20 23:10:59 +0000
commit5c04adde2b3e38ce41f81b3994b1f3ec74026df0 (patch)
treeb9e42bc87d356146b9bc41a3265a8913b50217db
parent3d5f04ee80238fa4dac415afbf6cb6f68b7fa668 (diff)
downloadprofani-tty-5c04adde2b3e38ce41f81b3994b1f3ec74026df0.tar.gz
Handle unsupported hash, and legacy caps
-rw-r--r--src/jabber.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/jabber.c b/src/jabber.c
index 8d71c51d..31eaa854 100644
--- a/src/jabber.c
+++ b/src/jabber.c
@@ -39,6 +39,8 @@
 #include "muc.h"
 #include "stanza.h"
 
+#include "ui.h"
+
 static struct _jabber_conn_t {
     xmpp_log_t *log;
     xmpp_ctx_t *ctx;
@@ -922,7 +924,7 @@ _iq_handler(xmpp_conn_t * const conn,
         return _roster_handler(conn, stanza, userdata);
 
     // handle diso requests
-    } else if ((g_strcmp0(id, "disco") == 0) && (g_strcmp0(type, "result") == 0)) {
+    } else if ((g_str_has_prefix(id, "disco")) && (g_strcmp0(type, "result") == 0)) {
         return _disco_handler(conn, stanza, userdata);
 
     // handle iq
@@ -1075,6 +1077,8 @@ _disco_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
         }
 
         char *caps_key = NULL;
+
+        // xep-0115
         if (g_strcmp0(id, "disco") == 0) {
             caps_key = node;
 
@@ -1087,8 +1091,10 @@ _disco_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
                 log_info("Invalid SHA1 recieved for caps.");
                 return 1;
             }
+        // non supported hash, or legacy caps
         } else {
-            caps_key = id;
+            caps_key = id + 6;
+            cons_show(caps_key);
         }
 
         // already cached
@@ -1259,9 +1265,12 @@ _handle_presence_caps(xmpp_stanza_t * const stanza)
 
                 if (node != NULL) {
                     if (!caps_contains(caps_key)) {
-                        xmpp_stanza_t *iq = stanza_create_disco_iq(jabber_conn.ctx, from, from, node);
+                        GString *id = g_string_new("disco_");
+                        g_string_append(id, from);
+                        xmpp_stanza_t *iq = stanza_create_disco_iq(jabber_conn.ctx, id->str, from, node);
                         xmpp_send(jabber_conn.conn, iq);
                         xmpp_stanza_release(iq);
+                        g_string_free(id, TRUE);
                     }
                 }
             }
@@ -1270,7 +1279,21 @@ _handle_presence_caps(xmpp_stanza_t * const stanza)
 
         //ignore or handle legacy caps
         } else {
-            return NULL;
+            node = stanza_get_caps_str(stanza);
+            caps_key = from;
+
+            if (node != NULL) {
+                if (!caps_contains(caps_key)) {
+                    GString *id = g_string_new("disco_");
+                    g_string_append(id, from);
+                    xmpp_stanza_t *iq = stanza_create_disco_iq(jabber_conn.ctx, id->str, from, node);
+                    xmpp_send(jabber_conn.conn, iq);
+                    xmpp_stanza_release(iq);
+                    g_string_free(id, TRUE);
+                }
+            }
+
+            return caps_key;
         }
     }
     return NULL;