aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2016-03-31 14:21:56 +0200
committerDaniel Gultsch <daniel@gultsch.de>2016-03-31 14:21:56 +0200
commit867d0ef191faf5af2573e7721d2fb14390eca0ee (patch)
tree38523428a4bbe7311ac25e6e5edff29686c44459
parent8d98c52803b128463b96706044d551ed7268dac5 (diff)
include form fields into caps hash calculation
-rw-r--r--src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java19
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/forms/Data.java12
2 files changed, 25 insertions, 6 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java b/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
index 42f2d840..31570d2d 100644
--- a/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
+++ b/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
@@ -17,6 +17,7 @@ import org.json.JSONObject;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.forms.Data;
+import eu.siacs.conversations.xmpp.forms.Field;
import eu.siacs.conversations.xmpp.stanzas.IqPacket;
public class ServiceDiscoveryResult {
@@ -219,8 +220,22 @@ public class ServiceDiscoveryResult {
});
for(Data form : forms) {
- s.append(form.getFormType()+"<");
- //TODO append fields and values
+ s.append(form.getFormType() + "<");
+ List<Field> fields = form.getFields();
+ Collections.sort(fields, new Comparator<Field>() {
+ @Override
+ public int compare(Field lhs, Field rhs) {
+ return lhs.getFieldName().compareTo(rhs.getFieldName());
+ }
+ });
+ for(Field field : fields) {
+ s.append(field.getFieldName()+"<");
+ List<String> values = field.getValues();
+ Collections.sort(values);
+ for(String value : values) {
+ s.append(value+"<");
+ }
+ }
}
MessageDigest md;
diff --git a/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java b/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java
index 380f0280..8dabcb5b 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/forms/Data.java
@@ -9,6 +9,8 @@ import eu.siacs.conversations.xml.Element;
public class Data extends Element {
+ private static final String FORM_TYPE = "FORM_TYPE";
+
public Data() {
super("x");
this.setAttribute("xmlns","jabber:x:data");
@@ -17,7 +19,8 @@ public class Data extends Element {
public List<Field> getFields() {
ArrayList<Field> fields = new ArrayList<Field>();
for(Element child : getChildren()) {
- if (child.getName().equals("field")) {
+ if (child.getName().equals("field")
+ && !FORM_TYPE.equals(child.getAttribute("var"))) {
fields.add(Field.parse(child));
}
}
@@ -26,7 +29,8 @@ public class Data extends Element {
public Field getFieldByName(String needle) {
for(Element child : getChildren()) {
- if (child.getName().equals("field") && needle.equals(child.getAttribute("var"))) {
+ if (child.getName().equals("field")
+ && needle.equals(child.getAttribute("var"))) {
return Field.parse(child);
}
}
@@ -76,11 +80,11 @@ public class Data extends Element {
}
public void setFormType(String formType) {
- this.put("FORM_TYPE", formType);
+ this.put(FORM_TYPE, formType);
}
public String getFormType() {
- String type = getValue("FORM_TYPE");
+ String type = getValue(FORM_TYPE);
return type == null ? "" : type;
}