debug 3
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Fri, 13 Aug 2010 18:39:25 +0200
changeset 109 d4d50e62098b
parent 108 7df2fb9a2365
child 110 c0341c164405
debug 3
jingle-filetransfer/filetransfer.c
jingle/action-handlers.c
jingle/register.h
--- a/jingle-filetransfer/filetransfer.c	Fri Aug 13 18:10:46 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c	Fri Aug 13 18:39:25 2010 +0200
@@ -49,7 +49,10 @@
 gboolean jingle_ft_handle_data(gconstpointer data, const gchar *data2, guint len);
 void jingle_ft_start(session_content *sc, gsize size);
 void jingle_ft_send(session_content *sc, gsize size);
+void jingle_ft_stop(gconstpointer data);
+
 static gboolean is_md5_hash(const gchar *hash);
+
 static void jingle_ft_init(void);
 static void jingle_ft_uninit(void);
 
@@ -60,7 +63,8 @@
   jingle_ft_tomessage,
   jingle_ft_handle_data,
   jingle_ft_start,
-  jingle_ft_send
+  jingle_ft_send,
+  jingle_ft_stop
 };
 
 module_info_t info_jingle_filetransfer = {
@@ -337,7 +341,7 @@
   JingleSession *sess = session_find_by_sid(sc->sid, sc->from);
   if (sess == NULL) {
     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: error before transfer");
-    // TODO: send error
+    // We haven't LmMessage: jingle_send_iq_error(jn->message, "cancel", "item-not-found", "unknown-session");
     return;
   }
   
@@ -403,6 +407,17 @@
   sc2->appfuncs->send(sc, size);
 }
 
+void jingle_ft_stop(gconstpointer data)
+{
+  JingleFT *jft = (JingleFT*)data;
+  
+  scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: transfer finish (%s)", jft->name);
+  
+  g_io_channel_flush(jft->outfile, NULL);
+  
+  g_io_channel_unref(jft->outfile);
+}
+
 static void jingle_ft_init(void)
 {
   jingle_register_app(NS_JINGLE_APP_FT, &funcs, JINGLE_TRANSPORT_STREAMING);
--- a/jingle/action-handlers.c	Fri Aug 13 18:10:46 2010 +0200
+++ b/jingle/action-handlers.c	Fri Aug 13 18:39:25 2010 +0200
@@ -385,10 +385,19 @@
 void handle_session_terminate(JingleNode *jn)
 {
   JingleSession *sess;
+  GSList *el;
+  SessionContent *sc;
+  
   if ((sess = session_find(jn)) == NULL) {
     jingle_send_iq_error(jn->message, "cancel", "item-not-found", "unknown-session");
     return;
   }
+  
+  for (el = sess->content; el; el = el->next) {
+    sc = (SessionContent*)el->data;
+    sc->appfuncs->stop(sc->description);
+    session_remove_sessioncontent(sess, sc->name);
+  }
   session_delete(sess);
   jingle_ack_iq(jn->message);
 }
--- a/jingle/register.h	Fri Aug 13 18:10:46 2010 +0200
+++ b/jingle/register.h	Fri Aug 13 18:39:25 2010 +0200
@@ -39,6 +39,7 @@
 typedef gboolean (*JingleAppHandleData) (gconstpointer data, const gchar *data2, guint len);
 typedef void (*JingleAppStart) (session_content *sc, gsize size);
 typedef void (*JingleAppSend) (session_content *sc, gsize size);
+typedef void (*JingleAppStop) (gconstpointer data);
 
 typedef gconstpointer (*JingleTransportCheck) (JingleContent *cn, GError **err);
 typedef void (*JingleTransportToMessage) (gconstpointer data, LmMessageNode *node);
@@ -59,6 +60,8 @@
   JingleAppStart start;
   
   JingleAppSend send;
+  
+  JingleAppStop stop;
 
 } JingleAppFuncs;