Commit 0064e1d1150f797388e535b8d427830de831316e

Authored by Andrew Shvayka
Committed by GitHub
2 parents 465bbfd7 dda31248

Merge pull request #2826 from blackstar-baba/master

fix bug: Resending the message causes the client to interrupt
@@ -19,6 +19,7 @@ import io.netty.channel.EventLoop; @@ -19,6 +19,7 @@ import io.netty.channel.EventLoop;
19 import io.netty.handler.codec.mqtt.MqttFixedHeader; 19 import io.netty.handler.codec.mqtt.MqttFixedHeader;
20 import io.netty.handler.codec.mqtt.MqttMessage; 20 import io.netty.handler.codec.mqtt.MqttMessage;
21 import io.netty.util.concurrent.ScheduledFuture; 21 import io.netty.util.concurrent.ScheduledFuture;
  22 +import io.netty.handler.codec.mqtt.MqttMessageType;
22 23
23 import java.util.concurrent.TimeUnit; 24 import java.util.concurrent.TimeUnit;
24 import java.util.function.BiConsumer; 25 import java.util.function.BiConsumer;
@@ -44,7 +45,8 @@ final class RetransmissionHandler<T extends MqttMessage> { @@ -44,7 +45,8 @@ final class RetransmissionHandler<T extends MqttMessage> {
44 private void startTimer(EventLoop eventLoop){ 45 private void startTimer(EventLoop eventLoop){
45 this.timer = eventLoop.schedule(() -> { 46 this.timer = eventLoop.schedule(() -> {
46 this.timeout += 5; 47 this.timeout += 5;
47 - MqttFixedHeader fixedHeader = new MqttFixedHeader(this.originalMessage.fixedHeader().messageType(), true, this.originalMessage.fixedHeader().qosLevel(), this.originalMessage.fixedHeader().isRetain(), this.originalMessage.fixedHeader().remainingLength()); 48 + boolean isDup = this.originalMessage.fixedHeader().messageType() == MqttMessageType.PUBLISH ? true : this.originalMessage.fixedHeader().isDup();
  49 + MqttFixedHeader fixedHeader = new MqttFixedHeader(this.originalMessage.fixedHeader().messageType(), isDup, this.originalMessage.fixedHeader().qosLevel(), this.originalMessage.fixedHeader().isRetain(), this.originalMessage.fixedHeader().remainingLength());
48 handler.accept(fixedHeader, originalMessage); 50 handler.accept(fixedHeader, originalMessage);
49 startTimer(eventLoop); 51 startTimer(eventLoop);
50 }, timeout, TimeUnit.SECONDS); 52 }, timeout, TimeUnit.SECONDS);