diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2011-10-27 15:12:04 +0100 |
---|---|---|
committer | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2011-10-27 16:37:14 +0100 |
commit | ba724c8be698dc3828c05acdfeaca25c8c3078e6 (patch) | |
tree | 723b968c9488f9c4a600a6daf87c0e25fa257d04 /lib/gibber | |
parent | f93e211013c7f89c58365af275c4e8aa078786d5 (diff) | |
download | telepathy-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.c | 7 | ||||
-rw-r--r-- | lib/gibber/gibber-file-transfer.h | 2 | ||||
-rw-r--r-- | lib/gibber/gibber-oob-file-transfer.c | 29 |
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); |