jingle-ibb/ibb.c
changeset 133 361d8577ebd1
parent 131 943c3f938cb4
child 141 8bc73e965a07
--- a/jingle-ibb/ibb.c	Mon Aug 16 18:32:55 2010 +0200
+++ b/jingle-ibb/ibb.c	Mon Aug 16 18:33:33 2010 +0200
@@ -41,16 +41,16 @@
 static LmMessageHandler* jingle_ibb_handler = NULL;
 
 static gconstpointer check(JingleContent *cn, GError **err);
-static gboolean cmp(gconstpointer data1, gconstpointer data2);
 static void tomessage(gconstpointer data, LmMessageNode *node);
 static gconstpointer new(void);
 static void send(session_content *sc, gconstpointer data, gchar *buf, gsize size);
 static void init(session_content *sc, gconstpointer data);
 static void end(session_content *sc, gconstpointer data);
 static gchar *info(gconstpointer data);
+
 static void _send_internal(session_content *sc, const gchar *to, gchar *buf,
                            gsize size, const gchar *sid, gint64 *seq);
-
+                           
 static void jingle_ibb_init(void);
 static void jingle_ibb_uninit(void);
 
@@ -63,7 +63,6 @@
 static JingleTransportFuncs funcs = {
   .check     = check,
   .tomessage = tomessage,
-  .cmp       = cmp,
   .new       = new,
   .send      = send,
   .init      = init,
@@ -85,7 +84,6 @@
 /* Hash-Table of all emited JingleIBB struct */
 static GHashTable *JingleIBBs = NULL;
 
-
 static gconstpointer check(JingleContent *cn, GError **err)
 {
   JingleIBB *ibb = NULL;
@@ -128,7 +126,7 @@
                                  gpointer user_data)
 {
   const gchar *data64;
-  JingleIBB *jibb = g_new0(JingleIBB, 1);
+  JingleIBB *jibb = g_new0(JingleIBB, 1), *jibb2;
   gsize len;
   guchar *data;
   
@@ -144,7 +142,12 @@
 
   if (g_strcmp0(lm_message_node_get_attribute(dnode, "xmlns"),
                 NS_TRANSPORT_IBB))
-    return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+    return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+
+  jibb2 = g_hash_table_lookup(JingleIBBs,
+                              lm_message_node_get_attribute(dnode, "sid"));
+  if (jibb2 == NULL)
+    return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
 
   jingle_ack_iq(message);
   
@@ -154,21 +157,12 @@
   data64 = lm_message_node_get_value(dnode);
   
   data = g_base64_decode(data64, &len);
-  
-  handle_trans_data(NS_JINGLE_TRANSPORT_IBB, jibb, (const gchar *)data, (guint)len);
+
+  handle_trans_data(jibb2, (const gchar *)data, (guint)len);
   
   return LM_HANDLER_RESULT_REMOVE_MESSAGE;
 }
 
-
-static gboolean cmp(gconstpointer data1, gconstpointer data2)
-{
-  const JingleIBB *ibb1 = data1, *ibb2 = data2;
-  if(g_strcmp0(ibb1->sid, ibb2->sid))
-    return FALSE;
-  return TRUE;
-}
-
 static gchar *new_ibb_sid(void)
 {
   gchar *sid;