Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Mon, 16 Aug 2010 02:55:00 +0200
changeset 130 da01e4b2d7fa
parent 129 2d5c3efda92a
child 131 943c3f938cb4
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
jingle-ibb/ibb.c
--- a/jingle-ibb/ibb.c	Mon Aug 16 02:04:50 2010 +0200
+++ b/jingle-ibb/ibb.c	Mon Aug 16 02:55:00 2010 +0200
@@ -54,6 +54,7 @@
 static void jingle_ibb_init(void);
 static void jingle_ibb_uninit(void);
 
+
 static guint connect_hid = 0;
 static guint disconn_hid = 0;
 
@@ -81,6 +82,10 @@
   .next            = NULL,
 };
 
+/* Hash-Table of all emited JingleIBB struct */
+static GHashTable *JingleIBBs = NULL;
+
+
 static gconstpointer check(JingleContent *cn, GError **err)
 {
   JingleIBB *ibb = NULL;
@@ -115,7 +120,8 @@
     g_free(ibb);
     return NULL;
   }
-  
+
+  g_hash_table_insert(JingleIBBs, ibb->sid, ibb);
   return (gconstpointer) ibb;
 }
 
@@ -214,7 +220,8 @@
   g_free(bsize);
 }
 
-static void jingle_ibb_handle_ack_iq_send(LmMessage *mess, gpointer data)
+static void jingle_ibb_handle_ack_iq_send(JingleAckType type, LmMessage *mess,
+                                          gpointer data)
 {
   // TODO: check the sub type (error ??)
   session_content *sc = (session_content *)data;
@@ -248,7 +255,7 @@
   LmMessage *r = lm_message_new_with_sub_type(to, LM_MESSAGE_TYPE_IQ,
                                               LM_MESSAGE_SUB_TYPE_SET);
   LmMessageNode *node = lm_message_get_node(r);
-  
+
   gchar *base64 = g_base64_encode((const guchar *)buf, size);
   gchar *strseq = g_strdup_printf("%" G_GINT64_FORMAT, *seq);
 
@@ -258,18 +265,18 @@
                                  "seq", strseq,
                                  NULL);
   lm_message_node_set_value(node, base64);
-  
+
   ackhandle = g_new0(JingleAckHandle, 1);
   ackhandle->callback = jingle_ibb_handle_ack_iq_send;
   ackhandle->user_data = (gpointer)sc;
- 
+
   lm_connection_send_with_reply(lconnection, r,
                                 jingle_new_ack_handler(ackhandle), NULL);
   lm_message_unref(r);
-  
+
   // The next packet will be seq++
   ++(*seq);
-  
+
   g_free(base64);
   g_free(strseq);
 }
@@ -374,6 +381,12 @@
   return info;
 }
 
+static void free_ibb(gpointer data)
+{
+  JingleIBB *jibb = (JingleIBB *)data;
+  g_free(jibb);
+}
+
 static void jingle_ibb_init(void)
 {
   jingle_ibb_handler = lm_message_handler_new(jingle_ibb_handle_iq, NULL, NULL);
@@ -388,6 +401,7 @@
                             JINGLE_TRANSPORT_STREAMING,
                             JINGLE_TRANSPORT_LOW);
   xmpp_add_feature(NS_JINGLE_TRANSPORT_IBB);
+  JingleIBBs = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free_ibb);
 }
 
 static void jingle_ibb_uninit(void)