--- a/jingle-filetransfer/filetransfer.c Sat Jul 24 00:03:33 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c Sun Jul 25 01:42:33 2010 +0200
@@ -148,11 +148,6 @@
return (gconstpointer) ft;
}
-void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node)
-{
- return;
-}
-
gboolean jingle_ft_handle_data(gconstpointer data, const gchar *data2, guint len)
{
return FALSE;
@@ -222,12 +217,14 @@
GChecksum *md5 = g_checksum_new(G_CHECKSUM_MD5);
gchar *sid = new_sid();
guchar data[1024];
- gsize bytes_read, total = 0;
+ gsize bytes_read;
const gchar *jid = settings_opt_get("jid");
JingleFT *jft = g_new0(JingleFT, 1);
sess = session_new(sid, jid, jid);
session_add_content(sess, "file", JINGLE_SESSION_STATE_PENDING);
+ jft->desc = g_strdup(args[2]);
+ jft->type = JINGLE_FT_OFFER;
jft->name = g_path_get_basename(args[1]);
jft->date = 0;
jft->size = 0;
@@ -257,6 +254,35 @@
free_arg_lst(args);
}
+void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node)
+{
+ if (act == JINGLE_SESSION_INITIATE) {
+ JingleFT *jft = (JingleFT*) data;
+ if (lm_message_node_get_child(node, "description") != NULL)
+ return;
+
+ LmMessageNode *node2 = lm_message_node_add_child(node, "description", NULL);
+ lm_message_node_set_attribute(node2, "xmlns", NS_JINGLE_APP_FT);
+ if (jft->type == JINGLE_FT_OFFER)
+ node2 = lm_message_node_add_child(node2, "offer", NULL);
+ else
+ node2 = lm_message_node_add_child(node2, "request", NULL);
+
+ node2 = lm_message_node_add_child(node2, "file", NULL);
+
+ lm_message_node_set_attributes(node2, "xmlns", NS_SI_FT, "name", jft->name,
+ "size", jft->size, NULL);
+ if (jft->hash != NULL)
+ lm_message_node_set_attribute(node2, "hash", jft->hash);
+
+ if (jft->desc != NULL)
+ lm_message_node_add_child(node2, "desc", jft->desc);
+
+ //if (jft->data != 0)
+
+ }
+}
+
static void jingle_ft_init(void)
{
jingle_register_app(NS_JINGLE_APP_FT, &funcs, JINGLE_TRANSPORT_STREAMING);
--- a/jingle-filetransfer/filetransfer.h Sat Jul 24 00:03:33 2010 +0200
+++ b/jingle-filetransfer/filetransfer.h Sun Jul 25 01:42:33 2010 +0200
@@ -5,6 +5,11 @@
#define NS_JINGLE_APP_FT_INFO "urn:xmpp:jingle:apps:file-transfer:info:1"
#define NS_SI_FT "http://jabber.org/protocol/si/profile/file-transfer"
+typedef enum {
+ JINGLE_FT_OFFER,
+ JINGLE_FT_REQUEST,
+} JingleFTType;
+
typedef struct {
/* the last modification of the file, optional */
time_t date;
@@ -20,6 +25,11 @@
/* descriptor to the output file */
GIOChannel *outfile;
+
+ JingleFTType type;
+
+ gchar *desc;
+
} JingleFT;
#endif
--- a/jingle/jingle.h Sat Jul 24 00:03:33 2010 +0200
+++ b/jingle/jingle.h Sun Jul 25 01:42:33 2010 +0200
@@ -138,10 +138,6 @@
void handle_trans_data(const gchar *xmlns, gconstpointer data, const gchar *data2, guint len);
gchar *new_sid(void);
-
-LmMessage *lm_message_from_jinglesession(const JingleSession *js,
- const gchar *to,
- JingleAction action);
static void lm_insert_sessioncontent(gpointer data, gpointer userdata);
#endif