diff options
author | James Booth <boothj5@gmail.com> | 2014-09-30 20:46:26 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2014-09-30 20:46:26 +0100 |
commit | bca5a5f78db25cae450b9f89912b4674cbf5e368 (patch) | |
tree | bfd1bfcf09cf03250c5cd65ee7e8375ac97b1e33 /src/xmpp/form.c | |
parent | 0365e88b7b461123f213beea43a9f55524bd9688 (diff) | |
parent | fbeb107cbeff39a04b26daf60c70f98c7c58cb5c (diff) | |
download | profani-tty-bca5a5f78db25cae450b9f89912b4674cbf5e368.tar.gz |
Merge branch 'master' into muc_roles
Conflicts: .gitignore
Diffstat (limited to 'src/xmpp/form.c')
-rw-r--r-- | src/xmpp/form.c | 106 |
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); } |