Add comments, change some function names...
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Thu, 05 Aug 2010 04:33:11 +0200
changeset 81 8b6320ad470b
parent 80 1c2ef2c5debe
child 82 d629af652b80
Add comments, change some function names...
jingle-filetransfer/filetransfer.c
jingle-ibb/ibb.c
jingle/jingle.c
jingle/jingle.h
jingle/register.h
jingle/send.c
jingle/sessions.c
jingle/sessions.h
--- 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;