# HG changeset patch # User Nicolas Cornu # Date 1281717565 -7200 # Node ID d4d50e62098b888682c91d6dbefd35fee57aeec9 # Parent 7df2fb9a2365be1be8cbfa600d082ab49745812f debug 3 diff -r 7df2fb9a2365 -r d4d50e62098b jingle-filetransfer/filetransfer.c --- 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); diff -r 7df2fb9a2365 -r d4d50e62098b jingle/action-handlers.c --- 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); } diff -r 7df2fb9a2365 -r d4d50e62098b jingle/register.h --- 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;