--- a/jingle-filetransfer/filetransfer.c Fri Aug 13 01:23:59 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c Fri Aug 13 13:53:12 2010 +0200
@@ -262,10 +262,9 @@
jingle_handle_app(sess, "file", NS_JINGLE_APP_FT, jft, recipientjid);
g_free(ressource);
- //g_checksum_free(md5);
g_free(sid);
- g_io_channel_unref(jft->outfile);
- g_io_channel_shutdown(jft->outfile, TRUE, NULL);
+ //g_io_channel_unref(jft->outfile);
+ //g_io_channel_shutdown(jft->outfile, TRUE, NULL);
}
free_arg_lst(args);
@@ -333,7 +332,11 @@
GIOStatus status;
int count = 0;
JingleSession *sess = session_find_by_sid(sid, from);
- // TODO: sess == NULL
+ if (sess == NULL) {
+ scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: error before transfer");
+ // TODO: send session-terminate / delete session
+ return;
+ }
SessionContent *sc = session_find_sessioncontent(sess, name);
@@ -356,7 +359,7 @@
g_checksum_update(jft->md5, (guchar*)buf, read);
// Call a handle in jingle who will call the trans
- handle_app_data(sid, name, from, buf, read);
+ handle_app_data(sid, from, name, buf, read);
g_free(buf);
@@ -379,13 +382,16 @@
JingleFT *jft = (JingleFT*)data;
JingleSession *sess = session_find_by_sid(sid, from);
- // TODO: sess == NULL
+ if (sess == NULL) {
+ scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: error before transfer");
+ return;
+ }
SessionContent *sc = session_find_sessioncontent(sess, name);
jft->md5 = g_checksum_new(G_CHECKSUM_MD5);
- sc->appfuncs->send(sid, name, from, data, size);
+ sc->appfuncs->send(sid, from, name, data, size);
}
static void jingle_ft_init(void)
--- a/jingle-ibb/ibb.c Fri Aug 13 01:23:59 2010 +0200
+++ b/jingle-ibb/ibb.c Fri Aug 13 13:53:12 2010 +0200
@@ -26,6 +26,7 @@
#include <mcabber/modules.h>
#include <mcabber/utils.h>
#include <mcabber/xmpp_helper.h>
+#include <mcabber/logprint.h>
#include <jingle/jingle.h>
#include <jingle/check.h>
@@ -40,6 +41,7 @@
void jingle_ibb_tomessage(gconstpointer data, LmMessageNode *node);
const gchar* jingle_ibb_xmlns(void);
gconstpointer jingle_ibb_new(void);
+void jingle_ibb_send(const gchar *to, gconstpointer data, gchar *buf, gsize size);
static void jingle_ibb_init(void);
static void jingle_ibb_uninit(void);
@@ -52,7 +54,8 @@
jingle_ibb_check,
jingle_ibb_tomessage,
jingle_ibb_cmp,
- jingle_ibb_new
+ jingle_ibb_new,
+ jingle_ibb_send
};
module_info_t info_jingle_inbandbytestream = {
@@ -108,7 +111,7 @@
gpointer user_data)
{
const gchar *data64;
- JingleIBB *ibb = g_new0(JingleIBB, 1);
+ JingleIBB *jibb = g_new0(JingleIBB, 1);
gsize len;
guchar *data;
@@ -128,14 +131,14 @@
jingle_ack_iq(message);
- ibb->sid = lm_message_node_get_attribute(dnode, "sid");
- ibb->seq = g_ascii_strtoll(lm_message_node_get_attribute(dnode, "seq"), NULL, 10);
+ jibb->sid = lm_message_node_get_attribute(dnode, "sid");
+ jibb->seq = g_ascii_strtoll(lm_message_node_get_attribute(dnode, "seq"), NULL, 10);
data64 = lm_message_node_get_value(dnode);
data = g_base64_decode(data64, &len);
- handle_trans_data(NS_JINGLE_TRANSPORT_IBB, ibb, (const gchar *)data, (guint)len);
+ handle_trans_data(NS_JINGLE_TRANSPORT_IBB, jibb, (const gchar *)data, (guint)len);
return LM_HANDLER_RESULT_REMOVE_MESSAGE;
}
@@ -209,19 +212,20 @@
{
JingleIBB *jibb = (JingleIBB*)data;
JingleAckHandle *ackhandle;
- gchar* base64 = g_base64_encode((const guchar *)data, size);
+ gchar *base64 = g_base64_encode((const guchar *)data, 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);
LmMessageNode *node = lm_message_get_node(r);
lm_message_node_add_child(node, "data", NULL);
node = lm_message_node_get_child(node, "data");
- lm_message_node_set_attributes(node, "xmlns", NS_TRANSPORT_IBB, "sid", jibb->sid, "seq", jibb->seq, NULL);
+ lm_message_node_set_attributes(node, "xmlns", NS_TRANSPORT_IBB, "sid", jibb->sid, "seq", seq, NULL);
lm_message_node_set_value(node, base64);
ackhandle = g_new0(JingleAckHandle, 1);
ackhandle->callback = jingle_ibb_handle_ack_iq_send;
ackhandle->user_data = NULL;
-
+ scr_log_print(LPRINT_DEBUG, "%s", lm_message_node_to_string(r->node));
lm_connection_send_with_reply(lconnection, r,
jingle_new_ack_handler(ackhandle), NULL);
lm_message_unref(r);
--- a/jingle/action-handlers.c Fri Aug 13 01:23:59 2010 +0200
+++ b/jingle/action-handlers.c Fri Aug 13 13:53:12 2010 +0200
@@ -361,12 +361,21 @@
}
// We delete content who have been refuse
- for (el = sess->content; el; el = el->next) {
+ /*for (el = sess->content; el; el = el->next) {
sc = (SessionContent*) el->data;
if (sc->state == JINGLE_SESSION_STATE_PENDING) {
+ scr_log_print(LPRINT_DEBUG, "Delete %s!", sc->name);
session_remove_sessioncontent(sess, sc->name);
}
+ }*/
+
+ // Go go go! We start jobs!
+ for (el = sess->content; el; el = el->next) {
+ sc = (SessionContent*)el->data;
+ // TODO size!
+ sc->appfuncs->start(sess->sid, (sess->origin == JINGLE_SESSION_INCOMING) ? sess->from : sess->to, sc->name, sc->description, 2048);
}
+
}
void handle_session_terminate(JingleNode *jn)
--- a/jingle/send.c Fri Aug 13 01:23:59 2010 +0200
+++ b/jingle/send.c Fri Aug 13 13:53:12 2010 +0200
@@ -70,12 +70,6 @@
SessionContent *sc;
if(lm_message_get_sub_type(mess) == LM_MESSAGE_SUB_TYPE_RESULT) {
- // Go go go! We start jobs!
- for (child = sess->content; child; child = child->next) {
- sc = (SessionContent*)child->data;
- // TODO size!
- sc->appfuncs->start(sess->sid, sess->from, sc->name, sc->description, 2048);
- }
return;
}
@@ -134,6 +128,7 @@
}
mess = lm_message_from_jinglesession(sess, JINGLE_SESSION_ACCEPT);
+ scr_log_print(LPRINT_DEBUG, "%s", lm_message_node_to_string(mess->node));
if (mess) {
ackhandle = g_new0(JingleAckHandle, 1);
ackhandle->callback = jingle_handle_ack_iq_sa;
@@ -172,7 +167,8 @@
LmMessage *mess = lm_message_from_jinglesession(js, JINGLE_SESSION_INITIATE);
lm_message_node_set_attribute(lm_message_node_get_child(mess->node, "jingle"),
"initiator", js->from);
-
+scr_log_print(LPRINT_DEBUG, "%s", lm_message_node_to_string(mess->node));
+
if (mess) {
ackhandle = g_new0(JingleAckHandle, 1);
ackhandle->callback = jingle_handle_ack_iq_si;
--- a/jingle/sessions.c Fri Aug 13 01:23:59 2010 +0200
+++ b/jingle/sessions.c Fri Aug 13 13:53:12 2010 +0200
@@ -276,6 +276,10 @@
{
// TODO: check that the module is always loaded
JingleSession *sess = session_find_by_sid(sid, from);
+ if (sess == NULL) {
+ scr_LogPrint(LPRINT_LOGNORM, "Session not found (%s)", name);
+ return;
+ }
SessionContent *sc = session_find_sessioncontent(sess, name);
sc->transfuncs->send(sess->to, sc->transport, data, size);
}