diff --git a/src/emqttd_protocol.erl b/src/emqttd_protocol.erl index 31354dd84..4c4ec55c5 100644 --- a/src/emqttd_protocol.erl +++ b/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);