jingle/jingle.c
changeset 35 a0fd92a93af7
parent 34 08715c230027
child 39 405518ad71de
--- a/jingle/jingle.c	Wed Jul 07 14:06:49 2010 +0200
+++ b/jingle/jingle.c	Wed Jul 07 23:02:01 2010 +0200
@@ -43,6 +43,7 @@
 static guint jingle_disconn_hh(const gchar *hname, hk_arg_t *args, gpointer ignore);
 static void  jingle_init(void);
 static void  jingle_uninit(void);
+static void lm_insert_jinglecontent(gpointer data, gpointer userdata);
 
 
 static LmMessageHandler* jingle_iq_handler = NULL;
@@ -188,7 +189,7 @@
 /**
  * Find the jingle_action corresponding to a string
  */
-JingleAction jingle_action_from_str(const gchar* string)
+JingleAction jingle_action_from_str(const gchar *string)
 {
   guint i, actstrlen = sizeof(jingle_action_list)/sizeof(jingle_action_list[0]);
   for (i = 0; i < actstrlen; i++)
@@ -260,23 +261,37 @@
   lm_message_handler_unref(jingle_iq_handler);
 }
 
-LmMessageNode* get_lm_from_jingle_struct(const JingleNode* elem)
+LmMessage *lm_message_from_jinglenode(const JingleNode *jn, const gchar *to)
 {
-  LmMessageNode* node = g_new(LmMessageNode, 1);
-  lm_message_node_set_value(node, "jingle");
-  if (jingle_action_list[elem->action].name)
-    lm_message_node_set_attribute(node, "action", jingle_action_list[elem->action].name);
-  if (elem->initiator)
-    lm_message_node_set_attribute(node, "initiator", elem->initiator);
-  if (elem->responder)
-    lm_message_node_set_attribute(node, "responder",elem->responder);
-  if (elem->sid)
-    lm_message_node_set_attribute(node, "sid", elem->sid);
-  g_slist_foreach(elem->content, get_lm_from_content_struct, node);
-  return node;
+  LmMessage* m; 
+  LmMessageNode *jnode;
+  const gchar *actionstr;
+
+  m = lm_message_new_with_sub_type(to, LM_MESSAGE_TYPE_IQ,
+                                   LM_MESSAGE_SUB_TYPE_SET); 
+  jnode = lm_message_node_add_child(m->node, "jingle", NULL);
+
+  if ((actionstr = jingle_action_list[jn->action].name))
+    lm_message_node_set_attribute(jnode, "action", actionstr);
+  else 
+    return NULL;
+
+  if (jn->initiator)
+    lm_message_node_set_attribute(jnode, "initiator", jn->initiator);
+
+  if (jn->responder)
+    lm_message_node_set_attribute(jnode, "responder", jn->responder);
+
+  if (jn->sid)
+    lm_message_node_set_attribute(jnode, "sid", jn->sid);
+  else
+    return NULL;
+
+  g_slist_foreach(jn->content, lm_insert_jinglecontent, jnode);
+  return m;
 }
 
-void get_lm_from_content_struct(gpointer data, gpointer userdata)
+static void lm_insert_jinglecontent(gpointer data, gpointer userdata)
 {
   JingleContent* content = (JingleContent*) data;
   LmMessageNode* dad = (LmMessageNode*) userdata;