JFT: explode _jft_send
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Thu, 19 Aug 2010 14:05:08 +0200
changeset 151 b1acef78e4f5
parent 150 5a4ca04ea3c9
child 152 a8623ca21574
JFT: explode _jft_send
jingle-ft/filetransfer.c
jingle-socks5/socks5.c
jingle/jingle.c
jingle/sessions.c
jingle/sessions.h
--- 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);