richard-scott commented on issue #218:
URL: https://github.com/apache/bifromq/issues/218#issuecomment-3724619280
This patch has resolved my issue.
### The Critical Change
goAway() → goAwayNow() (MQTT 3.1.1)
farewell() → farewellNow() (MQTT 5.0)
### Why this matters
goAway() / farewell(): schedules a delayed disconnect (100–3000ms random
delay)
goAwayNow() / farewellNow(): disconnects immediately
With the delay, QoS 2 clients could complete PUBREC/PUBREL/PUBCOMP before
disconnect, making the publish appear accepted. Immediate disconnect prevents
that handshake from completing, so the rejection is clear.
```
diff --git
a/bifromq-mqtt/bifromq-mqtt-server/src/main/java/org/apache/bifromq/mqtt/handler/v3/MQTT3ProtocolHelper.java
b/bifromq-mqtt/bifromq-mqtt-server/src/main/java/org/apache/bifromq/mqtt/handler/v3/MQTT3ProtocolHelper.java
index f9f36d99..9877e799 100644
---
a/bifromq-mqtt/bifromq-mqtt-server/src/main/java/org/apache/bifromq/mqtt/handler/v3/MQTT3ProtocolHelper.java
+++
b/bifromq-mqtt/bifromq-mqtt-server/src/main/java/org/apache/bifromq/mqtt/handler/v3/MQTT3ProtocolHelper.java
@@ -363,7 +363,7 @@ public class MQTT3ProtocolHelper implements
IMQTTProtocolHelper {
return
goAway(getLocal(ProtocolViolation.class).statement("MQTT3-3.3.1-2").clientInfo(clientInfo));
}
if (message.fixedHeader().qosLevel().value() >
settings.maxQoS.getNumber()) {
- return goAway(getLocal(ProtocolViolation.class)
+ return goAwayNow(getLocal(ProtocolViolation.class)
.statement(message.fixedHeader().qosLevel().value() + " is
disabled")
.clientInfo(clientInfo));
}
diff --git
a/bifromq-mqtt/bifromq-mqtt-server/src/main/java/org/apache/bifromq/mqtt/handler/v5/MQTT5ProtocolHelper.java
b/bifromq-mqtt/bifromq-mqtt-server/src/main/java/org/apache/bifromq/mqtt/handler/v5/MQTT5ProtocolHelper.java
index 830671bf..743b5405 100644
---
a/bifromq-mqtt/bifromq-mqtt-server/src/main/java/org/apache/bifromq/mqtt/handler/v5/MQTT5ProtocolHelper.java
+++
b/bifromq-mqtt/bifromq-mqtt-server/src/main/java/org/apache/bifromq/mqtt/handler/v5/MQTT5ProtocolHelper.java
@@ -518,7 +518,7 @@ public class MQTT5ProtocolHelper implements
IMQTTProtocolHelper {
getLocal(ProtocolViolation.class).statement("MQTT5-3.2.2-14").clientInfo(clientInfo));
}
if (message.fixedHeader().qosLevel().value() >
settings.maxQoS.getNumber()) {
- return farewell(
+ return farewellNow(
MQTT5MessageBuilders.disconnect().reasonCode(MQTT5DisconnectReasonCode.QoSNotSupported).build(),
getLocal(ProtocolViolation.class).statement("MQTT5-3.2.2-11").clientInfo(clientInfo));
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]