Fix the function converting a JingleNode to a LmMessage.
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Wed, 07 Jul 2010 23:02:01 +0200
changeset 35 a0fd92a93af7
parent 34 08715c230027
child 36 c300f2af08d0
Fix the function converting a JingleNode to a LmMessage. Also use the xmpp_helper lm_message_get_from.
jingle/jingle.c
jingle/jingle.h
jingle/send.c
jingle/sessions.c
--- 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;
--- a/jingle/jingle.h	Wed Jul 07 14:06:49 2010 +0200
+++ b/jingle/jingle.h	Wed Jul 07 23:02:01 2010 +0200
@@ -114,7 +114,6 @@
                           const gchar *cond, const gchar *jinglecond);
 void jingle_ack_iq(LmMessage *m);
 JingleAction jingle_action_from_str(const gchar* string);
+LmMessage *lm_message_from_jinglenode(const JingleNode *jn, const gchar *to);
 
-LmMessageNode* get_lm_from_jingle_struct(const JingleNode* elem);
-void get_lm_from_content_struct(gpointer data, gpointer userdata);
 #endif
--- a/jingle/send.c	Wed Jul 07 14:06:49 2010 +0200
+++ b/jingle/send.c	Wed Jul 07 23:02:01 2010 +0200
@@ -25,15 +25,18 @@
 #include <mcabber/xmpp_helper.h>
 #include <mcabber/xmpp_defines.h>
 
+#include <jingle/jingle.h>
 #include <jingle/send.h>
 
-void jingle_send_session_terminate(LmMessage *m, const gchar *reason) {
+
+void jingle_send_session_terminate(LmMessage *m, const gchar *reason)
+{
   LmMessage *r;
   LmMessageNode *err;
 
   r = lm_message_new_iq_from_query(m, LM_MESSAGE_SUB_TYPE_SET);
 
-  if(reason != NULL) {  
+  if (reason != NULL) {  
     err = lm_message_node_add_child(r->node, "reason", NULL);
     lm_message_node_add_child(err, reason, NULL);
   }
--- a/jingle/sessions.c	Wed Jul 07 14:06:49 2010 +0200
+++ b/jingle/sessions.c	Wed Jul 07 23:02:01 2010 +0200
@@ -21,6 +21,7 @@
 
 #include <glib.h>
 
+#include <mcabber/xmpp_helper.h>
 
 #include <jingle/jingle.h>
 #include <jingle/sessions.h>
@@ -40,7 +41,7 @@
   
   js->sid = g_strdup(jn->sid);
   js->initiator = g_strdup(jn->initiator);
-  from = lm_message_node_get_attribute(lm_message_get_node(jn->message), "from");
+  from = lm_message_get_from(jn->message);
   if (!from) {
     return NULL;
   }
@@ -58,15 +59,14 @@
     js = (JingleSession*) el->data;
     if (g_strcmp0(js->sid, sid) && g_strcmp0(js->from, from)) {
       return js;
-	}
+    }
   }
   return NULL;
 }
 
 JingleSession *session_find(const JingleNode *jn)
 {
-  LmMessageNode *iq = lm_message_get_node(jn->message);
-  const gchar *from = lm_message_node_get_attribute(iq, "from");
+  const gchar *from = lm_message_get_from(jn->message);
   return session_find_by_sid(jn->sid, from);
 }