Add atrans to a new app
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Mon, 26 Jul 2010 01:17:48 +0200
changeset 73 6f061c11acfb
parent 72 277778138b4b
child 74 7f0e16bb1768
Add atrans to a new app
jingle-ibb/ibb.c
jingle-ibb/ibb.h
jingle/jingle.c
jingle/register.h
--- a/jingle-ibb/ibb.c	Sun Jul 25 02:03:58 2010 +0200
+++ b/jingle-ibb/ibb.c	Mon Jul 26 01:17:48 2010 +0200
@@ -38,6 +38,8 @@
 gconstpointer jingle_ibb_check(JingleContent *cn, GError **err);
 gboolean jingle_ibb_cmp(gconstpointer data1, gconstpointer data2);
 void jingle_ibb_handle(JingleAction act, gconstpointer data, LmMessageNode *node);
+const gchar* jingle_ibb_xmlns(void);
+gconstpointer jingle_ibb_new(void);
 
 static void jingle_ibb_init(void);
 static void jingle_ibb_uninit(void);
@@ -45,7 +47,7 @@
 
 const gchar *deps[] = { "jingle", NULL };
 
-JingleTransportFuncs funcs = {jingle_ibb_check, jingle_ibb_handle, jingle_ibb_cmp};
+JingleTransportFuncs funcs = {jingle_ibb_xmlns, jingle_ibb_check, jingle_ibb_handle, jingle_ibb_cmp, jingle_ibb_new};
 
 module_info_t  info_jingle_inbandbytestream = {
   .branch          = MCABBER_BRANCH,
@@ -59,6 +61,11 @@
 };
 
 
+const gchar* jingle_ibb_xmlns(void)
+{
+  return NS_JINGLE_TRANSPORT_IBB;
+}
+
 gconstpointer jingle_ibb_check(JingleContent *cn, GError **err)
 {
   JingleIBB *ibb = NULL;
@@ -78,7 +85,7 @@
   ibb->blocksize = g_ascii_strtoll(blocksize, NULL, 10);
 
   // the size attribute is a xs:short an therefore can be negative.
-  if (ibb->blocksize < 0) {
+  if (ibb->blocksize < 0 || ibb->blocksize > IBB_BLOCK_SIZE_MAX) {
     g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE,
                 "block-size is negative");
     g_free(ibb);
@@ -134,6 +141,29 @@
   return TRUE;
 }
 
+static gchar *new_ibb_sid(void)
+{
+  gchar *sid;
+  gchar car[] = "azertyuiopqsdfghjklmwxcvbn1234567890AZERTYUIOPQSDFGHJKLMWXCVBN";
+  int i;
+  sid = g_new0(gchar, 7);
+  for (i = 0; i < 6; i++)
+    sid[i] = car[g_random_int_range(0, sizeof(car)/sizeof(car[0]))];
+
+  sid[6] = '\0';
+  
+  return sid;
+}
+
+gconstpointer jingle_ibb_new(void)
+{
+  JingleIBB *ibb = g_new0(JingleIBB, 1);
+  ibb->blocksize = IBB_BLOCK_SIZE_MAX;
+  ibb->sid = new_ibb_sid();
+  ibb->seq = 0;
+  
+  return ibb;
+}
 
 int jingle_ibb_check_session(gconstpointer data, gconstpointer session)
 {
--- a/jingle-ibb/ibb.h	Sun Jul 25 02:03:58 2010 +0200
+++ b/jingle-ibb/ibb.h	Mon Jul 26 01:17:48 2010 +0200
@@ -4,6 +4,8 @@
 #define NS_JINGLE_TRANSPORT_IBB "urn:xmpp:jingle:transports:ibb:0"
 #define NS_TRANSPORT_IBB "http://jabber.org/protocol/ibb"
 
+#define IBB_BLOCK_SIZE_MAX 2048
+
 typedef struct {
   /* Size of the blocks */
   int blocksize;
--- a/jingle/jingle.c	Sun Jul 25 02:03:58 2010 +0200
+++ b/jingle/jingle.c	Mon Jul 26 01:17:48 2010 +0200
@@ -497,7 +497,7 @@
   if (trans == NULL)
     return;
   
-  //session_add_trans(sess, name, xmlns, gconstpointer data);
+  session_add_trans(sess, name, trans->xmlns(), trans->new());
 
   jingle_send_session_initiate(sess, to);
 }
--- a/jingle/register.h	Sun Jul 25 02:03:58 2010 +0200
+++ b/jingle/register.h	Mon Jul 26 01:17:48 2010 +0200
@@ -41,6 +41,8 @@
 typedef gconstpointer (*JingleTransportCheck) (JingleContent *cn, GError **err);
 typedef void (*JingleTransportHandle) (JingleAction action, gconstpointer data, LmMessageNode *node);
 typedef gboolean (*JingleTransportCmp) (gconstpointer data1, gconstpointer data2);
+typedef const gchar* (*JingleTransportxmlns) (void);
+typedef gconstpointer (*JingleTransportNew) (void);
 
 typedef struct {
   /* check if the description of a JingleContent is correct */
@@ -54,6 +56,8 @@
 } JingleAppFuncs;
 
 typedef struct {
+  JingleTransportxmlns xmlns;
+  
   /* check if the transport of a JingleContent is correct */
   JingleTransportCheck  check;
 
@@ -62,6 +66,7 @@
   
   JingleTransportCmp cmp;
   
+  JingleTransportNew new;
 } JingleTransportFuncs;