# HG changeset patch # User Nicolas Cornu # Date 1282219508 -7200 # Node ID b1acef78e4f58a55e318528b965c8dc583178d3f # Parent 5a4ca04ea3c9f51ad16ffdaabaa13f8b6ee55649 JFT: explode _jft_send diff -r 5a4ca04ea3c9 -r b1acef78e4f5 jingle-ft/filetransfer.c --- a/jingle-ft/filetransfer.c Thu Aug 19 11:46:04 2010 +0200 +++ b/jingle-ft/filetransfer.c Thu Aug 19 14:05:08 2010 +0200 @@ -316,7 +316,9 @@ JingleFT *jft = jftio->jft; gchar *strsize = _convert_size(jft->size); const gchar *dir = (jft->dir == JINGLE_FT_INCOMING) ? "<==" : "-->"; - gfloat percent = ((gfloat)jft->transmit / (gfloat)jft->size) * 100; + gfloat percent = (gfloat)jft->size ? + ((gfloat)jft->transmit / (gfloat)jft->size) * 100 : + 0; const gchar *state = strstate[jft->state]; const gchar *desc = jft->desc ? jft->desc : ""; const gchar *hash = ""; @@ -365,36 +367,46 @@ GError *err = NULL; gchar *filename = expand_filename(name); // expand ~ to HOME JingleFT *jft = g_new0(JingleFT, 1); - + + jft->desc = g_strdup(name); + jft->type = JINGLE_FT_OFFER; + jft->name = g_path_get_basename(filename); + jft->transmit = 0; + jft->hash = NULL; + jft->md5 = NULL; + jft->state = JINGLE_FT_PENDING; + jft->dir = JINGLE_FT_OUTGOING; + jft->date = 0; + jft->size = 0; + + // Add the jft to the list + JingleFTInfo *jftinf = g_new0(JingleFTInfo, 1); + jftinf->index = _next_index(); + jftinf->jft = jft; + info_list = g_slist_append(info_list, jftinf); + if (g_stat(filename, &fileinfo) != 0) { scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: unable to stat %s", filename); - g_free(jft); + jft->state = JINGLE_FT_ERROR; return NULL; } if (!S_ISREG(fileinfo.st_mode) || S_ISLNK(fileinfo.st_mode)) { scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: File doesn't exist!"); - g_free(jft); + jft->state = JINGLE_FT_ERROR; return NULL; } - - jft->desc = g_strdup(name); - jft->type = JINGLE_FT_OFFER; - jft->name = g_path_get_basename(filename); + jft->date = fileinfo.st_mtime; jft->size = fileinfo.st_size; - jft->transmit = 0; - jft->hash = NULL; - jft->md5 = NULL; - jft->state = JINGLE_FT_PENDING; - jft->dir = JINGLE_FT_OUTGOING; + jft->outfile = g_io_channel_new_file(filename, "r", &err); if (jft->outfile == NULL || err != NULL) { scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s %s", err->message, name); g_error_free(err); - g_free(jft); + jft->state = JINGLE_FT_ERROR; return NULL; } @@ -403,7 +415,7 @@ scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s %s", err->message, name); g_error_free(err); - g_free(jft); + jft->state = JINGLE_FT_ERROR; return NULL; } diff -r 5a4ca04ea3c9 -r b1acef78e4f5 jingle-socks5/socks5.c --- a/jingle-socks5/socks5.c Thu Aug 19 11:46:04 2010 +0200 +++ b/jingle-socks5/socks5.c Thu Aug 19 14:05:08 2010 +0200 @@ -231,6 +231,7 @@ case G_IO_HUP: break; default: + ; // ?! } } diff -r 5a4ca04ea3c9 -r b1acef78e4f5 jingle/jingle.c --- a/jingle/jingle.c Thu Aug 19 11:46:04 2010 +0200 +++ b/jingle/jingle.c Thu Aug 19 14:05:08 2010 +0200 @@ -470,7 +470,7 @@ void handle_trans_data(gconstpointer data, const gchar *data2, guint len) { - SessionContent *sc = session_find_transport(data); + SessionContent *sc = session_find_by_transport(data); if (sc == NULL) { return; } diff -r 5a4ca04ea3c9 -r b1acef78e4f5 jingle/sessions.c --- a/jingle/sessions.c Thu Aug 19 11:46:04 2010 +0200 +++ b/jingle/sessions.c Thu Aug 19 14:05:08 2010 +0200 @@ -176,7 +176,7 @@ return NULL; } -SessionContent *session_find_transport(gconstpointer data) +SessionContent *session_find_by_transport(gconstpointer data) { GSList *el, *el1; JingleSession *sess; @@ -192,6 +192,22 @@ return NULL; } +SessionContent *session_find_by_app(gconstpointer data) +{ + GSList *el, *el1; + JingleSession *sess; + SessionContent *sc; + for (el1 = sessions; el1; el1 = el1->next) { + sess = (JingleSession*) el1->data; + for (el = sess->content; el; el = el->next) { + sc = (SessionContent*) el->data; + if (data == sc->description) + return sc; + } + } + return NULL; +} + gint session_remove_sessioncontent(JingleSession *sess, const gchar *name) { SessionContent *sc; diff -r 5a4ca04ea3c9 -r b1acef78e4f5 jingle/sessions.h --- a/jingle/sessions.h Thu Aug 19 11:46:04 2010 +0200 +++ b/jingle/sessions.h Thu Aug 19 14:05:08 2010 +0200 @@ -83,7 +83,8 @@ const gchar *xmlns, gconstpointer data); SessionContent* session_add_content_from_jinglecontent(JingleSession *sess, JingleContent *cn, SessionState state, GError **err); -SessionContent *session_find_transport(gconstpointer data); +SessionContent *session_find_by_transport(gconstpointer data); +SessionContent *session_find_by_app(gconstpointer data); SessionContent *session_find_sessioncontent(JingleSession *sess, const gchar *name); int session_remove_sessioncontent(JingleSession *sess, const gchar *name);