Skip to content

Commit

Permalink
1. align mqtt5 disconnect packet behavior.
Browse files Browse the repository at this point in the history
  • Loading branch information
Gujiawei-Edinburgh committed Dec 10, 2024
1 parent 603ce74 commit 8bb94e5
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 8bb94e5

Please sign in to comment.