Give info when asking for events
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Sun, 15 Aug 2010 22:12:04 +0200
changeset 128 cded9f40039e
parent 127 02dde03e219b
child 129 2d5c3efda92a
Give info when asking for events
jingle-filetransfer/filetransfer.c
jingle-ibb/ibb.c
jingle/action-handlers.c
jingle/register.h
jingle/send.c
--- a/jingle-filetransfer/filetransfer.c	Sun Aug 15 17:35:41 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c	Sun Aug 15 22:12:04 2010 +0200
@@ -51,6 +51,7 @@
 static void start(session_content *sc);
 static void send(session_content *sc);
 static void stop(gconstpointer data);
+static gchar* info(gconstpointer data);
 
 static gboolean is_md5_hash(const gchar *hash);
 
@@ -66,7 +67,8 @@
   .handle_data  = handle_data,
   .start        = start,
   .send         = send,
-  .stop         = stop
+  .stop         = stop,
+  .info         = info
 };
 
 module_info_t info_jingle_filetransfer = {
@@ -521,6 +523,33 @@
 
 }
 
+static gchar *_convert_size(guint64 size)
+{
+  gchar *strsize;
+ 
+  if (size < 1024)
+    strsize = g_strdup_printf("%" G_GUINT64_FORMAT " B", size);
+  else if (size < 1048576)
+    strsize = g_strdup_printf("%.2lf KiB", size/1024.0);
+  else if (size < 1073741824)
+    strsize = g_strdup_printf("%.2lf MiB", size/1048576.0);
+  else if (size < 1099511627776)
+    strsize = g_strdup_printf("%.2lf GiB", size/1073741824.0);
+
+  return strsize;
+}
+
+static gchar* info(gconstpointer data)
+{
+  JingleFT *jft = (JingleFT *)data;
+  gchar *info, *strsize = _convert_size(jft->size);
+  info = g_strdup_printf("JFT: Receive %s (%s)", jft->name, strsize);
+
+  g_free(strsize);
+
+  return info;
+}
+
 static void jingle_ft_init(void)
 {
   jingle_register_app(NS_JINGLE_APP_FT, &funcs, JINGLE_TRANSPORT_STREAMING);
--- a/jingle-ibb/ibb.c	Sun Aug 15 17:35:41 2010 +0200
+++ b/jingle-ibb/ibb.c	Sun Aug 15 22:12:04 2010 +0200
@@ -47,6 +47,7 @@
 static void send(session_content *sc, gconstpointer data, gchar *buf, gsize size);
 static void init(session_content *sc, gconstpointer data);
 static void end(session_content *sc, gconstpointer data);
+static gchar *info(gconstpointer data);
 static void _send_internal(session_content *sc, const gchar *to, gchar *buf,
                            gsize size, const gchar *sid, gint64 *seq);
 
@@ -65,7 +66,8 @@
   .new       = new,
   .send      = send,
   .init      = init,
-  .end       = end
+  .end       = end,
+  .info      = info
 };
 
 module_info_t  info_jingle_inbandbytestream = {
@@ -365,6 +367,13 @@
   return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
 }
 
+static gchar *info(gconstpointer data)
+{
+  JingleIBB *jibb = (JingleIBB *)data;
+  gchar *info = g_strdup_printf("IBB %i", jibb->blocksize);
+  return info;
+}
+
 static void jingle_ibb_init(void)
 {
   jingle_ibb_handler = lm_message_handler_new(jingle_ibb_handle_iq, NULL, NULL);
--- a/jingle/action-handlers.c	Sun Aug 15 17:35:41 2010 +0200
+++ b/jingle/action-handlers.c	Sun Aug 15 22:12:04 2010 +0200
@@ -43,7 +43,7 @@
   GError *err = NULL;
   gboolean valid_disposition = FALSE;
   JingleContent *cn;
-  GString *sbuf;
+  gchar *sbuf;
   GSList *child = NULL;
   LmMessage *r;
   gchar *disp;
@@ -131,13 +131,25 @@
   }
   
   // Wait that user accept the jingle
-  sbuf = g_string_new("");
-  g_string_printf(sbuf, "Received an invitation for a jingle session from <%s>",
+  sbuf = g_strdup_printf("Received an invitation for a jingle session from <%s>",
                   lm_message_get_from(jn->message));
 
-  scr_WriteIncomingMessage(disp, sbuf->str, 0, HBB_PREFIX_INFO, 0);
-  scr_LogPrint(LPRINT_LOGNORM, "%s", sbuf->str);
-
+  scr_WriteIncomingMessage(disp, sbuf, 0, HBB_PREFIX_INFO, 0);
+  scr_LogPrint(LPRINT_LOGNORM, "%s", sbuf);
+  g_free(sbuf);
+  
+  for (child = sess->content; child; child = child->next) {
+    SessionContent *sc = (SessionContent *)child->data;
+    gchar *app_info = sc->appfuncs->info(sc->description);
+    gchar *trans_info = sc->transfuncs->info(sc->transport);
+    sbuf = g_strdup_printf("%s using %s", app_info, trans_info);
+    scr_WriteIncomingMessage(disp, sbuf, 0, HBB_PREFIX_INFO, 0);
+    scr_LogPrint(LPRINT_LOGNORM, "%s", sbuf);
+    g_free(app_info);
+    g_free(trans_info);
+    g_free(sbuf);
+  }
+  
   {
     const char *id;
     char *desc = g_strdup_printf("<%s> invites you to do a jingle session",
@@ -146,11 +158,12 @@
     id = evs_new(desc, NULL, 0, evscallback_jingle, sess, NULL);
     g_free(desc);
     if (id)
-      g_string_printf(sbuf, "Please use /event %s accept|reject", id);
+      sbuf = g_strdup_printf("Please use /event %s accept|reject", id);
     else
-      g_string_printf(sbuf, "Unable to create a new event!");
-    scr_WriteIncomingMessage(disp, sbuf->str, 0, HBB_PREFIX_INFO, 0);
-    scr_LogPrint(LPRINT_LOGNORM, "%s", sbuf->str);
+      sbuf = g_strdup_printf("Unable to create a new event!");
+    scr_WriteIncomingMessage(disp, sbuf, 0, HBB_PREFIX_INFO, 0);
+    scr_LogPrint(LPRINT_LOGNORM, "%s", sbuf);
+    g_free(sbuf);
   }
   g_free(disp);
 }
--- a/jingle/register.h	Sun Aug 15 17:35:41 2010 +0200
+++ b/jingle/register.h	Sun Aug 15 22:12:04 2010 +0200
@@ -41,6 +41,7 @@
 typedef void (*JingleAppStart) (session_content *sc);
 typedef void (*JingleAppSend) (session_content *sc);
 typedef void (*JingleAppStop) (gconstpointer data);
+typedef gchar* (*JingleAppInfo) (gconstpointer data);
 
 typedef gconstpointer (*JingleTransportCheck) (JingleContent *cn, GError **err);
 typedef void (*JingleTransportToMessage) (gconstpointer data, LmMessageNode *node);
@@ -49,6 +50,7 @@
 typedef void (*JingleTransportSend) (session_content *sc, gconstpointer data, gchar *buf, gsize size);
 typedef void (*JingleTransportInit) (session_content *sc, gconstpointer data);
 typedef void (*JingleTransportEnd) (session_content *sc, gconstpointer data);
+typedef gchar* (*JingleTransportInfo) (gconstpointer data);
 
 typedef struct {
   /* check if the description of a JingleContent is correct */
@@ -69,6 +71,8 @@
   JingleAppSend send;
 
   JingleAppStop stop;
+  
+  JingleAppInfo info;
 
 } JingleAppFuncs;
 
@@ -86,6 +90,9 @@
   JingleTransportInit init;
   
   JingleTransportEnd end;
+  
+  JingleTransportInfo info;
+  
 } JingleTransportFuncs;
 
 
--- a/jingle/send.c	Sun Aug 15 17:35:41 2010 +0200
+++ b/jingle/send.c	Sun Aug 15 22:12:04 2010 +0200
@@ -128,6 +128,8 @@
 {
   JingleAckHandle *ackhandle;
   GSList *listentry;
+  GError *err;
+  gboolean status;
   
   LmMessage *mess = lm_message_from_jinglesession(js, JINGLE_SESSION_INITIATE);
   lm_message_node_set_attribute(lm_message_node_get_child(mess->node, "jingle"),
@@ -139,8 +141,13 @@
     ackhandle->user_data = (gpointer)js;
     scr_log_print(LPRINT_DEBUG,
                   "%s", lm_message_node_to_string(mess->node));
-lm_connection_send_with_reply(lconnection, mess,
-                                  jingle_new_ack_handler(ackhandle), NULL);
+    status = lm_connection_send_with_reply(lconnection, mess,
+                                       jingle_new_ack_handler(ackhandle), &err);
+    // TODO: delete the ack_handler
+    if (status == FALSE || err != NULL) {
+      scr_LogPrint(LPRINT_LOGNORM, "Jingle: %s: try again", err->message);
+      session_delete(js);
+    }         
     lm_message_unref(mess);
   }
 }