| 700 } |
700 } |
| 701 } |
701 } |
| 702 return info; |
702 return info; |
| 703 } |
703 } |
| 704 |
704 |
| 705 static gint jabber_caps_xdata_field_compare(gconstpointer a, gconstpointer b) { |
705 static gint jabber_caps_xdata_field_compare(gconstpointer a, gconstpointer b) |
| 706 const JabberDataFormField *ac; |
706 { |
| 707 const JabberDataFormField *bc; |
707 const JabberDataFormField *ac = a; |
| 708 |
708 const JabberDataFormField *bc = b; |
| 709 ac = a; |
709 |
| 710 bc = b; |
|
| 711 |
|
| 712 return strcmp(ac->var, bc->var); |
710 return strcmp(ac->var, bc->var); |
| 713 } |
711 } |
| 714 |
712 |
| 715 static GList *jabber_caps_xdata_get_fields(const xmlnode *x) { |
713 static GList* jabber_caps_xdata_get_fields(const xmlnode *x) |
| 716 GList *fields = 0; |
714 { |
| |
715 GList *fields = NULL; |
| 717 xmlnode *field; |
716 xmlnode *field; |
| 718 xmlnode *value; |
717 |
| 719 JabberDataFormField *xdatafield; |
718 if (!x) |
| 720 |
719 return NULL; |
| 721 if(!x) return 0; |
720 |
| 722 |
721 for (field = xmlnode_get_child(x, "field"); field; field = xmlnode_get_next_twin(field)) { |
| 723 for(field = xmlnode_get_child(x, "field"); field != 0; field = xmlnode_get_next_twin(field)) { |
722 xmlnode *value; |
| 724 xdatafield = g_new0(JabberDataFormField, 1); |
723 JabberDataFormField *xdatafield = g_new0(JabberDataFormField, 1); |
| 725 xdatafield->var = g_strdup(xmlnode_get_attrib(field, "var")); |
724 xdatafield->var = g_strdup(xmlnode_get_attrib(field, "var")); |
| 726 for(value = xmlnode_get_child(field, "value"); value != 0; value = xmlnode_get_next_twin(value)) { |
725 |
| |
726 for (value = xmlnode_get_child(field, "value"); value; value = xmlnode_get_next_twin(value)) { |
| 727 gchar *val = xmlnode_get_data(value); |
727 gchar *val = xmlnode_get_data(value); |
| 728 xdatafield->values = g_list_append(xdatafield->values, val); |
728 xdatafield->values = g_list_append(xdatafield->values, val); |
| 729 } |
729 } |
| |
730 |
| 730 xdatafield->values = g_list_sort(xdatafield->values, (GCompareFunc)strcmp); |
731 xdatafield->values = g_list_sort(xdatafield->values, (GCompareFunc)strcmp); |
| 731 fields = g_list_append(fields, xdatafield); |
732 fields = g_list_append(fields, xdatafield); |
| 732 } |
733 } |
| |
734 |
| 733 fields = g_list_sort(fields, jabber_caps_xdata_field_compare); |
735 fields = g_list_sort(fields, jabber_caps_xdata_field_compare); |
| 734 return fields; |
736 return fields; |
| 735 } |
737 } |
| 736 |
738 |
| 737 static GString* |
739 static GString* |
| 784 |
786 |
| 785 while (fields) { |
787 while (fields) { |
| 786 GList *value; |
788 GList *value; |
| 787 JabberDataFormField *field = (JabberDataFormField*)fields->data; |
789 JabberDataFormField *field = (JabberDataFormField*)fields->data; |
| 788 |
790 |
| 789 if(strcmp(field->var, "FORM_TYPE")) { |
791 if (strcmp(field->var, "FORM_TYPE")) { |
| 790 /* Append the "var" attribute */ |
792 /* Append the "var" attribute */ |
| 791 verification = jabber_caps_verification_append(verification, field->var); |
793 verification = jabber_caps_verification_append(verification, field->var); |
| 792 /* Append <value/> element's cdata */ |
794 /* Append <value/> element's cdata */ |
| 793 for(value = field->values; value; value = value->next) { |
795 for(value = field->values; value; value = value->next) { |
| 794 verification = jabber_caps_verification_append(verification, value->data); |
796 verification = jabber_caps_verification_append(verification, value->data); |