fix: make sure keepalive only 0~65535 (#6232)
This commit is contained in:
parent
4767b41eb7
commit
a91f975dc2
|
@ -274,8 +274,10 @@ set_ratelimit_policy(ClientId, Policy) ->
|
||||||
set_quota_policy(ClientId, Policy) ->
|
set_quota_policy(ClientId, Policy) ->
|
||||||
call_client(ClientId, {quota, Policy}).
|
call_client(ClientId, {quota, Policy}).
|
||||||
|
|
||||||
set_keepalive(ClientId, Interval) ->
|
set_keepalive(ClientId, Interval)when Interval >= 0 andalso Interval =< 65535 ->
|
||||||
call_client(ClientId, {keepalive, Interval}).
|
call_client(ClientId, {keepalive, Interval});
|
||||||
|
set_keepalive(_ClientId, _Interval) ->
|
||||||
|
{error, ?ERROR2, <<"mqtt3.1.1 specification: keepalive must between 0~65535">>}.
|
||||||
|
|
||||||
%% @private
|
%% @private
|
||||||
call_client(ClientId, Req) ->
|
call_client(ClientId, Req) ->
|
||||||
|
|
|
@ -261,6 +261,7 @@ set_keepalive(#{clientid := ClientId}, Params) ->
|
||||||
case emqx_mgmt:set_keepalive(emqx_mgmt_util:urldecode(ClientId), Interval) of
|
case emqx_mgmt:set_keepalive(emqx_mgmt_util:urldecode(ClientId), Interval) of
|
||||||
ok -> minirest:return();
|
ok -> minirest:return();
|
||||||
{error, not_found} -> minirest:return({error, ?ERROR12, not_found});
|
{error, not_found} -> minirest:return({error, ?ERROR12, not_found});
|
||||||
|
{error, Code, Reason} -> minirest:return({error, Code, Reason});
|
||||||
{error, Reason} -> minirest:return({error, ?ERROR1, Reason})
|
{error, Reason} -> minirest:return({error, ?ERROR1, Reason})
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -657,6 +657,15 @@ t_keepalive(_Config) ->
|
||||||
{ok, _} = emqtt:connect(C1),
|
{ok, _} = emqtt:connect(C1),
|
||||||
{ok, Ok} = request_api(put, Path, "interval=5", AuthHeader, [#{}]),
|
{ok, Ok} = request_api(put, Path, "interval=5", AuthHeader, [#{}]),
|
||||||
?assertEqual("{\"code\":0}", Ok),
|
?assertEqual("{\"code\":0}", Ok),
|
||||||
|
[Pid] = emqx_cm:lookup_channels(list_to_binary(ClientId)),
|
||||||
|
#{conninfo := #{keepalive := Keepalive}} = emqx_connection:info(Pid),
|
||||||
|
?assertEqual(5, Keepalive),
|
||||||
|
{ok, Error1} = request_api(put, Path, "interval=-1", AuthHeader, [#{}]),
|
||||||
|
{ok, Error2} = request_api(put, Path, "interval=65536", AuthHeader, [#{}]),
|
||||||
|
ErrMsg = #{<<"code">> => 102,
|
||||||
|
<<"message">> => <<"mqtt3.1.1 specification: keepalive must between 0~65535">>},
|
||||||
|
?assertEqual(ErrMsg, jiffy:decode(Error1, [return_maps])),
|
||||||
|
?assertEqual(Error1, Error2),
|
||||||
emqtt:disconnect(C1),
|
emqtt:disconnect(C1),
|
||||||
application:stop(emqx_dashboard),
|
application:stop(emqx_dashboard),
|
||||||
ok.
|
ok.
|
||||||
|
|
|
@ -73,7 +73,19 @@ check(NewVal, KeepAlive = #keepalive{statval = OldVal,
|
||||||
true -> {error, timeout}
|
true -> {error, timeout}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
%% from mqtt-v3.1.1 specific
|
||||||
|
%% A Keep Alive value of zero (0) has the effect of turning off the keep alive mechanism.
|
||||||
|
%% This means that, in this case, the Server is not required
|
||||||
|
%% to disconnect the Client on the grounds of inactivity.
|
||||||
|
%% Note that a Server is permitted to disconnect a Client that it determines
|
||||||
|
%% to be inactive or non-responsive at any time,
|
||||||
|
%% regardless of the Keep Alive value provided by that Client.
|
||||||
|
%% Non normative comment
|
||||||
|
%%The actual value of the Keep Alive is application specific;
|
||||||
|
%% typically this is a few minutes.
|
||||||
|
%% The maximum value is (65535s) 18 hours 12 minutes and 15 seconds.
|
||||||
|
|
||||||
%% @doc Update keepalive's interval
|
%% @doc Update keepalive's interval
|
||||||
-spec(set(interval, non_neg_integer(), keepalive()) -> keepalive()).
|
-spec(set(interval, non_neg_integer(), keepalive()) -> keepalive()).
|
||||||
set(interval, Interval, KeepAlive) ->
|
set(interval, Interval, KeepAlive) when Interval >= 0 andalso Interval =< 65535000 ->
|
||||||
KeepAlive#keepalive{interval = Interval}.
|
KeepAlive#keepalive{interval = Interval}.
|
||||||
|
|
Loading…
Reference in New Issue