Expand ~ in /sendfile, fix the way we handle creator and senders.
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Tue, 10 Aug 2010 20:31:12 +0200
changeset 93 4038cce7fd80
parent 92 e6c23d765038
child 94 a49f78cada29
Expand ~ in /sendfile, fix the way we handle creator and senders.
jingle-filetransfer/filetransfer.c
jingle/check.c
--- a/jingle-filetransfer/filetransfer.c	Tue Aug 10 20:00:34 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c	Tue Aug 10 20:31:12 2010 +0200
@@ -200,13 +200,16 @@
 static void do_sendfile(char *arg)
 {
   char **args = split_arg(arg, 1, 0);
+  gchar *filename;
   
   if (!args[0]) {
     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: give me a name!");
     return;
   }
   
-  if (!g_file_test(args[0], G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) {
+  filename = expand_filename(args[0]); // expand ~ to HOME
+  
+  if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) {
     scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: File doesn't exist!");
     return;
   }
@@ -247,10 +250,10 @@
     }
     jft->desc = g_strdup(args[0]);
     jft->type = JINGLE_FT_OFFER;
-    jft->name = g_path_get_basename(args[0]);
+    jft->name = g_path_get_basename(filename);
     jft->date = fileinfo.st_mtime;
     jft->size = fileinfo.st_size;
-    jft->outfile = g_io_channel_new_file (args[0], "r", NULL);
+    jft->outfile = g_io_channel_new_file (filename, "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)
--- a/jingle/check.c	Tue Aug 10 20:00:34 2010 +0200
+++ b/jingle/check.c	Tue Aug 10 20:31:12 2010 +0200
@@ -69,7 +69,7 @@
     return FALSE;
   }
 
-  if (actionstr != NULL && check_jid_syntax(jn->initiator)) {
+  if (jn->initiator != NULL && check_jid_syntax(jn->initiator)) {
     g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
                 "the initiator attribute in invalid (not a jid)");
     return FALSE;
@@ -111,26 +111,37 @@
   cn->name        = lm_message_node_get_attribute(node, "name");
   sendersstr      = lm_message_node_get_attribute(node, "senders");
 
-  if (creatorstr == NULL || cn->name == NULL) {
+  if (cn->name == NULL) {
     g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING,
-                "an attribute of the content element is missing");
+                "the name attribute of the content element is missing");
     g_free(cn);
     return NULL;
   }
-
-  tmp = index_in_array(creatorstr, jingle_content_creator);
-  tmp2 = index_in_array(sendersstr, jingle_content_senders);
-  if (tmp < 0 || (tmp2 < 0 && sendersstr != NULL)) {
-    g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
-                "the attribute creator or sender is invalid");
-    g_free(cn);
-    return NULL;
+  
+  if (creatorstr == NULL) {
+    cn->creator = JINGLE_CREATOR_INITIATOR;
+  } else {
+    tmp = index_in_array(creatorstr, jingle_content_creator);
+    if(tmp < 0) {
+      g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
+                  "the creator attribute is invalid");
+	}
+    cn->creator = (JingleCreator)tmp;
   }
-  cn->creator = (JingleCreator)tmp;
-  if(sendersstr != NULL)
+  
+  if (sendersstr == NULL) {
+	  cn->senders = JINGLE_SENDERS_BOTH;
+  } else {
+    tmp2 = index_in_array(sendersstr, jingle_content_senders);
+    if (tmp2 < 0) {
+      g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
+                  "the senders attribute is invalid");
+      g_free(cn);
+      return NULL;
+    }
     cn->senders = (JingleSenders)tmp2;
-  else
-    cn->senders = JINGLE_SENDERS_BOTH;
+  }
+    
   cn->description = lm_message_node_get_child(node, "description");
   cn->transport   = lm_message_node_get_child(node, "transport");
   if (cn->description == NULL || cn->transport == NULL) {