Remove the CONNACK's `Maximum-QoS` key if it equal to 2 (#3321)
This commit is contained in:
parent
b2e5b523dd
commit
7e00b58db5
|
@ -1182,14 +1182,22 @@ enrich_connack_caps(AckProps, #channel{conninfo = #{proto_ver := ?MQTT_PROTO_V
|
|||
shared_subscription := Shared,
|
||||
wildcard_subscription := Wildcard
|
||||
} = emqx_mqtt_caps:get_caps(Zone),
|
||||
AckProps#{'Maximum-QoS' => MaxQoS,
|
||||
'Retain-Available' => flag(Retain),
|
||||
'Maximum-Packet-Size' => MaxPktSize,
|
||||
'Topic-Alias-Maximum' => MaxAlias,
|
||||
'Wildcard-Subscription-Available' => flag(Wildcard),
|
||||
'Subscription-Identifier-Available' => 1,
|
||||
'Shared-Subscription-Available' => flag(Shared)
|
||||
};
|
||||
NAckProps = AckProps#{'Retain-Available' => flag(Retain),
|
||||
'Maximum-Packet-Size' => MaxPktSize,
|
||||
'Topic-Alias-Maximum' => MaxAlias,
|
||||
'Wildcard-Subscription-Available' => flag(Wildcard),
|
||||
'Subscription-Identifier-Available' => 1,
|
||||
'Shared-Subscription-Available' => flag(Shared)
|
||||
},
|
||||
%% MQTT 5.0 - 3.2.2.3.4:
|
||||
%% It is a Protocol Error to include Maximum QoS more than once,
|
||||
%% or to have a value other than 0 or 1. If the Maximum QoS is absent,
|
||||
%% the Client uses a Maximum QoS of 2.
|
||||
case MaxQoS =:= 2 of
|
||||
true -> NAckProps;
|
||||
_ -> NAckProps#{'Maximum-QoS' => MaxQoS}
|
||||
end;
|
||||
|
||||
enrich_connack_caps(AckProps, _Channel) -> AckProps.
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
|
|
|
@ -522,8 +522,7 @@ t_enrich_connack_caps(_) ->
|
|||
'Topic-Alias-Maximum' := 10,
|
||||
'Wildcard-Subscription-Available' := 1,
|
||||
'Subscription-Identifier-Available' := 1,
|
||||
'Shared-Subscription-Available' := 1,
|
||||
'Maximum-QoS' := ?QOS_2
|
||||
'Shared-Subscription-Available' := 1
|
||||
}, AckProps),
|
||||
ok = meck:unload(emqx_mqtt_caps).
|
||||
|
||||
|
|
|
@ -475,7 +475,7 @@ t_connack_max_qos_allowed(_) ->
|
|||
|
||||
{ok, Client5} = emqtt:start_link([{proto_ver, v5}]),
|
||||
{ok, Connack5} = emqtt:connect(Client5),
|
||||
?assertEqual(2, maps:get('Maximum-QoS', Connack5)), %% [MQTT-3.2.2-9]
|
||||
?assertEqual(undefined, maps:get('Maximum-QoS', Connack5, undefined)), %% [MQTT-3.2.2-9]
|
||||
ok = emqtt:disconnect(Client5),
|
||||
waiting_client_process_exit(Client5),
|
||||
|
||||
|
|
Loading…
Reference in New Issue