# HG changeset patch # User Nicolas Cornu # Date 1281903124 -7200 # Node ID cded9f40039eefbcb99ca746030ba6d947d4398a # Parent 02dde03e219ba3ccc79777b8a32ba295c6bae475 Give info when asking for events diff -r 02dde03e219b -r cded9f40039e jingle-filetransfer/filetransfer.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); diff -r 02dde03e219b -r cded9f40039e jingle-ibb/ibb.c --- 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); diff -r 02dde03e219b -r cded9f40039e jingle/action-handlers.c --- 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); } diff -r 02dde03e219b -r cded9f40039e jingle/register.h --- 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; diff -r 02dde03e219b -r cded9f40039e jingle/send.c --- 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); } }