From ba724c8be698dc3828c05acdfeaca25c8c3078e6 Mon Sep 17 00:00:00 2001 From: Jonny Lamb Date: Thu, 27 Oct 2011 15:12:04 +0100 Subject: gibber-ft: parse data forms in query node of file transfer offer Signed-off-by: Jonny Lamb --- lib/gibber/gibber-file-transfer.c | 7 +++++++ lib/gibber/gibber-file-transfer.h | 2 ++ lib/gibber/gibber-oob-file-transfer.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) (limited to 'lib') 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 #include #include +#include #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); -- cgit v1.2.1 From c02da80c845f7852451c79a18c473f883900a4c0 Mon Sep 17 00:00:00 2001 From: Jonny Lamb Date: Thu, 27 Oct 2011 16:18:43 +0100 Subject: ft-channel: include metadata in file transfer offer Signed-off-by: Jonny Lamb --- lib/gibber/gibber-oob-file-transfer.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lib') diff --git a/lib/gibber/gibber-oob-file-transfer.c b/lib/gibber/gibber-oob-file-transfer.c index f75a6fdd..0f723bde 100644 --- a/lib/gibber/gibber-oob-file-transfer.c +++ b/lib/gibber/gibber-oob-file-transfer.c @@ -505,12 +505,14 @@ static WockyStanza * create_transfer_offer (GibberOobFileTransfer *self, GError **error) { + GibberFileTransfer *ft = (GibberFileTransfer *) self; WockyMetaPorter *porter; WockyContact *contact; GSocketConnection *conn; GSocketAddress *address; GInetAddress *addr; GSocketFamily family; + GList *l; /* local host name */ gchar *host_name; @@ -609,6 +611,13 @@ create_transfer_offer (GibberOobFileTransfer *self, self->priv->url = url; self->priv->served_name = served_name; + /* dataforms */ + for (l = ft->dataforms; l != NULL; l = l->next) + { + WockyDataForm *form = l->data; + wocky_data_form_add_to_node (form, query_node); + } + return stanza; } -- cgit v1.2.1