include form fields into caps hash calculation

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java | 19 
src/main/java/eu/siacs/conversations/xmpp/forms/Data.java                 | 12 
2 files changed, 25 insertions(+), 6 deletions(-)

Detailed changes

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;

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;
 	}