Fix unsuback compat (#2102)
This commit is contained in:
parent
edf0ded9f3
commit
1797aadbe7
|
@ -521,11 +521,7 @@ connack({?RC_SUCCESS, SP, PState}) ->
|
||||||
|
|
||||||
connack({ReasonCode, PState = #pstate{proto_ver = ProtoVer}}) ->
|
connack({ReasonCode, PState = #pstate{proto_ver = ProtoVer}}) ->
|
||||||
emqx_hooks:run('client.connected', [credentials(PState), ReasonCode, attrs(PState)]),
|
emqx_hooks:run('client.connected', [credentials(PState), ReasonCode, attrs(PState)]),
|
||||||
ReasonCode1 = if ProtoVer =:= ?MQTT_PROTO_V5 ->
|
[ReasonCode1] = reason_codes_compat(connack, [ReasonCode], ProtoVer),
|
||||||
ReasonCode;
|
|
||||||
true ->
|
|
||||||
emqx_reason_codes:compat(connack, ReasonCode)
|
|
||||||
end,
|
|
||||||
_ = deliver({connack, ReasonCode1}, PState),
|
_ = deliver({connack, ReasonCode1}, PState),
|
||||||
{error, emqx_reason_codes:name(ReasonCode1, ProtoVer), PState}.
|
{error, emqx_reason_codes:name(ReasonCode1, ProtoVer), PState}.
|
||||||
|
|
||||||
|
@ -633,15 +629,10 @@ deliver({pubrec, PacketId, ReasonCode}, PState) ->
|
||||||
send(?PUBREC_PACKET(PacketId, ReasonCode), PState);
|
send(?PUBREC_PACKET(PacketId, ReasonCode), PState);
|
||||||
|
|
||||||
deliver({suback, PacketId, ReasonCodes}, PState = #pstate{proto_ver = ProtoVer}) ->
|
deliver({suback, PacketId, ReasonCodes}, PState = #pstate{proto_ver = ProtoVer}) ->
|
||||||
send(?SUBACK_PACKET(PacketId,
|
send(?SUBACK_PACKET(PacketId, reason_codes_compat(suback, ReasonCodes, ProtoVer)), PState);
|
||||||
if ProtoVer =:= ?MQTT_PROTO_V5 ->
|
|
||||||
ReasonCodes;
|
|
||||||
true ->
|
|
||||||
[emqx_reason_codes:compat(suback, RC) || RC <- ReasonCodes]
|
|
||||||
end), PState);
|
|
||||||
|
|
||||||
deliver({unsuback, PacketId, ReasonCodes}, PState) ->
|
deliver({unsuback, PacketId, ReasonCodes}, PState = #pstate{proto_ver = ProtoVer}) ->
|
||||||
send(?UNSUBACK_PACKET(PacketId, ReasonCodes), PState);
|
send(?UNSUBACK_PACKET(PacketId, reason_codes_compat(unsuback, ReasonCodes, ProtoVer)), PState);
|
||||||
|
|
||||||
%% Deliver a disconnect for mqtt 5.0
|
%% Deliver a disconnect for mqtt 5.0
|
||||||
deliver({disconnect, ReasonCode}, PState = #pstate{proto_ver = ?MQTT_PROTO_V5}) ->
|
deliver({disconnect, ReasonCode}, PState = #pstate{proto_ver = ?MQTT_PROTO_V5}) ->
|
||||||
|
@ -981,3 +972,11 @@ do_acl_deny_action(?SUBSCRIBE_PACKET(_PacketId, _Properties, _RawTopicFilters),
|
||||||
end;
|
end;
|
||||||
do_acl_deny_action(_PubSupPacket, _ReasonCode, PState) ->
|
do_acl_deny_action(_PubSupPacket, _ReasonCode, PState) ->
|
||||||
{ok, PState}.
|
{ok, PState}.
|
||||||
|
|
||||||
|
%% Reason code compat
|
||||||
|
reason_codes_compat(_PktType, ReasonCodes, ?MQTT_PROTO_V5) ->
|
||||||
|
ReasonCodes;
|
||||||
|
reason_codes_compat(unsuback, _ReasonCodes, _ProtoVer) ->
|
||||||
|
undefined;
|
||||||
|
reason_codes_compat(PktType, ReasonCodes, _ProtoVer) ->
|
||||||
|
[emqx_reason_codes:compat(PktType, RC) || RC <- ReasonCodes].
|
||||||
|
|
|
@ -140,4 +140,6 @@ compat(connack, 16#9D) -> ?CONNACK_SERVER;
|
||||||
compat(connack, 16#9F) -> ?CONNACK_SERVER;
|
compat(connack, 16#9F) -> ?CONNACK_SERVER;
|
||||||
|
|
||||||
compat(suback, Code) when Code =< ?QOS_2 -> Code;
|
compat(suback, Code) when Code =< ?QOS_2 -> Code;
|
||||||
compat(suback, Code) when Code >= 16#80 -> 16#80.
|
compat(suback, Code) when Code >= 16#80 -> 16#80;
|
||||||
|
|
||||||
|
compat(unsuback, _Code) -> undefined.
|
||||||
|
|
|
@ -112,6 +112,10 @@ compat_test() ->
|
||||||
(((codes_test(suback))
|
(((codes_test(suback))
|
||||||
([0,1,2, 16#80]))
|
([0,1,2, 16#80]))
|
||||||
([0,1,2, 16#80]))
|
([0,1,2, 16#80]))
|
||||||
|
(fun emqx_reason_codes:compat/2),
|
||||||
|
(((codes_test(unsuback))
|
||||||
|
([0, 1, 2]))
|
||||||
|
([undefined, undefined, undefined]))
|
||||||
(fun emqx_reason_codes:compat/2).
|
(fun emqx_reason_codes:compat/2).
|
||||||
|
|
||||||
codes_test(AsistVar) ->
|
codes_test(AsistVar) ->
|
||||||
|
|
Loading…
Reference in New Issue