--- a/jingle-filetransfer/filetransfer.c Fri Jul 23 03:23:23 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c Fri Jul 23 04:50:57 2010 +0200
@@ -41,7 +41,7 @@
gconstpointer jingle_ft_check(JingleContent *cn, GError **err);
-void jingle_ft_handle(gconstpointer data, LmMessageNode *node);
+void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node);
gboolean jingle_ft_handle_data(gconstpointer data, const gchar *data2, guint len);
static gboolean is_md5_hash(const gchar *hash);
static void jingle_ft_init(void);
@@ -148,7 +148,7 @@
return (gconstpointer) ft;
}
-void jingle_ft_handle(gconstpointer data, LmMessageNode *node)
+void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node)
{
return;
}
--- a/jingle-ibb/ibb.c Fri Jul 23 03:23:23 2010 +0200
+++ b/jingle-ibb/ibb.c Fri Jul 23 04:50:57 2010 +0200
@@ -37,7 +37,7 @@
gconstpointer jingle_ibb_check(JingleContent *cn, GError **err);
gboolean jingle_ibb_cmp(gconstpointer data1, gconstpointer data2);
-void jingle_ibb_handle(gconstpointer data, LmMessageNode *node);
+void jingle_ibb_handle(JingleAction act, gconstpointer data, LmMessageNode *node);
static void jingle_ibb_init(void);
static void jingle_ibb_uninit(void);
@@ -145,18 +145,20 @@
return 1;
}
-void jingle_ibb_handle(gconstpointer data, LmMessageNode *node)
+void jingle_ibb_handle(JingleAction act, gconstpointer data, LmMessageNode *node)
{
- JingleIBB *jibb = (JingleIBB*) data;
- gchar *bsize = g_strdup_printf("%i", jibb->blocksize);
- if (lm_message_node_get_child(node, "transport") != NULL)
- return;
+ if (act == JINGLE_SESSION_INITIATE) {
+ JingleIBB *jibb = (JingleIBB*) data;
+ gchar *bsize = g_strdup_printf("%i", jibb->blocksize);
+ if (lm_message_node_get_child(node, "transport") != NULL)
+ return;
- LmMessageNode *node2 = lm_message_node_add_child(node, "transport", NULL);
- lm_message_node_set_attributes(node2, "xmlns", NS_JINGLE_TRANSPORT_IBB,
- "sid", jibb->sid,
- "block-size", bsize);
- g_free(bsize);
+ LmMessageNode *node2 = lm_message_node_add_child(node, "transport", NULL);
+ lm_message_node_set_attributes(node2, "xmlns", NS_JINGLE_TRANSPORT_IBB,
+ "sid", jibb->sid,
+ "block-size", bsize);
+ g_free(bsize);
+ }
}
static void jingle_ibb_init(void)
--- a/jingle/jingle.c Fri Jul 23 03:23:23 2010 +0200
+++ b/jingle/jingle.c Fri Jul 23 04:50:57 2010 +0200
@@ -408,11 +408,11 @@
xmlns = lm_message_node_get_attribute(content->transport, "xmlns");
tfunc = jingle_get_transportfuncs(xmlns);
- tfunc->handle(tfunc->check(content, NULL), node);
+ //tfunc->handle(tfunc->check(content, NULL), node);
xmlns = lm_message_node_get_attribute(content->description, "xmlns");
afunc = jingle_get_appfuncs(xmlns);
- afunc->handle(afunc->check(content, NULL), node);
+ //afunc->handle(afunc->check(content, NULL), node);
}
void handle_trans_data(const gchar *xmlns, gconstpointer data, const gchar *data2, guint len)
--- a/jingle/register.h Fri Jul 23 03:23:23 2010 +0200
+++ b/jingle/register.h Fri Jul 23 04:50:57 2010 +0200
@@ -35,11 +35,11 @@
} JingleTransportPriority;
typedef gconstpointer (*JingleAppCheck) (JingleContent *cn, GError **err);
-typedef void (*JingleAppHandle) (gconstpointer data, LmMessageNode *node);
+typedef void (*JingleAppHandle) (JingleAction action, gconstpointer data, LmMessageNode *node);
typedef gboolean (*JingleAppHandleData) (gconstpointer data, const gchar *data2, guint len);
typedef gconstpointer (*JingleTransportCheck) (JingleContent *cn, GError **err);
-typedef void (*JingleTransportHandle) (gconstpointer data, LmMessageNode *node);
+typedef void (*JingleTransportHandle) (JingleAction action, gconstpointer data, LmMessageNode *node);
typedef gboolean (*JingleTransportCmp) (gconstpointer data1, gconstpointer data2);
typedef struct {
--- a/jingle/send.c Fri Jul 23 03:23:23 2010 +0200
+++ b/jingle/send.c Fri Jul 23 04:50:57 2010 +0200
@@ -122,3 +122,24 @@
lm_message_unref(accept.message);
}
}
+
+void jingle_send_session_initiate(JingleSession *js, const gchar *recipient)
+{
+ JingleNode initiate = {0};
+ JingleAckHandle *ackhandle;
+
+ initiate.action = JINGLE_SESSION_INITIATE;
+ initiate.sid = js->sid;
+ initiate.initiator = js->initiator;
+ initiate.content = NULL; // TODO
+ initiate.message = lm_message_from_jinglenode(&initiate, recipient);
+
+ if (initiate.message) {
+ ackhandle = g_new0(JingleAckHandle, 1);
+ ackhandle->callback = NULL;
+ ackhandle->user_data = NULL;
+ lm_connection_send_with_reply(lconnection, initiate.message,
+ jingle_new_ack_handler(ackhandle), NULL);
+ lm_message_unref(initiate.message);
+ }
+}
--- a/jingle/sessions.h Fri Jul 23 03:23:23 2010 +0200
+++ b/jingle/sessions.h Fri Jul 23 04:50:57 2010 +0200
@@ -17,7 +17,7 @@
} SessionState;
typedef struct {
- JingleStatus status;
+ JingleStatus status;
gchar *sid;
gchar *initiator;
gchar *from;