chore(gw): delete needless files

This commit is contained in:
JianBo He 2021-07-15 11:04:34 +08:00
parent 32eabf041e
commit 40d714049e
4 changed files with 0 additions and 312 deletions

View File

@ -1,53 +0,0 @@
##--------------------------------------------------------------------
## MQTT-SN
##--------------------------------------------------------------------
## The UDP port which emq-sn is listening on.
##
## Value: IP:Port | Port
##
## Examples: 1884, "127.0.0.1:1884", "::1:1884"
mqtt.sn.port = 1884
## The duration that emqx-sn broadcast ADVERTISE message through.
##
## Value: Duration
mqtt.sn.advertise_duration = 15m
## The MQTT-SN Gateway id in ADVERTISE message.
##
## Value: Number
mqtt.sn.gateway_id = 1
## To control whether write statistics data into ETS table for dashbord to read.
##
## Value: on | off
mqtt.sn.enable_stats = off
## To control whether accept and process the received publish message with qos=-1.
##
## Value: on | off
mqtt.sn.enable_qos3 = off
## MQTT SN idle timeout, specified in seconds.
##
## Value: Duration
mqtt.sn.idle_timeout = 30s
## The pre-defined topic name corresponding to the pre-defined topic id of N.
## Note that the pre-defined topic id of 0 is reserved.
mqtt.sn.predefined.topic.0 = reserved
mqtt.sn.predefined.topic.1 = "/predefined/topic/name/hello"
mqtt.sn.predefined.topic.2 = "/predefined/topic/name/nice"
## Default username for MQTT-SN. This parameter is optional. If specified,
## emq-sn will connect EMQ core with this username. It is useful if any auth
## plug-in is enabled.
##
## Value: String
mqtt.sn.username = mqtt_sn_user
## This parameter is optional. Pair with username above.
##
## Value: String
mqtt.sn.password = abc

View File

@ -1,70 +0,0 @@
%%-*- mode: erlang -*-
%% emqx_sn config mapping
{mapping, "mqtt.sn.port", "emqx_sn.port", [
{default, 1884},
{datatype, [integer, ip]}
]}.
{translation, "emqx_sn.port", fun(Conf) ->
case cuttlefish:conf_get("mqtt.sn.port", Conf, undefined) of
Port when is_integer(Port) ->
{{0,0,0,0}, Port};
{Ip, Port} ->
case inet:parse_address(Ip) of
{ok ,R} -> {R, Port};
_ -> {Ip, Port}
end
end
end}.
{mapping, "mqtt.sn.advertise_duration", "emqx_sn.advertise_duration", [
{default, "15s"},
{datatype, {duration, ms}}
]}.
{mapping, "mqtt.sn.gateway_id", "emqx_sn.gateway_id", [
{default, 1},
{datatype, integer}
]}.
{mapping, "mqtt.sn.username", "emqx_sn.username", [
{datatype, string}
]}.
{mapping, "mqtt.sn.password", "emqx_sn.password", [
{datatype, string}
]}.
{mapping, "mqtt.sn.idle_timeout", "emqx_sn.idle_timeout", [
{default, "30s"},
{datatype, {duration, ms}}
]}.
{mapping, "mqtt.sn.enable_stats", "emqx_sn.enable_stats", [
{datatype, flag}
]}.
{mapping, "mqtt.sn.enable_qos3", "emqx_sn.enable_qos3", [
{datatype, flag}
]}.
{mapping, "mqtt.sn.predefined.topic.$id", "emqx_sn.predefined", [
{datatype, string}
]}.
{translation, "emqx_sn.username", fun(Conf) ->
Username = cuttlefish:conf_get("mqtt.sn.username", Conf),
list_to_binary(Username)
end}.
{translation, "emqx_sn.password", fun(Conf) ->
Password = cuttlefish:conf_get("mqtt.sn.password", Conf),
list_to_binary(Password)
end}.
{translation, "emqx_sn.predefined", fun(Conf) ->
List = cuttlefish_variable:filter_by_prefix("mqtt.sn.predefined.topic", Conf),
TopicIdList = lists:sort([{list_to_integer(I), iolist_to_binary(TopicName)}
|| {["mqtt", "sn", "predefined", "topic", I], TopicName}
<- List, I =/= "0"])
end}.

View File

@ -1,148 +0,0 @@
%%--------------------------------------------------------------------
%% Copyright (c) 2020-2021 EMQ Technologies Co., Ltd. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%--------------------------------------------------------------------
-module(emqx_sn_app).
-behaviour(application).
-emqx_plugin(protocol).
-export([ start/2
, stop/1
]).
-export([ start_listeners/0
, start_listener/1
, start_listener/3
, stop_listeners/0
, stop_listener/1
, stop_listener/3
]).
-define(UDP_SOCKOPTS, []).
-type(listener() :: {esockd:proto(), esockd:listen_on(), [esockd:option()]}).
%%--------------------------------------------------------------------
%% Application
%%--------------------------------------------------------------------
start(_Type, _Args) ->
Addr = application:get_env(emqx_sn, port, 1884),
GwId = application:get_env(emqx_sn, gateway_id, 1),
PredefTopics = application:get_env(emqx_sn, predefined, []),
{ok, Sup} = emqx_sn_sup:start_link(Addr, GwId, PredefTopics),
start_listeners(),
{ok, Sup}.
stop(_State) ->
stop_listeners(),
ok.
%%--------------------------------------------------------------------
%% Listners
%%--------------------------------------------------------------------
-spec start_listeners() -> ok.
start_listeners() ->
lists:foreach(fun start_listener/1, listeners_confs()).
-spec start_listener(listener()) -> ok.
start_listener({Proto, ListenOn, Options}) ->
case start_listener(Proto, ListenOn, Options) of
{ok, _} -> io:format("Start mqttsn:~s listener on ~s successfully.~n",
[Proto, format(ListenOn)]);
{error, Reason} ->
io:format(standard_error, "Failed to start mqttsn:~s listener on ~s: ~0p~n",
[Proto, format(ListenOn), Reason]),
error(Reason)
end.
%% Start MQTTSN listener
-spec start_listener(esockd:proto(), esockd:listen_on(), [esockd:option()])
-> {ok, pid()} | {error, term()}.
start_listener(udp, ListenOn, Options) ->
start_udp_listener('mqttsn:udp', ListenOn, Options);
start_listener(dtls, ListenOn, Options) ->
start_udp_listener('mqttsn:dtls', ListenOn, Options).
%% @private
start_udp_listener(Name, ListenOn, Options) ->
SockOpts = esockd:parse_opt(Options),
esockd:open_udp(Name, ListenOn, merge_default(SockOpts),
{emqx_sn_gateway, start_link, [Options -- SockOpts]}).
-spec stop_listeners() -> ok.
stop_listeners() ->
lists:foreach(fun stop_listener/1, listeners_confs()).
-spec stop_listener(listener()) -> ok | {error, term()}.
stop_listener({Proto, ListenOn, Opts}) ->
StopRet = stop_listener(Proto, ListenOn, Opts),
case StopRet of
ok -> io:format("Stop mqttsn:~s listener on ~s successfully.~n",
[Proto, format(ListenOn)]);
{error, Reason} ->
io:format(standard_error, "Failed to stop mqttsn:~s listener on ~s: ~0p~n",
[Proto, format(ListenOn), Reason])
end,
StopRet.
-spec stop_listener(esockd:proto(), esockd:listen_on(), [esockd:option()])
-> ok | {error, term()}.
stop_listener(udp, ListenOn, _Opts) ->
esockd:close('mqttsn:udp', ListenOn);
stop_listener(dtls, ListenOn, _Opts) ->
esockd:close('mqttsn:dtls', ListenOn).
%%--------------------------------------------------------------------
%% Internal funcs
%%--------------------------------------------------------------------
%% @private
%% In order to compatible with the old version of the configuration format
listeners_confs() ->
ListenOn = application:get_env(emqx_sn, port, 1884),
GwId = application:get_env(emqx_sn, gateway_id, 1),
Username = application:get_env(emqx_sn, username, undefined),
Password = application:get_env(emqx_sn, password, undefined),
EnableQos3 = application:get_env(emqx_sn, enable_qos3, false),
EnableStats = application:get_env(emqx_sn, enable_stats, false),
IdleTimeout = application:get_env(emqx_sn, idle_timeout, 30000),
[{udp, ListenOn, [{gateway_id, GwId},
{username, Username},
{password, Password},
{enable_qos3, EnableQos3},
{enable_stats, EnableStats},
{idle_timeout, IdleTimeout},
{max_connections, 1024000},
{max_conn_rate, 1000},
{udp_options, []}]}].
merge_default(Options) ->
case lists:keytake(udp_options, 1, Options) of
{value, {udp_options, TcpOpts}, Options1} ->
[{udp_options, emqx_misc:merge_opts(?UDP_SOCKOPTS, TcpOpts)} | Options1];
false ->
[{udp_options, ?UDP_SOCKOPTS} | Options]
end.
format(Port) when is_integer(Port) ->
io_lib:format("0.0.0.0:~w", [Port]);
format({Addr, Port}) when is_list(Addr) ->
io_lib:format("~s:~w", [Addr, Port]);
format({Addr, Port}) when is_tuple(Addr) ->
io_lib:format("~s:~w", [inet:ntoa(Addr), Port]).

View File

@ -1,41 +0,0 @@
%%--------------------------------------------------------------------
%% Copyright (c) 2020-2021 EMQ Technologies Co., Ltd. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
%% You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%--------------------------------------------------------------------
-module(emqx_sn_sup).
-behaviour(supervisor).
-export([ start_link/3
, init/1
]).
start_link(Addr, GwId, PredefTopics) ->
supervisor:start_link({local, ?MODULE}, ?MODULE, [Addr, GwId, PredefTopics]).
init([{_Ip, Port}, GwId, PredefTopics]) ->
Broadcast = #{id => emqx_sn_broadcast,
start => {emqx_sn_broadcast, start_link, [GwId, Port]},
restart => permanent,
shutdown => brutal_kill,
type => worker,
modules => [emqx_sn_broadcast]},
Registry = #{id => emqx_sn_registry,
start => {emqx_sn_registry, start_link, [PredefTopics]},
restart => permanent,
shutdown => brutal_kill,
type => worker,
modules => [emqx_sn_registry]},
{ok, {{one_for_one, 10, 3600}, [Broadcast, Registry]}}.