Skip to content

Commit

Permalink
Issue #539 - MQTTv5 - Handling Retain, Wildcard, SubId, Shared Sub Av…
Browse files Browse the repository at this point in the history
…ailable flags in properties correctly.

Signed-off-by: James Sutton <james.sutton@uk.ibm.com>
  • Loading branch information
jpwsutton committed May 25, 2018
1 parent b62f929 commit 2e5df40
Showing 1 changed file with 32 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,10 @@ public class MqttProperties {
private Boolean requestProblemInfo;
private Boolean requestResponseInfo;
private Integer maximumQoS;
private Boolean retainAvailable;
private Boolean wildcardSubscriptionsAvailable = false;
private Boolean subscriptionIdentifiersAvailable = false;
private Boolean sharedSubscriptionAvailable = false;
private Boolean retainAvailable = null;
private Boolean wildcardSubscriptionsAvailable = null;
private Boolean subscriptionIdentifiersAvailable = null;
private Boolean sharedSubscriptionAvailable = null;

// Two Byte Integer
private Integer serverKeepAlive;
Expand Down Expand Up @@ -341,6 +341,7 @@ public byte[] encodeProperties() throws MqttException {
// Retain Available
if (retainAvailable != null && validProperties.contains(RETAIN_AVAILABLE_IDENTIFIER)) {
outputStream.write(RETAIN_AVAILABLE_IDENTIFIER);
outputStream.writeBoolean(retainAvailable);
}

// User Defined Properties
Expand All @@ -363,18 +364,21 @@ public byte[] encodeProperties() throws MqttException {
// Wildcard Subscription Available flag
if (wildcardSubscriptionsAvailable != null && validProperties.contains(WILDCARD_SUB_AVAILABLE_IDENTIFIER)) {
outputStream.write(WILDCARD_SUB_AVAILABLE_IDENTIFIER);
outputStream.writeBoolean(wildcardSubscriptionsAvailable);
}

// Subscription Identifiers Available flag
if (subscriptionIdentifiersAvailable != null
&& validProperties.contains(SUBSCRIPTION_AVAILABLE_IDENTIFIER)) {
outputStream.write(SUBSCRIPTION_AVAILABLE_IDENTIFIER);
outputStream.writeBoolean(subscriptionIdentifiersAvailable);
}

// Shared Subscription Available flag
if (sharedSubscriptionAvailable != null
&& validProperties.contains(SHARED_SUBSCRIPTION_AVAILABLE_IDENTIFIER)) {
outputStream.write(SHARED_SUBSCRIPTION_AVAILABLE_IDENTIFIER);
outputStream.writeBoolean(sharedSubscriptionAvailable);
}

int length = outputStream.size();
Expand Down Expand Up @@ -464,19 +468,19 @@ public void decodeProperties(DataInputStream dis) throws IOException, MqttExcept
} else if (identifier == MAXIMUM_QOS_IDENTIFIER) {
maximumQoS = (int) inputStream.readShort();
} else if (identifier == RETAIN_AVAILABLE_IDENTIFIER) {
retainAvailable = true;
retainAvailable = inputStream.readBoolean();
} else if (identifier == USER_DEFINED_PAIR_IDENTIFIER) {
String key = MqttDataTypes.decodeUTF8(inputStream);
String value = MqttDataTypes.decodeUTF8(inputStream);
userProperties.add(new UserProperty(key, value));
} else if (identifier == MAXIMUM_PACKET_SIZE_IDENTIFIER) {
maximumPacketSize = MqttDataTypes.readUnsignedFourByteInt(inputStream);
} else if (identifier == WILDCARD_SUB_AVAILABLE_IDENTIFIER) {
wildcardSubscriptionsAvailable = true;
wildcardSubscriptionsAvailable = inputStream.readBoolean();
} else if (identifier == SUBSCRIPTION_AVAILABLE_IDENTIFIER) {
subscriptionIdentifiersAvailable = true;
subscriptionIdentifiersAvailable = inputStream.readBoolean();
} else if (identifier == SHARED_SUBSCRIPTION_AVAILABLE_IDENTIFIER) {
sharedSubscriptionAvailable = true;
sharedSubscriptionAvailable = inputStream.readBoolean();
} else {

// Unidentified Identifier
Expand Down Expand Up @@ -715,7 +719,11 @@ public void setMaximumPacketSize(Long maximumPacketSize) {
* @return Retain Available Flag. May be Null.
*/
public Boolean isRetainAvailable() {
return retainAvailable;
if(retainAvailable == null || retainAvailable == true) {
return true;
} else {
return false;
}
}

/**
Expand Down Expand Up @@ -912,7 +920,11 @@ public void setServerReference(String serverReference) {
* @return A boolean defining whether Wildcard Subscriptions are supported.
*/
public boolean isWildcardSubscriptionsAvailable() {
return wildcardSubscriptionsAvailable;
if(wildcardSubscriptionsAvailable == null || wildcardSubscriptionsAvailable == true) {
return true;
} else {
return false;
}
}

/**
Expand Down Expand Up @@ -940,7 +952,11 @@ public void setWildcardSubscriptionsAvailable(boolean wildcardSubscriptionsAvail
* @return A boolean defining whether Subscription Identifiers are supported.
*/
public boolean isSubscriptionIdentifiersAvailable() {
return subscriptionIdentifiersAvailable;
if(subscriptionIdentifiersAvailable == null || subscriptionIdentifiersAvailable == true) {
return true;
} else {
return false;
}
}

/**
Expand All @@ -967,7 +983,11 @@ public void setSubscriptionIdentifiersAvailable(boolean subscriptionIdentifiersA
* @return A boolean defining whether Shared Subscriptions are supported.
*/
public boolean isSharedSubscriptionAvailable() {
return sharedSubscriptionAvailable;
if(sharedSubscriptionAvailable == null || sharedSubscriptionAvailable == true) {
return true;
} else {
return false;
}
}

/**
Expand Down

0 comments on commit 2e5df40

Please sign in to comment.