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