Add comments, change some function names...
--- a/jingle-filetransfer/filetransfer.c Wed Aug 04 23:46:47 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c Thu Aug 05 04:33:11 2010 +0200
@@ -44,7 +44,7 @@
gconstpointer jingle_ft_check(JingleContent *cn, GError **err);
-void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node);
+void jingle_ft_tomessage(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);
@@ -54,7 +54,7 @@
JingleAppFuncs funcs = {
jingle_ft_check,
- jingle_ft_handle,
+ jingle_ft_tomessage,
jingle_ft_handle_data
};
@@ -263,33 +263,30 @@
free_arg_lst(args);
}
-void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node)
+void jingle_ft_tomessage(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)
-
- }
+ 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)
--- a/jingle-ibb/ibb.c Wed Aug 04 23:46:47 2010 +0200
+++ b/jingle-ibb/ibb.c Thu Aug 05 04:33:11 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(JingleAction act, gconstpointer data, LmMessageNode *node);
+void jingle_ibb_tomessage(gconstpointer data, LmMessageNode *node);
const gchar* jingle_ibb_xmlns(void);
gconstpointer jingle_ibb_new(void);
@@ -47,7 +47,13 @@
const gchar *deps[] = { "jingle", NULL };
-JingleTransportFuncs funcs = {jingle_ibb_xmlns, jingle_ibb_check, jingle_ibb_handle, jingle_ibb_cmp, jingle_ibb_new};
+JingleTransportFuncs funcs = {
+ jingle_ibb_xmlns,
+ jingle_ibb_check,
+ jingle_ibb_tomessage,
+ jingle_ibb_cmp,
+ jingle_ibb_new
+};
module_info_t info_jingle_inbandbytestream = {
.branch = MCABBER_BRANCH,
@@ -175,20 +181,18 @@
return 1;
}
-void jingle_ibb_handle(JingleAction act, gconstpointer data, LmMessageNode *node)
+void jingle_ibb_tomessage(gconstpointer data, LmMessageNode *node)
{
- 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);
- }
+ 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);
}
static void jingle_ibb_init(void)
--- a/jingle/jingle.c Wed Aug 04 23:46:47 2010 +0200
+++ b/jingle/jingle.c Thu Aug 05 04:33:11 2010 +0200
@@ -316,6 +316,14 @@
return JINGLE_UNKNOWN_ACTION;
}
+/**
+ * This function should not be called if jn->message was created
+ * using lm_message_from_jinglenode because loudmouth strdup
+ * strings we insert as attributes. the pointers in the LmMessage
+ * and the JingleNode would not refer to the same addresses and
+ * a call to lm_message_unref would not free the data from the
+ * JingleNode.
+ */
void jingle_free_jinglenode(JingleNode *jn)
{
g_slist_foreach(jn->content, (GFunc)g_free, NULL);
@@ -412,32 +420,6 @@
return m;
}
-LmMessage *lm_message_from_jinglesession(const JingleSession *js,
- const gchar *to,
- JingleAction action)
-{
- LmMessage* m;
- LmMessageNode *jnode;
- const gchar *actionstr;
-
- m = lm_message_new_with_sub_type(to, LM_MESSAGE_TYPE_IQ,
- LM_MESSAGE_SUB_TYPE_SET);
- jnode = lm_message_node_add_child(m->node, "jingle", NULL);
-
- if (actionstr = jingle_action_list[action].name)
- lm_message_node_set_attribute(jnode, "action", actionstr);
- else
- return NULL;
-
- if (js->sid)
- lm_message_node_set_attribute(jnode, "sid", js->sid);
- else
- return NULL;
-
- g_slist_foreach(js->content, lm_insert_sessioncontent, jnode);
- return m;
-}
-
static void lm_insert_sessioncontent(gpointer data, gpointer userdata)
{
const gchar *xmlns;
@@ -466,32 +448,32 @@
LmMessageNode* dad = (LmMessageNode*) userdata;
LmMessageNode* node = (LmMessageNode*) lm_message_node_add_child(dad,
"content", NULL);
-
+
if (content->creator == JINGLE_CREATOR_INITIATOR)
lm_message_node_set_attribute(node, "creator", "initiator");
else
lm_message_node_set_attribute(node, "creator", "responder");
-
+
if (content->disposition)
lm_message_node_set_attribute(node, "disposition", content->disposition);
-
+
if (content->name)
lm_message_node_set_attribute(node, "name", content->name);
-
+
if (content->senders == JINGLE_SENDERS_BOTH)
lm_message_node_set_attribute(node, "senders", "both");
else if (content->senders == JINGLE_SENDERS_INITIATOR)
lm_message_node_set_attribute(node, "senders", "initiator");
else if (content->senders == JINGLE_SENDERS_RESPONDER)
lm_message_node_set_attribute(node, "senders", "responder");
-
+
xmlns = lm_message_node_get_attribute(content->transport, "xmlns");
tfunc = jingle_get_transportfuncs(xmlns);
- //tfunc->handle(tfunc->check(content, NULL), node);
+ tfunc->tomessage(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->tomessage(afunc->check(content, NULL), node);
}
void handle_trans_data(const gchar *xmlns, gconstpointer data, const gchar *data2, guint len)
--- a/jingle/jingle.h Wed Aug 04 23:46:47 2010 +0200
+++ b/jingle/jingle.h Thu Aug 05 04:33:11 2010 +0200
@@ -94,7 +94,7 @@
/* each content element (must) contain one description
* child element that specifies a desired application.
- * the content of this node is app specific. */
+ * the connt of this node is app specific. */
LmMessageNode *description;
/* each content element (must) contain one transport
--- a/jingle/register.h Wed Aug 04 23:46:47 2010 +0200
+++ b/jingle/register.h Thu Aug 05 04:33:11 2010 +0200
@@ -36,11 +36,11 @@
} JingleTransportPriority;
typedef gconstpointer (*JingleAppCheck) (JingleContent *cn, GError **err);
-typedef void (*JingleAppToMessage) (JingleAction action, gconstpointer data, LmMessageNode *node);
+typedef void (*JingleAppToMessage) (gconstpointer data, LmMessageNode *node);
typedef gboolean (*JingleAppHandleData) (gconstpointer data, const gchar *data2, guint len);
typedef gconstpointer (*JingleTransportCheck) (JingleContent *cn, GError **err);
-typedef void (*JingleTransportToMessage) (JingleAction action, gconstpointer data, LmMessageNode *node);
+typedef void (*JingleTransportToMessage) (gconstpointer data, LmMessageNode *node);
typedef gboolean (*JingleTransportCmp) (gconstpointer data1, gconstpointer data2);
typedef const gchar* (*JingleTransportxmlns) (void);
typedef gconstpointer (*JingleTransportNew) (void);
--- a/jingle/send.c Wed Aug 04 23:46:47 2010 +0200
+++ b/jingle/send.c Thu Aug 05 04:33:11 2010 +0200
@@ -127,11 +127,23 @@
{
JingleNode initiate = {0};
JingleAckHandle *ackhandle;
+ GSList *listentry;
+ SessionContent *content;
+ JingleContent *jcontent;
initiate.action = JINGLE_SESSION_INITIATE;
initiate.sid = js->sid;
initiate.initiator = js->from;
- initiate.content = NULL; // TODO
+ for(listentry = js->content; listentry; listentry = g_slist_next(listentry)) {
+ /*content = (SessionContent *)listentry->data;
+ jcontent = g_new0(JingleContent, 1);
+ jcontent->node = lm_message_node_add_child()
+ jcontent->creator = JINGLE_CREATOR_INITIATOR;
+ jcontent->name = content->name
+ tfunc->tomessage(, node);
+ jcontent->transport =
+ initiate.content = g_slist_append(initiate.content, jcontent);*/
+ }
initiate.message = lm_message_from_jinglenode(&initiate, js->to);
if (initiate.message) {
--- a/jingle/sessions.c Wed Aug 04 23:46:47 2010 +0200
+++ b/jingle/sessions.c Thu Aug 05 04:33:11 2010 +0200
@@ -21,8 +21,6 @@
#include <glib.h>
-#include <mcabber/xmpp_helper.h>
-
#include <jingle/jingle.h>
#include <jingle/sessions.h>
#include <jingle/register.h>
@@ -75,7 +73,7 @@
JingleSession *session_find(const JingleNode *jn)
{
- const gchar *from = lm_message_get_from(jn->message);
+ const gchar *from = lm_message_node_get_attribute(jn->message->node, "from");
return session_find_by_sid(jn->sid, from);
}
--- a/jingle/sessions.h Wed Aug 04 23:46:47 2010 +0200
+++ b/jingle/sessions.h Thu Aug 05 04:33:11 2010 +0200
@@ -44,13 +44,29 @@
} JingleSession;
typedef struct {
+ /* "A unique name or identifier for the content type
+ * according to the creator" */
const gchar *name;
+
+ /* */
SessionState state;
+
+ /* The namespace of the app */
const gchar *xmlns_desc;
+
+ /* The internal struct of the app module */
gconstpointer description;
+
+ /* Struct of functions provided by the app module */
JingleAppFuncs *appfuncs;
+
+ /* The namespace of the transport */
const gchar *xmlns_trans;
+
+ /* The internal struct of the transport module */
gconstpointer transport;
+
+ /* Struct of functions provided by the transport module */
JingleTransportFuncs *transfuncs;
} SessionContent;