refactor: separate CONNECT flags validation funcs
This commit is contained in:
parent
cc89a20ed9
commit
983f02ea1b
|
@ -284,28 +284,18 @@ parse_connect(FrameBin, StrictMode) ->
|
||||||
end,
|
end,
|
||||||
parse_connect2(ProtoName, Rest, StrictMode).
|
parse_connect2(ProtoName, Rest, StrictMode).
|
||||||
|
|
||||||
% Note: return malformed if reserved flag is not 0.
|
|
||||||
parse_connect2(
|
parse_connect2(
|
||||||
ProtoName,
|
ProtoName,
|
||||||
<<BridgeTag:4, ProtoVer:4, UsernameFlag:1, PasswordFlag:1, WillRetainB:1, WillQoS:2,
|
<<BridgeTag:4, ProtoVer:4, UsernameFlag:1, PasswordFlag:1, WillRetainB:1, WillQoS:2,
|
||||||
WillFlagB:1, CleanStart:1, Reserved:1, KeepAlive:16/big, Rest2/binary>>,
|
WillFlagB:1, CleanStart:1, Reserved:1, KeepAlive:16/big, Rest2/binary>>,
|
||||||
StrictMode
|
StrictMode
|
||||||
) ->
|
) ->
|
||||||
case Reserved of
|
_ = validate_connect_reserved(Reserved),
|
||||||
0 -> ok;
|
_ = validate_connect_will(
|
||||||
1 -> ?PARSE_ERR(reserved_connect_flag)
|
|
||||||
end,
|
|
||||||
WillFlag = bool(WillFlagB),
|
WillFlag = bool(WillFlagB),
|
||||||
WillRetain = bool(WillRetainB),
|
WillRetain = bool(WillRetainB),
|
||||||
case WillFlag of
|
WillQoS
|
||||||
%% MQTT-v3.1.1-[MQTT-3.1.2-13], MQTT-v5.0-[MQTT-3.1.2-11]
|
),
|
||||||
false when WillQoS > 0 -> ?PARSE_ERR(invalid_will_qos);
|
|
||||||
%% MQTT-v3.1.1-[MQTT-3.1.2-14], MQTT-v5.0-[MQTT-3.1.2-12]
|
|
||||||
true when WillQoS > 2 -> ?PARSE_ERR(invalid_will_qos);
|
|
||||||
%% MQTT-v3.1.1-[MQTT-3.1.2-15], MQTT-v5.0-[MQTT-3.1.2-13]
|
|
||||||
false when WillRetain -> ?PARSE_ERR(invalid_will_retain);
|
|
||||||
_ -> ok
|
|
||||||
end,
|
|
||||||
{Properties, Rest3} = parse_properties(Rest2, ProtoVer, StrictMode),
|
{Properties, Rest3} = parse_properties(Rest2, ProtoVer, StrictMode),
|
||||||
{ClientId, Rest4} = parse_utf8_string_with_cause(Rest3, StrictMode, invalid_clientid),
|
{ClientId, Rest4} = parse_utf8_string_with_cause(Rest3, StrictMode, invalid_clientid),
|
||||||
ConnPacket = #mqtt_packet_connect{
|
ConnPacket = #mqtt_packet_connect{
|
||||||
|
@ -1133,6 +1123,18 @@ validate_subqos([3 | _]) -> ?PARSE_ERR(bad_subqos);
|
||||||
validate_subqos([_ | T]) -> validate_subqos(T);
|
validate_subqos([_ | T]) -> validate_subqos(T);
|
||||||
validate_subqos([]) -> ok.
|
validate_subqos([]) -> ok.
|
||||||
|
|
||||||
|
%% MQTT-v3.1.1-[MQTT-3.1.2-3], MQTT-v5.0-[MQTT-3.1.2-3]
|
||||||
|
validate_connect_reserved(0) -> ok;
|
||||||
|
validate_connect_reserved(1) -> ?PARSE_ERR(reserved_connect_flag).
|
||||||
|
|
||||||
|
%% MQTT-v3.1.1-[MQTT-3.1.2-13], MQTT-v5.0-[MQTT-3.1.2-11]
|
||||||
|
validate_connect_will(false, _, WillQos) when WillQos > 0 -> ?PARSE_ERR(invalid_will_qos);
|
||||||
|
%% MQTT-v3.1.1-[MQTT-3.1.2-14], MQTT-v5.0-[MQTT-3.1.2-12]
|
||||||
|
validate_connect_will(true, _, WillQoS) when WillQoS > 2 -> ?PARSE_ERR(invalid_will_qos);
|
||||||
|
%% MQTT-v3.1.1-[MQTT-3.1.2-15], MQTT-v5.0-[MQTT-3.1.2-13]
|
||||||
|
validate_connect_will(false, WillRetain, _) when WillRetain -> ?PARSE_ERR(invalid_will_retain);
|
||||||
|
validate_connect_will(_, _, _) -> ok.
|
||||||
|
|
||||||
bool(0) -> false;
|
bool(0) -> false;
|
||||||
bool(1) -> true.
|
bool(1) -> true.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue