diff --git a/apps/emqx_gateway_exproto/priv/protos/exproto.proto b/apps/emqx_gateway_exproto/priv/protos/exproto.proto index b1aa97f26..3553881a9 100644 --- a/apps/emqx_gateway_exproto/priv/protos/exproto.proto +++ b/apps/emqx_gateway_exproto/priv/protos/exproto.proto @@ -277,6 +277,8 @@ message ClientInfo { string username = 4; + // deprecated since v5.1.0 + // the request value of `mountpoint` will be ignored after v5.1.0 string mountpoint = 5; } diff --git a/apps/emqx_gateway_exproto/src/emqx_exproto_channel.erl b/apps/emqx_gateway_exproto/src/emqx_exproto_channel.erl index 648943d56..4ea317dce 100644 --- a/apps/emqx_gateway_exproto/src/emqx_exproto_channel.erl +++ b/apps/emqx_gateway_exproto/src/emqx_exproto_channel.erl @@ -21,6 +21,7 @@ -include_lib("emqx/include/emqx_mqtt.hrl"). -include_lib("emqx/include/types.hrl"). -include_lib("emqx/include/logger.hrl"). +-include_lib("snabbkaffe/include/snabbkaffe.hrl"). -export([ info/1, @@ -121,11 +122,11 @@ info(ctx, #channel{ctx = Ctx}) -> stats(#channel{subscriptions = Subs}) -> [ {subscriptions_cnt, maps:size(Subs)}, - {subscriptions_max, 0}, + {subscriptions_max, infinity}, {inflight_cnt, 0}, - {inflight_max, 0}, + {inflight_max, infinity}, {mqueue_len, 0}, - {mqueue_max, 0}, + {mqueue_max, infinity}, {mqueue_dropped, 0}, {next_pkt_id, 0}, {awaiting_rel_cnt, 0}, @@ -164,7 +165,8 @@ init( DefaultClientInfo = default_clientinfo(NConnInfo), ClientInfo = DefaultClientInfo#{ listener => ListenerId, - enable_authn => EnableAuthn + enable_authn => EnableAuthn, + mountpoint => maps:get(mountpoint, Options, undefined) }, Channel = #channel{ ctx = Ctx, @@ -758,7 +760,23 @@ enrich_conninfo(InClientInfo, ConnInfo) -> maps:merge(ConnInfo, maps:with(Ks, InClientInfo)). enrich_clientinfo(InClientInfo = #{proto_name := ProtoName}, ClientInfo) -> - Ks = [clientid, username, mountpoint], + Ks = [clientid, username], + case maps:get(mountpoint, InClientInfo, <<>>) of + <<>> -> + ok; + Mp -> + ?tp( + warning, + failed_to_override_mountpoint, + #{ + reason => + "The mountpoint in AuthenticateRequest has been deprecated. " + "Please use the `gateway.exproto.mountpoint` configuration.", + requested_mountpoint => Mp, + configured_mountpoint => maps:get(mountpoint, ClientInfo) + } + ) + end, NClientInfo = maps:merge(ClientInfo, maps:with(Ks, InClientInfo)), NClientInfo#{protocol => proto_name_to_protocol(ProtoName)}. diff --git a/apps/emqx_gateway_exproto/test/emqx_exproto_SUITE.erl b/apps/emqx_gateway_exproto/test/emqx_exproto_SUITE.erl index 91481cb91..7b1ff5127 100644 --- a/apps/emqx_gateway_exproto/test/emqx_exproto_SUITE.erl +++ b/apps/emqx_gateway_exproto/test/emqx_exproto_SUITE.erl @@ -128,7 +128,7 @@ init_per_group(LisType, ServiceName, Scheme, Cfg) -> Svrs = emqx_exproto_echo_svr:start(Scheme), application:load(emqx_gateway_exproto), emqx_common_test_helpers:start_apps( - [emqx_authn, emqx_gateway], + [emqx_conf, emqx_authn, emqx_gateway], fun(App) -> set_special_cfg(App, LisType, ServiceName, Scheme) end @@ -143,7 +143,7 @@ init_per_group(LisType, ServiceName, Scheme, Cfg) -> end_per_group(_, Cfg) -> emqx_config:erase(gateway), - emqx_common_test_helpers:stop_apps([emqx_gateway, emqx_authn]), + emqx_common_test_helpers:stop_apps([emqx_gateway, emqx_authn, emqx_conf]), emqx_exproto_echo_svr:stop(proplists:get_value(servers, Cfg)). init_per_testcase(TestCase, Cfg) when @@ -166,6 +166,7 @@ set_special_cfg(emqx_gateway, LisType, ServiceName, Scheme) -> #{ server => #{bind => 9100}, idle_timeout => 5000, + mountpoint => <<"ct/">>, handler => #{ address => Addrs, service_name => ServiceName, @@ -196,7 +197,8 @@ t_mountpoint_echo(Cfg) -> proto_name => <<"demo">>, proto_ver => <<"v0.1">>, clientid => <<"test_client_1">>, - mountpoint => <<"ct/">> + %% deperated since v5.1.0, and this value will be ignored + mountpoint => <<"deperated/">> }, Password = <<"123456">>, @@ -239,7 +241,7 @@ t_raw_publish(Cfg) -> proto_name => <<"demo">>, proto_ver => <<"v0.1">>, clientid => <<"test_client_1">>, - mountpoint => <<"ct/">> + mountpoint => <<>> }, Password = <<"123456">>, @@ -321,7 +323,7 @@ t_acl_deny(Cfg) -> send(Sock, SubBin), {ok, SubAckBin} = recv(Sock, 5000), - emqx:publish(emqx_message:make(<<"t/dn">>, <<"echo">>)), + emqx:publish(emqx_message:make(<<"ct/t/dn">>, <<"echo">>)), PubBin = frame_publish(<<"t/dn">>, 0, <<"echo">>), PubBinFailedAck = frame_puback(1), @@ -510,7 +512,7 @@ t_hook_message_delivered(Cfg) -> emqx_hooks:add('message.delivered', {?MODULE, hook_fun5, []}, 1000), - emqx:publish(emqx_message:make(<<"t/dn">>, <<"1">>)), + emqx:publish(emqx_message:make(<<"ct/t/dn">>, <<"1">>)), PubBin1 = frame_publish(<<"t/dn">>, 0, <<"2">>), {ok, PubBin1} = recv(Sock, 5000),