about summary refs log tree commit diff stats
path: root/src/xmpp
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-09-30 20:44:00 +0100
committerJames Booth <boothj5@gmail.com>2014-09-30 20:44:00 +0100
commitfbeb107cbeff39a04b26daf60c70f98c7c58cb5c (patch)
treead6877caa5025ca22818308d3aa3e199fb2f37cb /src/xmpp
parent780a3f1cc7a91cbc02b040ecf4773a702855e684 (diff)
downloadprofani-tty-fbeb107cbeff39a04b26daf60c70f98c7c58cb5c.tar.gz
Dont check for var attribute on form fields of type fixed
Diffstat (limited to 'src/xmpp')
-rw-r--r--src/xmpp/form.c106
1 files changed, 54 insertions, 52 deletions
diff --git a/src/xmpp/form.c b/src/xmpp/form.c
index 7a3baad2..e4f336e9 100644
--- a/src/xmpp/form.c
+++ b/src/xmpp/form.c
@@ -211,7 +211,7 @@ form_create(xmpp_stanza_t * const form_stanza)
 
             field->var = _get_attr(field_stanza, "var");
 
-            if (field->type_t != FIELD_HIDDEN) {
+            if (field->type_t != FIELD_HIDDEN && field->var != NULL) {
                 GString *tag = g_string_new("");
                 g_string_printf(tag, "field%d", tag_num++);
                 g_hash_table_insert(form->var_to_tag, strdup(field->var), strdup(tag->str));
@@ -287,64 +287,66 @@ form_create_submission(DataForm *form)
     while (curr_field) {
         FormField *field = curr_field->data;
 
-        xmpp_stanza_t *field_stanza = xmpp_stanza_new(ctx);
-        xmpp_stanza_set_name(field_stanza, "field");
-        xmpp_stanza_set_attribute(field_stanza, "var", field->var);
-
-        xmpp_stanza_t *value_stanza = NULL;
-        GSList *curr_value = NULL;
-
-        switch (field->type_t) {
-            case FIELD_HIDDEN:
-            case FIELD_FIXED:
-            case FIELD_TEXT_SINGLE:
-            case FIELD_TEXT_PRIVATE:
-            case FIELD_BOOLEAN:
-            case FIELD_LIST_SINGLE:
-            case FIELD_JID_SINGLE:
-                value_stanza = xmpp_stanza_new(ctx);
-                xmpp_stanza_set_name(value_stanza, "value");
-                if (field->values) {
-                    if (field->values->data) {
-                        xmpp_stanza_t *text_stanza = xmpp_stanza_new(ctx);
-                        xmpp_stanza_set_text(text_stanza, field->values->data);
-                        xmpp_stanza_add_child(value_stanza, text_stanza);
-                        xmpp_stanza_release(text_stanza);
-                    }
-                }
-                xmpp_stanza_add_child(field_stanza, value_stanza);
-                xmpp_stanza_release(value_stanza);
-
-                break;
-
-            case FIELD_TEXT_MULTI:
-            case FIELD_LIST_MULTI:
-            case FIELD_JID_MULTI:
-                curr_value = field->values;
-                while (curr_value) {
-                    char *value = curr_value->data;
-
+        if (field->type_t != FIELD_FIXED) {
+            xmpp_stanza_t *field_stanza = xmpp_stanza_new(ctx);
+            xmpp_stanza_set_name(field_stanza, "field");
+            xmpp_stanza_set_attribute(field_stanza, "var", field->var);
+
+            xmpp_stanza_t *value_stanza = NULL;
+            GSList *curr_value = NULL;
+
+            switch (field->type_t) {
+                case FIELD_HIDDEN:
+                case FIELD_TEXT_SINGLE:
+                case FIELD_TEXT_PRIVATE:
+                case FIELD_BOOLEAN:
+                case FIELD_LIST_SINGLE:
+                case FIELD_JID_SINGLE:
                     value_stanza = xmpp_stanza_new(ctx);
                     xmpp_stanza_set_name(value_stanza, "value");
-                    if (value) {
-                        xmpp_stanza_t *text_stanza = xmpp_stanza_new(ctx);
-                        xmpp_stanza_set_text(text_stanza, value);
-                        xmpp_stanza_add_child(value_stanza, text_stanza);
-                        xmpp_stanza_release(text_stanza);
+                    if (field->values) {
+                        if (field->values->data) {
+                            xmpp_stanza_t *text_stanza = xmpp_stanza_new(ctx);
+                            xmpp_stanza_set_text(text_stanza, field->values->data);
+                            xmpp_stanza_add_child(value_stanza, text_stanza);
+                            xmpp_stanza_release(text_stanza);
+                        }
                     }
-
                     xmpp_stanza_add_child(field_stanza, value_stanza);
                     xmpp_stanza_release(value_stanza);
 
-                    curr_value = g_slist_next(curr_value);
-                }
-                break;
-            default:
-                break;
-        }
+                    break;
+
+                case FIELD_TEXT_MULTI:
+                case FIELD_LIST_MULTI:
+                case FIELD_JID_MULTI:
+                    curr_value = field->values;
+                    while (curr_value) {
+                        char *value = curr_value->data;
+
+                        value_stanza = xmpp_stanza_new(ctx);
+                        xmpp_stanza_set_name(value_stanza, "value");
+                        if (value) {
+                            xmpp_stanza_t *text_stanza = xmpp_stanza_new(ctx);
+                            xmpp_stanza_set_text(text_stanza, value);
+                            xmpp_stanza_add_child(value_stanza, text_stanza);
+                            xmpp_stanza_release(text_stanza);
+                        }
+
+                        xmpp_stanza_add_child(field_stanza, value_stanza);
+                        xmpp_stanza_release(value_stanza);
 
-        xmpp_stanza_add_child(x, field_stanza);
-        xmpp_stanza_release(field_stanza);
+                        curr_value = g_slist_next(curr_value);
+                    }
+                    break;
+                case FIELD_FIXED:
+                default:
+                    break;
+            }
+
+            xmpp_stanza_add_child(x, field_stanza);
+            xmpp_stanza_release(field_stanza);
+        }
 
         curr_field = g_slist_next(curr_field);
     }