Skip to content

Commit

Permalink
The reason code and property length can be omitted iif the reason cod…
Browse files Browse the repository at this point in the history
…e is normal and there are no properties (#107)
  • Loading branch information
Gujiawei-Edinburgh authored Dec 11, 2024
1 parent 603ce74 commit 362d656
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -715,8 +715,8 @@ public DisconnectBuilder serverReference(String serverReference) {
public MqttMessage build() {
MqttFixedHeader fixedHeader =
new MqttFixedHeader(MqttMessageType.DISCONNECT, false, MqttQoS.AT_MOST_ONCE, false, 0);
MQTT5MessageUtils.MqttPropertiesBuilder propsBuilder = MQTT5MessageUtils.mqttProps();
if (!Strings.isNullOrEmpty(reasonString) || userProps != null || !Strings.isNullOrEmpty(serverReference)) {
MQTT5MessageUtils.MqttPropertiesBuilder propsBuilder = MQTT5MessageUtils.mqttProps();
if (!Strings.isNullOrEmpty(reasonString)) {
propsBuilder.addReasonString(reasonString);
}
Expand All @@ -726,12 +726,16 @@ public MqttMessage build() {
if (userProps != null) {
propsBuilder.addUserProperties(userProps);
}
MqttReasonCodeAndPropertiesVariableHeader variableHeader =
new MqttReasonCodeAndPropertiesVariableHeader(reasonCode.value(), propsBuilder.build());
return new MqttMessage(fixedHeader, variableHeader);
}
return new MqttMessage(fixedHeader);

MqttProperties mqttProperties = propsBuilder.build();
if (reasonCode == MQTT5DisconnectReasonCode.Normal && mqttProperties.isEmpty()) {
// The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Normal disconnection)
// and there are no Properties
return new MqttMessage(fixedHeader);
}
MqttReasonCodeAndPropertiesVariableHeader variableHeader =
new MqttReasonCodeAndPropertiesVariableHeader(reasonCode.value(), mqttProperties);
return new MqttMessage(fixedHeader, variableHeader);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,21 @@ public void testDisconnect() {
.reasonCode(MQTT5DisconnectReasonCode.Normal)
.build();
verifySize(message);
}

message = MQTT5MessageBuilders.disconnect()
.reasonCode(MQTT5DisconnectReasonCode.Normal)
.reasonString("disconnected")
.build();
verifySize(message);

message = MQTT5MessageBuilders.disconnect()
.reasonCode(MQTT5DisconnectReasonCode.PacketTooLarge)
.reasonString("packet toolarge")
.userProps(UserProperties.newBuilder()
.addUserProperties(StringPair.newBuilder().setKey("key").setValue("val").build()).build())
.build();
verifySize(message);
}

private void verifySize(MqttMessage message) {
IMQTTMessageSizer.MqttMessageSize calcSize = sizer.sizeOf(message);
Expand Down

0 comments on commit 362d656

Please sign in to comment.