Commit 7fd517dafa7f129759b5b78fdad31a9f02fd244e

Authored by blackstar-baba
Committed by GitHub
1 parent 02dd9ecd

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
... ... @@ -18,8 +18,9 @@ package org.thingsboard.mqtt;
18 18 import io.netty.channel.EventLoop;
19 19 import io.netty.handler.codec.mqtt.MqttFixedHeader;
20 20 import io.netty.handler.codec.mqtt.MqttMessage;
21   -import io.netty.util.concurrent.ScheduledFuture;
22 21 import io.netty.handler.codec.mqtt.MqttMessageType;
  22 +import io.netty.handler.codec.mqtt.MqttQoS;
  23 +import io.netty.util.concurrent.ScheduledFuture;
23 24
24 25 import java.util.concurrent.TimeUnit;
25 26 import java.util.function.BiConsumer;
... ... @@ -45,7 +46,10 @@ final class RetransmissionHandler<T extends MqttMessage> {
45 46 private void startTimer(EventLoop eventLoop){
46 47 this.timer = eventLoop.schedule(() -> {
47 48 this.timeout += 5;
48   - boolean isDup = this.originalMessage.fixedHeader().messageType() == MqttMessageType.PUBLISH ? true : this.originalMessage.fixedHeader().isDup();
  49 + boolean isDup = this.originalMessage.fixedHeader().isDup();
  50 + if(this.originalMessage.fixedHeader().messageType() == MqttMessageType.PUBLISH && this.originalMessage.fixedHeader().qosLevel() != MqttQoS.AT_MOST_ONCE){
  51 + isDup = true;
  52 + }
49 53 MqttFixedHeader fixedHeader = new MqttFixedHeader(this.originalMessage.fixedHeader().messageType(), isDup, this.originalMessage.fixedHeader().qosLevel(), this.originalMessage.fixedHeader().isRetain(), this.originalMessage.fixedHeader().remainingLength());
50 54 handler.accept(fixedHeader, originalMessage);
51 55 startTimer(eventLoop);
... ...