JFT: function stop now check if file is finish
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Wed, 18 Aug 2010 10:42:55 +0200
changeset 145 bde23b68e126
parent 144 efc92c939fef
child 146 2200a1c96af3
JFT: function stop now check if file is finish
jingle-ft/filetransfer.c
--- a/jingle-ft/filetransfer.c	Tue Aug 17 23:30:53 2010 +0200
+++ b/jingle-ft/filetransfer.c	Wed Aug 18 10:42:55 2010 +0200
@@ -592,6 +592,7 @@
   }
 
   if (status == G_IO_STATUS_ERROR || err != NULL) {
+    jft->statut = JINGLE_FT_ERROR;
     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: %s", err->message);
     g_error_free(err);
     return;
@@ -667,8 +668,7 @@
   JingleFT *jft = (JingleFT*)data;
   GError *err = NULL;
   GIOStatus status;
-  
-  jft->state = JINGLE_FT_ENDING;
+
   if (jft->outfile != NULL) {
     status = g_io_channel_shutdown(jft->outfile, TRUE, &err);
     if (status != G_IO_STATUS_NORMAL || err != NULL) {
@@ -677,6 +677,19 @@
       g_error_free(err);
     }
   }
+  
+  if (jft->transmit < jft->size) {
+    jft->state = JINGLE_FT_ERROR;
+    if (jft->dir == JINGLE_FT_INCOMING)
+      scr_LogPrint(LPRINT_LOGNORM, "JFT: session have been closed before we"
+                   "receive all the file: %s", jft->name);
+    else
+      scr_LogPrint(LPRINT_LOGNORM, "JFT: session have been closed before we"
+                   "send all the file: %s", jft->name);
+    return;
+  }
+  
+  jft->state = JINGLE_FT_ENDING;
 
   if (jft->hash != NULL && jft->md5 != NULL) {
     if (_check_hash(jft->hash, jft->md5) == FALSE) {