--- 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;