diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/formtypes/FormFieldRegistry.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/formtypes/FormFieldRegistry.java
index 356cf52fb..5dda27842 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/formtypes/FormFieldRegistry.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/formtypes/FormFieldRegistry.java
@@ -68,6 +68,12 @@ public class FormFieldRegistry {
}
}
+ public static void register(String formType, FormField.Type fieldType, String... fieldNames) {
+ for (String fieldName : fieldNames) {
+ register(formType, fieldName, fieldType);
+ }
+ }
+
public static void register(String formType, String fieldName, FormField.Type fieldType) {
StringUtils.requireNotNullNorEmpty(fieldName, "fieldName must be provided");
Objects.requireNonNull(fieldType);
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/softwareinfo/form/SoftwareInfoForm.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/softwareinfo/form/SoftwareInfoForm.java
index 1d6a7af4a..f2327face 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/softwareinfo/form/SoftwareInfoForm.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/softwareinfo/form/SoftwareInfoForm.java
@@ -1,6 +1,6 @@
/**
*
- * Copyright 2020 Aditya Borikar
+ * Copyright 2020 Aditya Borikar, 2021 Florian Schmaus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@ import java.util.List;
import org.jivesoftware.smack.util.EqualsUtil;
import org.jivesoftware.smack.util.HashCode;
-
+import org.jivesoftware.smackx.formtypes.FormFieldRegistry;
import org.jivesoftware.smackx.mediaelement.element.MediaElement;
import org.jivesoftware.smackx.xdata.FormField;
import org.jivesoftware.smackx.xdata.FormFieldChildElement;
@@ -47,6 +47,11 @@ public final class SoftwareInfoForm extends FilledForm {
public static final String SOFTWARE_VERSION = "software_version";
public static final String ICON = "icon";
+ static {
+ FormFieldRegistry.register(FORM_TYPE, FormField.Type.text_single,
+ OS, OS_VERSION, SOFTWARE, SOFTWARE_VERSION);
+ }
+
private SoftwareInfoForm(DataForm dataForm) {
super(dataForm);
}
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/BooleanFormField.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/BooleanFormField.java
index 85e351649..6681e6408 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/BooleanFormField.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/BooleanFormField.java
@@ -35,7 +35,31 @@ public class BooleanFormField extends SingleValueFormField {
return value.toString();
}
- public Boolean getValueAsBoolean() {
+ /**
+ * Get the value of the booelan field. Note that, if no explicit boolean value is provided, in the form of "true",
+ * "false", "0", or "1", then the default value of a boolean field is false
, according to
+ * XEP-0004 ยง 3.3.
+ *
+ * @return the boolean value of this form field.
+ */
+ public boolean getValueAsBoolean() {
+ if (value == null) {
+ return false;
+ }
+ return value;
+ }
+
+ /**
+ * Get the value of the boolean field or maybe null
. Note that you usually want to use
+ * {@link #getValueAsBoolean()} instead of this method, as {@link #getValueAsBoolean()} considers the default value
+ * of boolean fields. That is, boolean form fields have the value false
if not explicitly set to
+ * something else.
+ *
+ * @return the boolean value of this form field or null
if no value was explicitly provided.
+ * @see #getValueAsBoolean()
+ * @since 4.4.5
+ */
+ public Boolean getValueAsBooleanOrNull() {
return value;
}
diff --git a/smack-extensions/src/main/resources/org.jivesoftware.smack.extensions/extensions.xml b/smack-extensions/src/main/resources/org.jivesoftware.smack.extensions/extensions.xml
index d234bb5b3..5921821a1 100644
--- a/smack-extensions/src/main/resources/org.jivesoftware.smack.extensions/extensions.xml
+++ b/smack-extensions/src/main/resources/org.jivesoftware.smack.extensions/extensions.xml
@@ -20,5 +20,6 @@
org.jivesoftware.smackx.receipts.DeliveryReceiptManager
org.jivesoftware.smackx.iqversion.VersionManager
org.jivesoftware.smackx.caps.EntityCapsManager
+ org.jivesoftware.smackx.softwareinfo.form.SoftwareInfoForm
diff --git a/smack-sasl-javax/src/main/java/org/jivesoftware/smack/sasl/javax/SASLGSSAPIMechanism.java b/smack-sasl-javax/src/main/java/org/jivesoftware/smack/sasl/javax/SASLGSSAPIMechanism.java
index 210e94ab9..bdef7d673 100644
--- a/smack-sasl-javax/src/main/java/org/jivesoftware/smack/sasl/javax/SASLGSSAPIMechanism.java
+++ b/smack-sasl-javax/src/main/java/org/jivesoftware/smack/sasl/javax/SASLGSSAPIMechanism.java
@@ -66,4 +66,8 @@ public class SASLGSSAPIMechanism extends SASLJavaXMechanism {
return new SASLGSSAPIMechanism();
}
+ @Override
+ public boolean requiresPassword() {
+ return false;
+ }
}