--- a/jingle/sessions.c Wed Jul 21 17:43:46 2010 +0200
+++ b/jingle/sessions.c Fri Jul 23 03:23:23 2010 +0200
@@ -34,21 +34,29 @@
/**
* Create a new session and insert it in the linked list.
*/
-JingleSession *session_new(JingleNode *jn)
+JingleSession *session_new(const gchar *sid, const gchar *initiator,
+ const gchar *from)
{
JingleSession *js = g_new0(JingleSession, 1);
+
+ js->sid = g_strdup(sid);
+ js->initiator = g_strdup(initiator);
+ js->from = g_strdup(from);
+
+ sessions = g_slist_append(sessions, js);
+ return js;
+}
+
+JingleSession *session_new_from_jinglenode(JingleNode *jn)
+{
const gchar *from;
- js->sid = g_strdup(jn->sid);
- js->initiator = g_strdup(jn->initiator);
from = lm_message_get_from(jn->message);
if (!from) {
return NULL;
}
- js->from = g_strdup(from);
-
- sessions = g_slist_append(sessions, js);
- return js;
+
+ return session_new(jn->sid, jn->initiator, from);
}
JingleSession *session_find_by_sid(const gchar *sid, const gchar *from)
@@ -70,22 +78,48 @@
return session_find_by_sid(jn->sid, from);
}
-void session_add_content(JingleSession *sess, JingleContent *cn,
+void session_add_content(JingleSession *sess, const gchar *name,
SessionState state)
{
SessionContent *sc = g_new0(SessionContent, 1);
- sc->name = cn->name;
+ sc->name = name;
sc->state = state;
+
+ sess->content = g_slist_append(sess->content, sc);
+}
+
+void session_add_app(JingleSession *sess, const gchar *name,
+ const gchar *xmlns, gconstpointer data)
+{
+ SessionContent *sc = session_find_sessioncontent(sess, name);
- sc->xmlns_desc = lm_message_node_get_attribute(cn->description, "xmlns");
- sc->appfuncs = jingle_get_appfuncs(sc->xmlns_desc);
- sc->xmlns_trans = lm_message_node_get_attribute(cn->transport, "xmlns");
- sc->transfuncs = jingle_get_transportfuncs(sc->xmlns_trans);
- sc->description = sc->appfuncs->check(cn, NULL);
- sc->transport = sc->transfuncs->check(cn, NULL);
+ sc->xmlns_desc = xmlns;
+ sc->appfuncs = jingle_get_appfuncs(xmlns);
+ sc->description = data;
+}
+
+void session_add_trans(JingleSession *sess, const gchar *name,
+ const gchar *xmlns, gconstpointer data)
+{
+ SessionContent *sc = session_find_sessioncontent(sess, name);
- sess->content = g_slist_append(sess->content, sc);
+ sc->xmlns_trans = xmlns;
+ sc->transfuncs = jingle_get_transportfuncs(xmlns);
+ sc->transport = data;
+}
+
+void session_add_content_from_jinglecontent(JingleSession *sess, JingleContent *cn,
+ SessionState state)
+{
+ SessionContent *sc = g_new0(SessionContent, 1);
+ session_add_content(sess, cn->name, state);
+ session_add_app(sess, cn->name,
+ lm_message_node_get_attribute(cn->description, "xmlns"),
+ sc->appfuncs->check(cn, NULL));
+ session_add_trans(sess, cn->name,
+ lm_message_node_get_attribute(cn->transport, "xmlns"),
+ sc->transfuncs->check(cn, NULL));
}
SessionContent *session_find_sessioncontent(JingleSession *sess,