diff --git a/apps/emqx/include/emqx_placeholder.hrl b/apps/emqx/include/emqx_placeholder.hrl index 3eafd79f3..0b9ffca5f 100644 --- a/apps/emqx/include/emqx_placeholder.hrl +++ b/apps/emqx/include/emqx_placeholder.hrl @@ -76,6 +76,8 @@ -define(PH_NODE, <<"${node}">> ). -define(PH_REASON, <<"${reason}">> ). +-define(PH_ENDPOINT_NAME, <<"${endpoint_name}">> ). + %% sync change these place holder with binary def. -define(PH_S_ACTION, "${action}" ). -define(PH_S_CERT_SUBJECT, "${cert_subject}" ). @@ -108,5 +110,6 @@ -define(PH_S_DISCONNECTED_AT, "${disconnected_at}" ). -define(PH_S_NODE, "${node}" ). -define(PH_S_REASON, "${reason}" ). +-define(PH_S_ENDPOINT_NAME, "${endpoint_name}" ). -endif. diff --git a/apps/emqx/src/emqx_mountpoint.erl b/apps/emqx/src/emqx_mountpoint.erl index e3efef9e2..daa73822e 100644 --- a/apps/emqx/src/emqx_mountpoint.erl +++ b/apps/emqx/src/emqx_mountpoint.erl @@ -67,14 +67,17 @@ unmount(MountPoint, Msg = #message{topic = Topic}) -> -spec(replvar(maybe(mountpoint()), map()) -> maybe(mountpoint())). replvar(undefined, _Vars) -> undefined; -replvar(MountPoint, #{clientid := ClientId, username := Username}) -> - lists:foldl(fun feed_var/2, MountPoint, - [{?PH_CLIENTID, ClientId}, {?PH_USERNAME, Username}]). +replvar(MountPoint, Vars) -> + ClientID = maps:get(clientid, Vars, undefined), + UserName = maps:get(username, Vars, undefined), + EndpointName = maps:get(endpoint_name, Vars, undefined), + List = [ {?PH_CLIENTID, ClientID} + , {?PH_USERNAME, UserName} + , {?PH_ENDPOINT_NAME, EndpointName} + ], + lists:foldl(fun feed_var/2, MountPoint, List). -feed_var({?PH_CLIENTID, ClientId}, MountPoint) -> - emqx_topic:feed_var(?PH_CLIENTID, ClientId, MountPoint); -feed_var({?PH_USERNAME, undefined}, MountPoint) -> +feed_var({_PlaceHolder, undefined}, MountPoint) -> MountPoint; -feed_var({?PH_USERNAME, Username}, MountPoint) -> - emqx_topic:feed_var(?PH_USERNAME, Username, MountPoint). - +feed_var({PlaceHolder, Value}, MountPoint) -> + emqx_topic:feed_var(PlaceHolder, Value, MountPoint). diff --git a/apps/emqx_gateway/etc/emqx_gateway.conf.example b/apps/emqx_gateway/etc/emqx_gateway.conf.example index fc85bb1e8..03a9a7868 100644 --- a/apps/emqx_gateway/etc/emqx_gateway.conf.example +++ b/apps/emqx_gateway/etc/emqx_gateway.conf.example @@ -256,7 +256,7 @@ gateway.lwm2m { enable_stats = true ## When publishing or subscribing, prefix all topics with a mountpoint string. - mountpoint = "lwm2m/%u" + mountpoint = "lwm2m/${username}" xml_dir = "{{ platform_etc_dir }}/lwm2m_xml" diff --git a/apps/emqx_gateway/src/emqx_gateway_api.erl b/apps/emqx_gateway/src/emqx_gateway_api.erl index 1b7dbf146..d79a880a1 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api.erl @@ -16,6 +16,8 @@ %% -module(emqx_gateway_api). +-include_lib("emqx/include/emqx_placeholder.hrl"). + -behaviour(minirest_api). -import(emqx_gateway_http, @@ -293,7 +295,7 @@ schema_gateway_overview_list() -> <<"type">> => <<"udp">>, <<"running">> => true, <<"bind">> => 5783}], - <<"mountpoint">> => <<"lwm2m/%e/">>, + <<"mountpoint">> => <<"lwm2m/", ?PH_S_ENDPOINT_NAME, "/">>, <<"qmode_time_windonw">> => 22, <<"translators">> => #{<<"command">> => <<"dn/#">>,<<"notify">> => <<"up/notify">>,