Handle JFT
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Sun, 25 Jul 2010 01:42:33 +0200
changeset 71 53ee5d729367
parent 70 54e86a92fe7f
child 72 277778138b4b
Handle JFT
jingle-filetransfer/filetransfer.c
jingle-filetransfer/filetransfer.h
jingle/jingle.h
--- a/jingle-filetransfer/filetransfer.c	Sat Jul 24 00:03:33 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c	Sun Jul 25 01:42:33 2010 +0200
@@ -148,11 +148,6 @@
   return (gconstpointer) ft;
 }
 
-void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node)
-{
-  return;
-}
-
 gboolean jingle_ft_handle_data(gconstpointer data, const gchar *data2, guint len)
 {
   return FALSE;
@@ -222,12 +217,14 @@
       GChecksum *md5 = g_checksum_new(G_CHECKSUM_MD5);
       gchar *sid = new_sid();
       guchar data[1024];
-      gsize bytes_read, total = 0;
+      gsize bytes_read;
       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->desc = g_strdup(args[2]);
+      jft->type = JINGLE_FT_OFFER;
       jft->name = g_path_get_basename(args[1]);
       jft->date = 0;
       jft->size = 0;
@@ -257,6 +254,35 @@
   free_arg_lst(args);
 }
 
+void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node)
+{
+  if (act == JINGLE_SESSION_INITIATE) {
+    JingleFT *jft = (JingleFT*) data;
+    if (lm_message_node_get_child(node, "description") != NULL)
+      return;
+  
+    LmMessageNode *node2 = lm_message_node_add_child(node, "description", NULL);
+    lm_message_node_set_attribute(node2, "xmlns", NS_JINGLE_APP_FT);
+    if (jft->type == JINGLE_FT_OFFER)
+      node2 = lm_message_node_add_child(node2, "offer", NULL);
+    else
+      node2 = lm_message_node_add_child(node2, "request", NULL);
+    
+    node2 = lm_message_node_add_child(node2, "file", NULL);
+    
+    lm_message_node_set_attributes(node2, "xmlns", NS_SI_FT, "name", jft->name,
+                                   "size", jft->size, NULL);
+    if (jft->hash != NULL)
+      lm_message_node_set_attribute(node2, "hash", jft->hash);
+    
+    if (jft->desc != NULL)
+      lm_message_node_add_child(node2, "desc", jft->desc);
+    
+    //if (jft->data != 0)
+      
+  }
+}
+
 static void jingle_ft_init(void)
 {
   jingle_register_app(NS_JINGLE_APP_FT, &funcs, JINGLE_TRANSPORT_STREAMING);
--- a/jingle-filetransfer/filetransfer.h	Sat Jul 24 00:03:33 2010 +0200
+++ b/jingle-filetransfer/filetransfer.h	Sun Jul 25 01:42:33 2010 +0200
@@ -5,6 +5,11 @@
 #define NS_JINGLE_APP_FT_INFO "urn:xmpp:jingle:apps:file-transfer:info:1"
 #define NS_SI_FT              "http://jabber.org/protocol/si/profile/file-transfer"
 
+typedef enum {
+  JINGLE_FT_OFFER,
+  JINGLE_FT_REQUEST,
+} JingleFTType;
+
 typedef struct {
   /* the last modification of the file, optional */
   time_t date;
@@ -20,6 +25,11 @@
 
   /* descriptor to the output file */
   GIOChannel *outfile;
+  
+  JingleFTType type;
+  
+  gchar *desc;
+  
 } JingleFT;
 
 #endif
--- a/jingle/jingle.h	Sat Jul 24 00:03:33 2010 +0200
+++ b/jingle/jingle.h	Sun Jul 25 01:42:33 2010 +0200
@@ -138,10 +138,6 @@
 void handle_trans_data(const gchar *xmlns, gconstpointer data, const gchar *data2, guint len);
 
 gchar *new_sid(void);
-
-LmMessage *lm_message_from_jinglesession(const JingleSession *js, 
-                                         const gchar *to,
-                                         JingleAction action);
                                          
 static void lm_insert_sessioncontent(gpointer data, gpointer userdata);
 #endif