--- 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;