@@ -125,10 +125,10 @@ public class MqttProperties {
125125 private Boolean requestProblemInfo ;
126126 private Boolean requestResponseInfo ;
127127 private Integer maximumQoS ;
128- private Boolean retainAvailable ;
129- private Boolean wildcardSubscriptionsAvailable = false ;
130- private Boolean subscriptionIdentifiersAvailable = false ;
131- private Boolean sharedSubscriptionAvailable = false ;
128+ private Boolean retainAvailable = null ;
129+ private Boolean wildcardSubscriptionsAvailable = null ;
130+ private Boolean subscriptionIdentifiersAvailable = null ;
131+ private Boolean sharedSubscriptionAvailable = null ;
132132
133133 // Two Byte Integer
134134 private Integer serverKeepAlive ;
@@ -341,6 +341,7 @@ public byte[] encodeProperties() throws MqttException {
341341 // Retain Available
342342 if (retainAvailable != null && validProperties .contains (RETAIN_AVAILABLE_IDENTIFIER )) {
343343 outputStream .write (RETAIN_AVAILABLE_IDENTIFIER );
344+ outputStream .writeBoolean (retainAvailable );
344345 }
345346
346347 // User Defined Properties
@@ -363,18 +364,21 @@ public byte[] encodeProperties() throws MqttException {
363364 // Wildcard Subscription Available flag
364365 if (wildcardSubscriptionsAvailable != null && validProperties .contains (WILDCARD_SUB_AVAILABLE_IDENTIFIER )) {
365366 outputStream .write (WILDCARD_SUB_AVAILABLE_IDENTIFIER );
367+ outputStream .writeBoolean (wildcardSubscriptionsAvailable );
366368 }
367369
368370 // Subscription Identifiers Available flag
369371 if (subscriptionIdentifiersAvailable != null
370372 && validProperties .contains (SUBSCRIPTION_AVAILABLE_IDENTIFIER )) {
371373 outputStream .write (SUBSCRIPTION_AVAILABLE_IDENTIFIER );
374+ outputStream .writeBoolean (subscriptionIdentifiersAvailable );
372375 }
373376
374377 // Shared Subscription Available flag
375378 if (sharedSubscriptionAvailable != null
376379 && validProperties .contains (SHARED_SUBSCRIPTION_AVAILABLE_IDENTIFIER )) {
377380 outputStream .write (SHARED_SUBSCRIPTION_AVAILABLE_IDENTIFIER );
381+ outputStream .writeBoolean (sharedSubscriptionAvailable );
378382 }
379383
380384 int length = outputStream .size ();
@@ -464,19 +468,19 @@ public void decodeProperties(DataInputStream dis) throws IOException, MqttExcept
464468 } else if (identifier == MAXIMUM_QOS_IDENTIFIER ) {
465469 maximumQoS = (int ) inputStream .readShort ();
466470 } else if (identifier == RETAIN_AVAILABLE_IDENTIFIER ) {
467- retainAvailable = true ;
471+ retainAvailable = inputStream . readBoolean () ;
468472 } else if (identifier == USER_DEFINED_PAIR_IDENTIFIER ) {
469473 String key = MqttDataTypes .decodeUTF8 (inputStream );
470474 String value = MqttDataTypes .decodeUTF8 (inputStream );
471475 userProperties .add (new UserProperty (key , value ));
472476 } else if (identifier == MAXIMUM_PACKET_SIZE_IDENTIFIER ) {
473477 maximumPacketSize = MqttDataTypes .readUnsignedFourByteInt (inputStream );
474478 } else if (identifier == WILDCARD_SUB_AVAILABLE_IDENTIFIER ) {
475- wildcardSubscriptionsAvailable = true ;
479+ wildcardSubscriptionsAvailable = inputStream . readBoolean () ;
476480 } else if (identifier == SUBSCRIPTION_AVAILABLE_IDENTIFIER ) {
477- subscriptionIdentifiersAvailable = true ;
481+ subscriptionIdentifiersAvailable = inputStream . readBoolean () ;
478482 } else if (identifier == SHARED_SUBSCRIPTION_AVAILABLE_IDENTIFIER ) {
479- sharedSubscriptionAvailable = true ;
483+ sharedSubscriptionAvailable = inputStream . readBoolean () ;
480484 } else {
481485
482486 // Unidentified Identifier
@@ -715,7 +719,11 @@ public void setMaximumPacketSize(Long maximumPacketSize) {
715719 * @return Retain Available Flag. May be Null.
716720 */
717721 public Boolean isRetainAvailable () {
718- return retainAvailable ;
722+ if (retainAvailable == null || retainAvailable == true ) {
723+ return true ;
724+ } else {
725+ return false ;
726+ }
719727 }
720728
721729 /**
@@ -912,7 +920,11 @@ public void setServerReference(String serverReference) {
912920 * @return A boolean defining whether Wildcard Subscriptions are supported.
913921 */
914922 public boolean isWildcardSubscriptionsAvailable () {
915- return wildcardSubscriptionsAvailable ;
923+ if (wildcardSubscriptionsAvailable == null || wildcardSubscriptionsAvailable == true ) {
924+ return true ;
925+ } else {
926+ return false ;
927+ }
916928 }
917929
918930 /**
@@ -940,7 +952,11 @@ public void setWildcardSubscriptionsAvailable(boolean wildcardSubscriptionsAvail
940952 * @return A boolean defining whether Subscription Identifiers are supported.
941953 */
942954 public boolean isSubscriptionIdentifiersAvailable () {
943- return subscriptionIdentifiersAvailable ;
955+ if (subscriptionIdentifiersAvailable == null || subscriptionIdentifiersAvailable == true ) {
956+ return true ;
957+ } else {
958+ return false ;
959+ }
944960 }
945961
946962 /**
@@ -967,7 +983,11 @@ public void setSubscriptionIdentifiersAvailable(boolean subscriptionIdentifiersA
967983 * @return A boolean defining whether Shared Subscriptions are supported.
968984 */
969985 public boolean isSharedSubscriptionAvailable () {
970- return sharedSubscriptionAvailable ;
986+ if (sharedSubscriptionAvailable == null || sharedSubscriptionAvailable == true ) {
987+ return true ;
988+ } else {
989+ return false ;
990+ }
971991 }
972992
973993 /**
0 commit comments