Explorar o código

Fix issue #1319, reset DUP=0 when recv DUP=1 PUBLISH Message

HeeeJianBo %!s(int64=8) %!d(string=hai) anos
pai
achega
279b96f146
Modificáronse 1 ficheiros con 6 adicións e 2 borrados
  1. 6 2
      src/emqttd_protocol.erl

+ 6 - 2
src/emqttd_protocol.erl

@@ -308,7 +308,9 @@ publish(Packet = ?PUBLISH_PACKET(?QOS_0, _PacketId),
                      username   = Username,
                      mountpoint = MountPoint,
                      session    = Session}) ->
-    Msg = emqttd_message:from_packet(Username, ClientId, Packet),
+    Msg0 = emqttd_message:from_packet(Username, ClientId, Packet),
+    % MQTT 3.3.1-3: Need reset DUP flag when recv publish message 
+    Msg  = emqttd_message:unset_flag(dup, Msg0),
     emqttd_session:publish(Session, mount(MountPoint, Msg));
 
 publish(Packet = ?PUBLISH_PACKET(?QOS_1, _PacketId), State) ->
@@ -322,7 +324,9 @@ with_puback(Type, Packet = ?PUBLISH_PACKET(_Qos, PacketId),
                                  username   = Username,
                                  mountpoint = MountPoint,
                                  session    = Session}) ->
-    Msg = emqttd_message:from_packet(Username, ClientId, Packet),
+    Msg0 = emqttd_message:from_packet(Username, ClientId, Packet),
+    % MQTT 3.3.1-3: Need reset DUP flag when recv publish message 
+    Msg  = emqttd_message:unset_flag(dup, Msg0),
     case emqttd_session:publish(Session, mount(MountPoint, Msg)) of
         ok ->
             send(?PUBACK_PACKET(Type, PacketId), State);