--- a/jingle-filetransfer/filetransfer.c Thu Aug 12 01:14:03 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c Thu Aug 12 23:49:48 2010 +0200
@@ -46,7 +46,8 @@
gconstpointer jingle_ft_check(JingleContent *cn, GError **err);
void jingle_ft_tomessage(gconstpointer data, LmMessageNode *node);
gboolean jingle_ft_handle_data(gconstpointer data, const gchar *data2, guint len);
-void jingle_ft_start(gconstpointer data, gsize size);
+void jingle_ft_start(const gchar *sid, const gchar *from, const gchar *name, gconstpointer data, gsize size);
+void jingle_ft_send(const gchar *sid, const gchar *from, const gchar *name, gconstpointer data, gsize size);
static gboolean is_md5_hash(const gchar *hash);
static void jingle_ft_init(void);
static void jingle_ft_uninit(void);
@@ -56,7 +57,9 @@
static JingleAppFuncs funcs = {
jingle_ft_check,
jingle_ft_tomessage,
- jingle_ft_handle_data
+ jingle_ft_handle_data,
+ jingle_ft_start,
+ jingle_ft_send
};
module_info_t info_jingle_filetransfer = {
@@ -322,13 +325,17 @@
lm_message_unref(r);
}
-void jingle_ft_send(JingleSession *sess, SessionContent *sc, gsize size)
+void jingle_ft_send(const gchar *sid, const gchar *from, const gchar *name, gconstpointer data, gsize size)
{
- JingleFT *jft = (JingleFT*)(sc->description);
+ JingleFT *jft = (JingleFT*)(data);
gchar *buf = g_new0(gchar, size);
gsize read;
GIOStatus status;
int count = 0;
+ JingleSession *sess = session_find_by_sid(sid, from);
+ // TODO: sess == NULL
+
+ SessionContent *sc = session_find_sessioncontent(sess, name);
do {
count++;
@@ -349,7 +356,7 @@
g_checksum_update(jft->md5, (guchar*)buf, read);
// Call a handle in jingle who will call the trans
- handle_app_data(sess, sc, buf, read);
+ handle_app_data(sid, name, from, buf, read);
g_free(buf);
@@ -357,21 +364,28 @@
scr_LogPrint(LPRINT_LOGNORM, "Jingle File Transfer: transfer finish (%s)", jft->name);
jft->hash = g_strdup(g_checksum_get_string(jft->md5));
// Call a function to say state is ended
+ session_changestate_sessioncontent(sess, sc->name, JINGLE_SESSION_STATE_ENDED);
// Send the hash
jingle_ft_send_hash(sess->sid, sess->to, jft->hash);
g_checksum_free(jft->md5);
- // Wait the session-terminate
+ // Send a session-terminate (success)
+
}
}
-void jingle_ft_start(gchar *sid, gchar *name, gconstpointer data, gsize size)
+void jingle_ft_start(const gchar *sid, const gchar *from, const gchar *name, gconstpointer data, gsize size)
{
JingleFT *jft = (JingleFT*)data;
+ JingleSession *sess = session_find_by_sid(sid, from);
+ // TODO: sess == NULL
+
+ SessionContent *sc = session_find_sessioncontent(sess, name);
+
jft->md5 = g_checksum_new(G_CHECKSUM_MD5);
- jingle_ft_send(sid, name, data, size);
+ sc->appfuncs->send(sid, name, from, data, size);
}
static void jingle_ft_init(void)
--- a/jingle/register.h Thu Aug 12 01:14:03 2010 +0200
+++ b/jingle/register.h Thu Aug 12 23:49:48 2010 +0200
@@ -3,7 +3,6 @@
#include <jingle/jingle.h>
-
#define NS_JINGLE_APP_PREFIX "urn:xmpp:jingle:apps:"
#define NS_JINGLE_TRANSPORT_PREFIX "urn:xmpp:jingle:transports:"
@@ -38,7 +37,8 @@
typedef gconstpointer (*JingleAppCheck) (JingleContent *cn, GError **err);
typedef void (*JingleAppToMessage) (gconstpointer data, LmMessageNode *node);
typedef gboolean (*JingleAppHandleData) (gconstpointer data, const gchar *data2, guint len);
-typedef void (*JingleAppStart) (gconstpointer data, gsize size);
+typedef void (*JingleAppStart) (const gchar *sid, const gchar *from, const gchar *name, gconstpointer data, gsize size);
+typedef void (*JingleAppSend) (const gchar *sid, const gchar *from, const gchar *name, gconstpointer data, gsize size);
typedef gconstpointer (*JingleTransportCheck) (JingleContent *cn, GError **err);
typedef void (*JingleTransportToMessage) (gconstpointer data, LmMessageNode *node);
@@ -57,6 +57,8 @@
JingleAppHandleData handle_data;
JingleAppStart start;
+
+ JingleAppSend send;
} JingleAppFuncs;
--- a/jingle/send.c Thu Aug 12 01:14:03 2010 +0200
+++ b/jingle/send.c Thu Aug 12 23:49:48 2010 +0200
@@ -74,7 +74,7 @@
for (child = sess->content; child; child = child->next) {
sc = (SessionContent*)child->data;
// TODO size!
- sc->appfuncs->start(sc, 2048);
+ sc->appfuncs->start(sess->sid, sess->from, sc->name, sc->description, 2048);
}
return;
}
--- a/jingle/sessions.c Thu Aug 12 01:14:03 2010 +0200
+++ b/jingle/sessions.c Thu Aug 12 23:49:48 2010 +0200
@@ -21,10 +21,11 @@
#include <glib.h>
+#include <mcabber/logprint.h>
+
#include <jingle/jingle.h>
#include <jingle/sessions.h>
#include <jingle/register.h>
-#include <mcabber/logprint.h>
static GSList *sessions;
@@ -271,8 +272,10 @@
content->appfuncs->tomessage(content->description, node);
}
-void handle_app_data(JingleSession *sess, SessionContent *sc, gchar *data, gsize size)
+void handle_app_data(const gchar *sid, const gchar *from, const gchar *name, gchar *data, gsize size)
{
// TODO: verify that the module is always loaded
- sc->transfuncs->send(sess->to, sc->transport, data, size);
+ JingleSession *sess = session_find_by_sid(sid, from);
+ SessionContent *sc = session_find_sessioncontent(sess, name);
+sc->transfuncs->send(sess->to, sc->transport, data, size);
}
--- a/jingle/sessions.h Thu Aug 12 01:14:03 2010 +0200
+++ b/jingle/sessions.h Thu Aug 12 23:49:48 2010 +0200
@@ -98,6 +98,6 @@
LmMessage *lm_message_from_jinglesession(const JingleSession *js,
JingleAction action);
-void handle_app_data(JingleSession *sess, SessionContent *sc, gchar *data, gsize size);
+void handle_app_data(const gchar *sid, const gchar* from, const gchar *name, gchar *data, gsize size);
#endif