summaryrefslogtreecommitdiff
path: root/libpurple/protocols/jabber/xdata.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpurple/protocols/jabber/xdata.c')
-rw-r--r--libpurple/protocols/jabber/xdata.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/libpurple/protocols/jabber/xdata.c b/libpurple/protocols/jabber/xdata.c
index 64ca60586e..e681694396 100644
--- a/libpurple/protocols/jabber/xdata.c
+++ b/libpurple/protocols/jabber/xdata.c
@@ -411,4 +411,30 @@ void *jabber_x_data_request_with_actions(JabberStream *js, xmlnode *packet, GLis
return handle;
}
+gchar *
+jabber_x_data_get_formtype(const xmlnode *form)
+{
+ xmlnode *field;
+
+ g_return_val_if_fail(form != NULL, NULL);
+
+ for (field = xmlnode_get_child((xmlnode *)form, "field"); field;
+ field = xmlnode_get_next_twin(field)) {
+ const char *var = xmlnode_get_attrib(field, "var");
+ if (purple_strequal(var, "FORM_TYPE")) {
+ xmlnode *value = xmlnode_get_child(field, "value");
+ if (value)
+ return xmlnode_get_data(value);
+ else
+ /* An interesting corner case... Looking for a second
+ * FORM_TYPE would be more considerate, but I'm in favor
+ * of not helping broken clients.
+ */
+ return NULL;
+ }
+ }
+
+ /* Erm, none found :( */
+ return NULL;
+}