summaryrefslogtreecommitdiff
path: root/lib/gibber
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2011-10-27 15:12:04 +0100
committerJonny Lamb <jonny.lamb@collabora.co.uk>2011-10-27 16:37:14 +0100
commitba724c8be698dc3828c05acdfeaca25c8c3078e6 (patch)
tree723b968c9488f9c4a600a6daf87c0e25fa257d04 /lib/gibber
parentf93e211013c7f89c58365af275c4e8aa078786d5 (diff)
downloadtelepathy-salut-ba724c8be698dc3828c05acdfeaca25c8c3078e6.tar.gz
gibber-ft: parse data forms in query node of file transfer offer
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
Diffstat (limited to 'lib/gibber')
-rw-r--r--lib/gibber/gibber-file-transfer.c7
-rw-r--r--lib/gibber/gibber-file-transfer.h2
-rw-r--r--lib/gibber/gibber-oob-file-transfer.c29
3 files changed, 38 insertions, 0 deletions
diff --git a/lib/gibber/gibber-file-transfer.c b/lib/gibber/gibber-file-transfer.c
index 8036df6f..b6647c23 100644
--- a/lib/gibber/gibber-file-transfer.c
+++ b/lib/gibber/gibber-file-transfer.c
@@ -339,6 +339,13 @@ gibber_file_transfer_dispose (GObject *object)
self->priv->contact = NULL;
}
+ if (self->dataforms)
+ {
+ g_list_foreach (self->dataforms, (GFunc) g_object_unref, NULL);
+ g_list_free (self->dataforms);
+ self->dataforms = NULL;
+ }
+
G_OBJECT_CLASS (gibber_file_transfer_parent_class)->dispose (object);
}
diff --git a/lib/gibber/gibber-file-transfer.h b/lib/gibber/gibber-file-transfer.h
index e86d4cba..1e479e6e 100644
--- a/lib/gibber/gibber-file-transfer.h
+++ b/lib/gibber/gibber-file-transfer.h
@@ -80,6 +80,8 @@ struct _GibberFileTransfer
gchar *description;
gchar *content_type;
+ GList *dataforms;
+
GibberFileTransferDirection direction;
};
diff --git a/lib/gibber/gibber-oob-file-transfer.c b/lib/gibber/gibber-oob-file-transfer.c
index f501598b..f75a6fdd 100644
--- a/lib/gibber/gibber-oob-file-transfer.c
+++ b/lib/gibber/gibber-oob-file-transfer.c
@@ -29,6 +29,7 @@
#include <wocky/wocky-stanza.h>
#include <wocky/wocky-meta-porter.h>
#include <wocky/wocky-namespaces.h>
+#include <wocky/wocky-data-form.h>
#include "gibber-oob-file-transfer.h"
#include "gibber-fd-transport.h"
@@ -176,6 +177,32 @@ gibber_oob_file_transfer_is_file_offer (WockyStanza *stanza)
return TRUE;
}
+static GList *
+extract_dataforms (WockyNode *file)
+{
+ GList *forms = NULL;
+ WockyNodeIter iter;
+ WockyNode *x;
+
+ wocky_node_iter_init (&iter, file, "x", WOCKY_XMPP_NS_DATA);
+ while (wocky_node_iter_next (&iter, &x))
+ {
+ GError *error = NULL;
+ WockyDataForm *form = wocky_data_form_new_from_node (x, &error);
+
+ if (form == NULL)
+ {
+ DEBUG ("Failed to parse data form: %s", error->message);
+ g_clear_error (&error);
+ continue;
+ }
+
+ forms = g_list_append (forms, form);
+ }
+
+ return forms;
+}
+
GibberFileTransfer *
gibber_oob_file_transfer_new_from_stanza_with_from (
WockyStanza *stanza,
@@ -324,6 +351,8 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
self->priv->transferred_bytes = 0;
+ GIBBER_FILE_TRANSFER (self)->dataforms = extract_dataforms (query);
+
g_free (filename);
return GIBBER_FILE_TRANSFER (self);