--- 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;
}
--- 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:
+ ;
// ?!
}
}
--- 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;
}
--- 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;
--- 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);