Fix the function converting a JingleNode to a LmMessage.
Also use the xmpp_helper lm_message_get_from.
--- 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);
}