jingle-filetransfer/filetransfer.c
changeset 112 77d68793ce61
parent 111 76ce876f7935
child 113 cb5adb25ad87
equal deleted inserted replaced
111:76ce876f7935 112:77d68793ce61
   223 
   223 
   224 static void do_sendfile(char *arg)
   224 static void do_sendfile(char *arg)
   225 {
   225 {
   226   char **args = split_arg(arg, 1, 0);
   226   char **args = split_arg(arg, 1, 0);
   227   gchar *filename;
   227   gchar *filename;
   228   
   228   struct stat fileinfo;
       
   229 
   229   if (!args[0]) {
   230   if (!args[0]) {
   230     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: give me a name!");
   231     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: give me a name!");
   231     return;
   232     return;
   232   }
   233   }
   233   
   234   
   234   filename = expand_filename(args[0]); // expand ~ to HOME
   235   filename = expand_filename(args[0]); // expand ~ to HOME
   235   
   236   
   236   if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) {
   237   if (g_stat(filename, &fileinfo) != 0) {
       
   238     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: unable to stat %s", args[1]);
       
   239     return;
       
   240   }
       
   241   
       
   242   if (!S_ISREG(fileinfo.st_mode)) {
   237     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: File doesn't exist!");
   243     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: File doesn't exist!");
   238     return;
   244     return;
   239   }
   245   }
   240   
   246   
   241   scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Trying to send %s",
   247   scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Trying to send %s",
   244   {
   250   {
   245     JingleSession *sess;
   251     JingleSession *sess;
   246     gchar *sid = jingle_generate_sid();
   252     gchar *sid = jingle_generate_sid();
   247     gchar *ressource, *recipientjid;
   253     gchar *ressource, *recipientjid;
   248     const gchar *namespaces[] = {NS_JINGLE, NS_JINGLE_APP_FT, NULL};
   254     const gchar *namespaces[] = {NS_JINGLE, NS_JINGLE_APP_FT, NULL};
   249     struct stat fileinfo;
       
   250     const gchar *myjid = g_strdup(lm_connection_get_jid(lconnection));
   255     const gchar *myjid = g_strdup(lm_connection_get_jid(lconnection));
   251     JingleFT *jft = g_new0(JingleFT, 1);
   256     JingleFT *jft = g_new0(JingleFT, 1);
   252 
   257 
   253     if (CURRENT_JID == NULL) { // CURRENT_JID = the jid of the user which has focus
   258     if (CURRENT_JID == NULL) { // CURRENT_JID = the jid of the user which has focus
   254       scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Please, choose a valid JID in the roster");
   259       scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Please, choose a valid JID in the roster");
   263     recipientjid = g_strdup_printf("%s/%s", CURRENT_JID, ressource);
   268     recipientjid = g_strdup_printf("%s/%s", CURRENT_JID, ressource);
   264 
   269 
   265     sess = session_new(sid, myjid, recipientjid, JINGLE_SESSION_OUTGOING);
   270     sess = session_new(sid, myjid, recipientjid, JINGLE_SESSION_OUTGOING);
   266     session_add_content(sess, "file", JINGLE_SESSION_STATE_PENDING);
   271     session_add_content(sess, "file", JINGLE_SESSION_STATE_PENDING);
   267 
   272 
   268     if (g_stat(filename, &fileinfo) != 0) {
       
   269       scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: unable to stat %s", args[1]);
       
   270       return;
       
   271     }
       
   272     jft->desc = g_strdup(args[0]);
   273     jft->desc = g_strdup(args[0]);
   273     jft->type = JINGLE_FT_OFFER;
   274     jft->type = JINGLE_FT_OFFER;
   274     jft->name = g_path_get_basename(filename);
   275     jft->name = g_path_get_basename(filename);
   275     jft->date = fileinfo.st_mtime;
   276     jft->date = fileinfo.st_mtime;
   276     jft->size = fileinfo.st_size;
   277     jft->size = fileinfo.st_size;