build a content
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Tue, 20 Jul 2010 22:06:24 +0200
changeset 61 c7879aae9e1d
parent 60 05184a1846d1
child 62 e7915504da33
build a content
jingle-ibb/ibb.c
jingle/jingle.c
jingle/register.h
--- a/jingle-ibb/ibb.c	Tue Jul 20 19:16:58 2010 +0200
+++ b/jingle-ibb/ibb.c	Tue Jul 20 22:06:24 2010 +0200
@@ -37,7 +37,7 @@
 
 gconstpointer jingle_ibb_check(JingleContent *cn, GError **err);
 gboolean jingle_ibb_cmp(gconstpointer data1, gconstpointer data2);
-void jingle_ibb_handle(gconstpointer data, JingleContent *jc);
+void jingle_ibb_handle(gconstpointer data, LmMessageNode *node);
 
 static void jingle_ibb_init(void);
 static void jingle_ibb_uninit(void);
@@ -145,13 +145,15 @@
   return 1;
 }
 
-void jingle_ibb_handle(gconstpointer data, JingleContent *jc)
+void jingle_ibb_handle(gconstpointer data, LmMessageNode *node)
 {
   JingleIBB *jibb = (JingleIBB*) data;
-  gchar *bsize;
-  bsize = g_strdup_printf("%i", jibb->blocksize); 
-  LmMessageNode *node = lm_message_node_add_child(jc->node, "transport", NULL);
-  lm_message_node_set_attributes(node, "xmlns", NS_JINGLE_TRANSPORT_IBB,
+  gchar *bsize = g_strdup_printf("%i", jibb->blocksize);
+  if (lm_message_node_get_child(node, "transport") != NULL)
+    return;
+  
+  LmMessageNode *node2 = lm_message_node_add_child(node, "transport", NULL);
+  lm_message_node_set_attributes(node2, "xmlns", NS_JINGLE_TRANSPORT_IBB,
                                  "sid", jibb->sid,
                                  "block-size", bsize);
   g_free(bsize);
--- a/jingle/jingle.c	Tue Jul 20 19:16:58 2010 +0200
+++ b/jingle/jingle.c	Tue Jul 20 22:06:24 2010 +0200
@@ -380,6 +380,9 @@
 
 static void lm_insert_jinglecontent(gpointer data, gpointer userdata)
 {
+  const gchar *xmlns;
+  JingleTransportFuncs *tfunc;
+  JingleAppFuncs *afunc;
   JingleContent* content = (JingleContent*) data;
   LmMessageNode* dad = (LmMessageNode*) userdata;
   LmMessageNode* node = (LmMessageNode*) lm_message_node_add_child(dad,
@@ -402,6 +405,14 @@
     lm_message_node_set_attribute(node, "senders", "initiator");
   else if (content->senders == JINGLE_SENDERS_RESPONDER)
     lm_message_node_set_attribute(node, "senders", "responder");
+   
+  xmlns =  lm_message_node_get_attribute(content->transport, "xmlns");
+  tfunc = jingle_get_transportfuncs(xmlns);
+  tfunc->handle(tfunc->check(content, NULL), node);
+
+  xmlns =  lm_message_node_get_attribute(content->description, "xmlns");
+  afunc = jingle_get_appfuncs(xmlns);
+  afunc->handle(afunc->check(content, NULL), node);
 }
 
 void handle_trans_data(const gchar *xmlns, gconstpointer data, const gchar *data2, guint len)
--- a/jingle/register.h	Tue Jul 20 19:16:58 2010 +0200
+++ b/jingle/register.h	Tue Jul 20 22:06:24 2010 +0200
@@ -18,21 +18,17 @@
 } JingleTransMethod;
 
 typedef gconstpointer (*JingleAppCheck) (JingleContent *cn, GError **err);
-typedef void (*JingleAppHandle) (JingleNode *jn, JingleContent *cn);
-typedef LmMessageNode* (*JingleAppGetLM) (gconstpointer data);
+typedef void (*JingleAppHandle) (gconstpointer data, LmMessageNode *node);
 typedef gboolean (*JingleAppHandleData) (gconstpointer data, const gchar *data2, guint len);
 
 typedef gconstpointer (*JingleTransportCheck) (JingleContent *cn, GError **err);
-typedef void (*JingleTransportHandle) (gconstpointer data, JingleContent *cn);
+typedef void (*JingleTransportHandle) (gconstpointer data, LmMessageNode *node);
 typedef gboolean (*JingleTransportCmp) (gconstpointer data1, gconstpointer data2);
 
 typedef struct {
   /* check if the description of a JingleContent is correct */
   JingleAppCheck check;
 
-  /* Give a LM from a internal struct */
-  JingleAppGetLM desc;
-  
   /* If we got a LM with the good xmlns */
   JingleAppHandle handle;