Skip to content

Commit 2e5df40

Browse files
committed
Issue #539 - MQTTv5 - Handling Retain, Wildcard, SubId, Shared Sub Available flags in properties correctly.
Signed-off-by: James Sutton <james.sutton@uk.ibm.com>
1 parent b62f929 commit 2e5df40

1 file changed

Lines changed: 32 additions & 12 deletions

File tree

  • org.eclipse.paho.mqttv5.common/src/main/java/org/eclipse/paho/mqttv5/common/packet

org.eclipse.paho.mqttv5.common/src/main/java/org/eclipse/paho/mqttv5/common/packet/MqttProperties.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)