jingle/sessions.c
changeset 119 0b9a7b505079
parent 107 a7f14a5e112c
child 122 8969dc3e2f14
--- a/jingle/sessions.c	Sat Aug 14 12:00:59 2010 +0200
+++ b/jingle/sessions.c	Sat Aug 14 19:06:27 2010 +0200
@@ -90,7 +90,7 @@
 {
   SessionContent *sc = g_new0(SessionContent, 1);
   
-  sc->name = name;
+  sc->name = g_strdup(name);
   sc->state = state;
 
   sess->content = g_slist_append(sess->content, sc);
@@ -101,23 +101,24 @@
 {
   SessionContent *sc = session_find_sessioncontent(sess, name);
   
-  sc->xmlns_desc = xmlns;
+  sc->xmlns_desc = g_strdup(xmlns);
   sc->appfuncs = jingle_get_appfuncs(xmlns);
   sc->description = data;
 }
 
 void session_add_trans(JingleSession *sess, const gchar *name,
-                           const gchar *xmlns, gconstpointer data)
+                       const gchar *xmlns, gconstpointer data)
 {
   SessionContent *sc = session_find_sessioncontent(sess, name);
   
-  sc->xmlns_trans = xmlns;
+  sc->xmlns_trans = g_strdup(xmlns);
   sc->transfuncs = jingle_get_transportfuncs(xmlns);
   sc->transport = data;
 }
 
-void session_add_content_from_jinglecontent(JingleSession *sess, JingleContent *cn,
-                         SessionState state)
+void session_add_content_from_jinglecontent(JingleSession *sess,
+                                            JingleContent *cn,
+                                            SessionState state)
 {
   const gchar *xmlns;
   JingleAppFuncs *app_funcs;
@@ -168,8 +169,10 @@
   sc = session_find_sessioncontent(sess, name);
   if(sc == NULL) return;
 
-  if (sc->state == JINGLE_SESSION_STATE_ACTIVE); // We should stop the transfer
-
+  if (sc->state == JINGLE_SESSION_STATE_ACTIVE) {
+    // TODO: stop the transfer
+  }
+  
   sess->content = g_slist_remove(sess->content, sc);
   
   return g_slist_length(sess->content);
@@ -206,8 +209,19 @@
  */
 void session_free(JingleSession *sess)
 {
+  GSList *el;
+  SessionContent *sc;
+  
   g_free(sess->sid);
   g_free(sess->from);
+  g_free(sess->to);
+  
+  // Remove and free contents
+  for (el = sess->content; el; el = el->next) {
+    sc = (SessionContent*)el->data;
+    session_remove_sessioncontent(sess, sc->name);
+  }
+  
   g_free(sess);
 }