--- 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;