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]

Reply via email to