JFT: Compute md5
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Fri, 23 Jul 2010 15:28:14 +0200
changeset 69 a56a2535ab2e
parent 68 ae8b0d03887e
child 70 54e86a92fe7f
JFT: Compute md5
jingle-filetransfer/filetransfer.c
--- a/jingle-filetransfer/filetransfer.c	Fri Jul 23 04:50:57 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c	Fri Jul 23 15:28:14 2010 +0200
@@ -219,20 +219,27 @@
     // Create a new session for send a file
     {
       JingleSession *sess;
+      GChecksum *md5 = g_checksum_new(G_CHECKSUM_MD5);
       gchar *sid = new_sid();
+      guchar data[1024];
+      gsize bytes_read, total = 0;
       const gchar *jid = settings_opt_get("jid");
       JingleFT *jft = g_new0(JingleFT, 1);
       sess = session_new(sid, jid, jid);
       session_add_content(sess, "file", JINGLE_SESSION_STATE_PENDING);
       
-      jft->name = g_strdup(args[1]);
-      jft->hash = NULL;
+      jft->name = g_path_get_basename(args[1]);
       jft->date = 0;
       jft->size = 0;
-      jft->outfile = NULL;
+      jft->outfile = g_io_channel_new_file (args[1], "r", NULL);
+      g_io_channel_set_encoding(jft->outfile, NULL, NULL);
+      while (g_io_channel_read_chars(jft->outfile, (gchar*)data, 1024, &bytes_read, NULL) != G_IO_STATUS_EOF) {
+        jft->size+=bytes_read;
+        g_checksum_update(md5, data, bytes_read);
+      }
+      jft->hash = g_strdup(g_checksum_get_string(md5));
       session_add_app(sess, "file", NS_JINGLE_APP_FT, jft);
-
-
+      g_checksum_free(md5);
       g_free(sid);
     }  
   } else if (!g_strcmp0(args[0], "request")) {