--- a/jingle-filetransfer/filetransfer.c Fri Aug 13 13:53:12 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c Fri Aug 13 15:17:52 2010 +0200
@@ -155,11 +155,6 @@
return (gconstpointer) ft;
}
-gboolean jingle_ft_handle_data(gconstpointer data, const gchar *data2, guint len)
-{
- return FALSE;
-}
-
static gboolean is_md5_hash(const gchar *hash)
{
int i = 0;
@@ -172,7 +167,7 @@
return FALSE;
}
-gboolean handle_data(gconstpointer jingleft, const gchar *data, guint len)
+gboolean jingle_ft_handle_data(gconstpointer jingleft, const gchar *data, guint len)
{
JingleFT *ft = (JingleFT *) jingleft;
GError *err = NULL;
@@ -188,9 +183,10 @@
return FALSE;
}
}
+
status = g_io_channel_write_chars(ft->outfile, data, (gssize) len,
&bytes_written, &err);
-
+ g_io_channel_flush (ft->outfile, NULL);
if (status != G_IO_STATUS_NORMAL || err != NULL) {
return FALSE;
}
@@ -255,6 +251,11 @@
jft->date = fileinfo.st_mtime;
jft->size = fileinfo.st_size;
jft->outfile = g_io_channel_new_file (filename, "r", NULL);
+ if (jft->outfile == NULL) {
+ scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: Cannot open file %s", args[1]);
+ return;
+ }
+
g_io_channel_set_encoding(jft->outfile, NULL, NULL);
session_add_app(sess, "file", NS_JINGLE_APP_FT, jft);
--- a/jingle-ibb/ibb.c Fri Aug 13 13:53:12 2010 +0200
+++ b/jingle-ibb/ibb.c Fri Aug 13 15:17:52 2010 +0200
@@ -23,10 +23,12 @@
#include <glib.h>
+#include <mcabber/xmpp.h>
#include <mcabber/modules.h>
#include <mcabber/utils.h>
#include <mcabber/xmpp_helper.h>
#include <mcabber/logprint.h>
+#include <mcabber/hooks.h>
#include <jingle/jingle.h>
#include <jingle/check.h>
@@ -46,6 +48,8 @@
static void jingle_ibb_init(void);
static void jingle_ibb_uninit(void);
+static guint connect_hid = 0;
+static guint disconn_hid = 0;
const gchar *deps[] = { "jingle", NULL };
@@ -212,7 +216,7 @@
{
JingleIBB *jibb = (JingleIBB*)data;
JingleAckHandle *ackhandle;
- gchar *base64 = g_base64_encode((const guchar *)data, size);
+ gchar *base64 = g_base64_encode((const guchar *)buf, size);
gchar *seq = g_strdup_printf("%" G_GINT64_FORMAT, jibb->seq);
LmMessage *r = lm_message_new_with_sub_type(to, LM_MESSAGE_TYPE_IQ, LM_MESSAGE_SUB_TYPE_SET);
@@ -236,9 +240,48 @@
g_free(base64);
}
+static void jingle_ibb_unregister_lm_handlers(void)
+{
+ if (lconnection) {
+ lm_connection_unregister_message_handler(lconnection, jingle_ibb_handler,
+ LM_MESSAGE_TYPE_IQ);
+ }
+}
+
+static void jingle_ibb_register_lm_handlers(void)
+{
+ jingle_ibb_unregister_lm_handlers();
+ if (lconnection) {
+ lm_connection_register_message_handler(lconnection, jingle_ibb_handler,
+ LM_MESSAGE_TYPE_IQ,
+ LM_HANDLER_PRIORITY_FIRST);
+ }
+}
+
+static guint jingle_ibb_connect_hh(const gchar *hname, hk_arg_t *args,
+ gpointer ignore)
+{
+ jingle_ibb_register_lm_handlers();
+ return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+}
+
+static guint jingle_ibb_disconn_hh(const gchar *hname, hk_arg_t *args,
+ gpointer ignore)
+{
+ jingle_ibb_unregister_lm_handlers();
+ return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+}
+
static void jingle_ibb_init(void)
{
jingle_ibb_handler = lm_message_handler_new(jingle_ibb_handle_iq, NULL, NULL);
+
+ connect_hid = hk_add_handler(jingle_ibb_connect_hh, HOOK_POST_CONNECT,
+ G_PRIORITY_DEFAULT_IDLE, NULL);
+ disconn_hid = hk_add_handler(jingle_ibb_disconn_hh, HOOK_PRE_DISCONNECT,
+ G_PRIORITY_DEFAULT_IDLE, NULL);
+ jingle_ibb_register_lm_handlers();
+
jingle_register_transport(NS_JINGLE_TRANSPORT_IBB, &funcs,
JINGLE_TRANSPORT_STREAMING,
JINGLE_TRANSPORT_LOW);