From 7fd517dafa7f129759b5b78fdad31a9f02fd244e Mon Sep 17 00:00:00 2001 From: blackstar-baba <535650957@qq.com> Date: Tue, 26 May 2020 14:01:34 +0800 Subject: [PATCH] Follow mqtt 3.1.1 protocol number 3.3.1-2 Follow mqtt 3.1.1 protocol number 3.3.1-2 : The DUP flag MUST be set to 0 for all QoS 0 messages. If the qos of the publish message is not 0, then set dup to true --- .../java/org/thingsboard/mqtt/RetransmissionHandler.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/netty-mqtt/src/main/java/org/thingsboard/mqtt/RetransmissionHandler.java b/netty-mqtt/src/main/java/org/thingsboard/mqtt/RetransmissionHandler.java index 8646d28cc8..a77fd1f83c 100644 --- a/netty-mqtt/src/main/java/org/thingsboard/mqtt/RetransmissionHandler.java +++ b/netty-mqtt/src/main/java/org/thingsboard/mqtt/RetransmissionHandler.java @@ -18,8 +18,9 @@ package org.thingsboard.mqtt; import io.netty.channel.EventLoop; import io.netty.handler.codec.mqtt.MqttFixedHeader; import io.netty.handler.codec.mqtt.MqttMessage; -import io.netty.util.concurrent.ScheduledFuture; import io.netty.handler.codec.mqtt.MqttMessageType; +import io.netty.handler.codec.mqtt.MqttQoS; +import io.netty.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; @@ -45,7 +46,10 @@ final class RetransmissionHandler { private void startTimer(EventLoop eventLoop){ this.timer = eventLoop.schedule(() -> { this.timeout += 5; - boolean isDup = this.originalMessage.fixedHeader().messageType() == MqttMessageType.PUBLISH ? true : this.originalMessage.fixedHeader().isDup(); + boolean isDup = this.originalMessage.fixedHeader().isDup(); + if(this.originalMessage.fixedHeader().messageType() == MqttMessageType.PUBLISH && this.originalMessage.fixedHeader().qosLevel() != MqttQoS.AT_MOST_ONCE){ + isDup = true; + } MqttFixedHeader fixedHeader = new MqttFixedHeader(this.originalMessage.fixedHeader().messageType(), isDup, this.originalMessage.fixedHeader().qosLevel(), this.originalMessage.fixedHeader().isRetain(), this.originalMessage.fixedHeader().remainingLength()); handler.accept(fixedHeader, originalMessage); startTimer(eventLoop);