JIBB: send
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Fri, 13 Aug 2010 01:23:59 +0200
changeset 104 060e69633902
parent 103 c34b513be8d9
child 105 c31988e107b3
JIBB: send
jingle-ibb/ibb.c
jingle-ibb/ibb.h
jingle/sessions.c
--- a/jingle-ibb/ibb.c	Thu Aug 12 23:49:48 2010 +0200
+++ b/jingle-ibb/ibb.c	Fri Aug 13 01:23:59 2010 +0200
@@ -129,7 +129,7 @@
   jingle_ack_iq(message);
   
   ibb->sid = lm_message_node_get_attribute(dnode, "sid");
-  ibb->seq = lm_message_node_get_attribute(dnode, "seq");
+  ibb->seq = g_ascii_strtoll(lm_message_node_get_attribute(dnode, "seq"), NULL, 10);
   
   data64 = lm_message_node_get_value(dnode);
   
@@ -199,6 +199,39 @@
   g_free(bsize);
 }
 
+static void jingle_ibb_handle_ack_iq_send(LmMessage *mess, gpointer *data)
+{
+  
+
+}
+
+void jingle_ibb_send(const gchar *to, gconstpointer data, gchar *buf, gsize size)
+{
+  JingleIBB *jibb = (JingleIBB*)data;
+  JingleAckHandle *ackhandle;
+  gchar* base64 = g_base64_encode((const guchar *)data, size);
+  
+  LmMessage *r = lm_message_new_with_sub_type(to, LM_MESSAGE_TYPE_IQ, LM_MESSAGE_SUB_TYPE_SET);
+  LmMessageNode *node = lm_message_get_node(r);
+  lm_message_node_add_child(node, "data", NULL);
+  node = lm_message_node_get_child(node, "data");
+  lm_message_node_set_attributes(node, "xmlns", NS_TRANSPORT_IBB, "sid", jibb->sid, "seq", jibb->seq, NULL);
+  lm_message_node_set_value(node, base64);
+  
+  ackhandle = g_new0(JingleAckHandle, 1);
+  ackhandle->callback = jingle_ibb_handle_ack_iq_send;
+  ackhandle->user_data = NULL;
+  
+  lm_connection_send_with_reply(lconnection, r,
+                                jingle_new_ack_handler(ackhandle), NULL);
+  lm_message_unref(r);
+  
+  // The next packet will be seq++
+  jibb->seq++;
+  
+  g_free(base64);
+}
+
 static void jingle_ibb_init(void)
 {
   jingle_ibb_handler = lm_message_handler_new(jingle_ibb_handle_iq, NULL, NULL);
--- a/jingle-ibb/ibb.h	Thu Aug 12 23:49:48 2010 +0200
+++ b/jingle-ibb/ibb.h	Fri Aug 13 01:23:59 2010 +0200
@@ -13,7 +13,7 @@
   /* The identifiant of the transfer */
   const gchar *sid;
 
-  const gchar *seq;
+  gint64 seq;
   
 } JingleIBB;
 
--- a/jingle/sessions.c	Thu Aug 12 23:49:48 2010 +0200
+++ b/jingle/sessions.c	Fri Aug 13 01:23:59 2010 +0200
@@ -274,8 +274,8 @@
 
 void handle_app_data(const gchar *sid, const gchar *from, const gchar *name, gchar *data, gsize size)
 {
-  // TODO: verify that the module is always loaded
+  // TODO: check that the module is always loaded
   JingleSession *sess = session_find_by_sid(sid, from);
   SessionContent *sc = session_find_sessioncontent(sess, name);
-sc->transfuncs->send(sess->to, sc->transport, data, size);
+  sc->transfuncs->send(sess->to, sc->transport, data, size);
 }