change escokd to ranch

This commit is contained in:
anlicheng 2025-10-17 10:28:17 +08:00
parent 72553b4fea
commit 963b0b7da5
9 changed files with 65 additions and 78 deletions

View File

@ -24,12 +24,12 @@ create_table(Tab) when is_atom(Tab) ->
{type, set} {type, set}
]). ]).
-spec get_table_name(NetworkId :: integer()) -> TableName :: atom(). -spec get_table_name(NetworkId :: binary()) -> TableName :: atom().
get_table_name(NetworkId) when is_integer(NetworkId) -> get_table_name(NetworkId) when is_binary(NetworkId) ->
list_to_atom("client_" ++ integer_to_list(NetworkId)). list_to_atom("client_" ++ binary_to_list(NetworkId)).
-spec get_clients(NetworkId :: integer()) -> [Client :: #client{}]. -spec get_clients(NetworkId :: binary()) -> [Client :: #client{}].
get_clients(NetworkId) when is_integer(NetworkId) -> get_clients(NetworkId) when is_binary(NetworkId) ->
Tab = get_table_name(NetworkId), Tab = get_table_name(NetworkId),
case mnesia:transaction(fun() -> mnesia:foldl(fun(R, Acc0) -> [R|Acc0] end, [], Tab) end) of case mnesia:transaction(fun() -> mnesia:foldl(fun(R, Acc0) -> [R|Acc0] end, [], Tab) end) of
{'atomic', Items} -> {'atomic', Items} ->
@ -38,8 +38,8 @@ get_clients(NetworkId) when is_integer(NetworkId) ->
[] []
end. end.
-spec delete_clients(NetworkId :: integer()) -> ok | {error, Reason :: any()}. -spec delete_clients(NetworkId :: binary()) -> ok | {error, Reason :: any()}.
delete_clients(NetworkId) when is_integer(NetworkId) -> delete_clients(NetworkId) when is_binary(NetworkId) ->
Tab = get_table_name(NetworkId), Tab = get_table_name(NetworkId),
case mnesia:transaction(fun() -> mnesia:clear_table(Tab) end) of case mnesia:transaction(fun() -> mnesia:clear_table(Tab) end) of
{'atomic', ok} -> {'atomic', ok} ->
@ -48,8 +48,8 @@ delete_clients(NetworkId) when is_integer(NetworkId) ->
{error, Reason} {error, Reason}
end. end.
-spec delete_client(NetworkId :: integer(), ClientId :: binary()) -> ok | {error, Reason :: any()}. -spec delete_client(NetworkId :: binary(), ClientId :: binary()) -> ok | {error, Reason :: any()}.
delete_client(NetworkId, ClientId) when is_integer(NetworkId), is_binary(ClientId) -> delete_client(NetworkId, ClientId) when is_binary(NetworkId), is_binary(ClientId) ->
Tab = get_table_name(NetworkId), Tab = get_table_name(NetworkId),
case mnesia:transaction(fun() -> mnesia:delete(Tab, ClientId, write) end) of case mnesia:transaction(fun() -> mnesia:delete(Tab, ClientId, write) end) of
{'atomic', ok} -> {'atomic', ok} ->
@ -58,8 +58,8 @@ delete_client(NetworkId, ClientId) when is_integer(NetworkId), is_binary(ClientI
{error, Reason} {error, Reason}
end. end.
-spec disable_client(NetworkId :: integer(), ClientId :: binary()) -> ok | {error, Reason :: any()}. -spec disable_client(NetworkId :: binary(), ClientId :: binary()) -> ok | {error, Reason :: any()}.
disable_client(NetworkId, ClientId) when is_integer(NetworkId), is_binary(ClientId) -> disable_client(NetworkId, ClientId) when is_binary(NetworkId), is_binary(ClientId) ->
Tab = get_table_name(NetworkId), Tab = get_table_name(NetworkId),
Fun = fun() -> Fun = fun() ->
case mnesia:read(Tab, ClientId, read) of case mnesia:read(Tab, ClientId, read) of
@ -78,9 +78,9 @@ disable_client(NetworkId, ClientId) when is_integer(NetworkId), is_binary(Client
end. end.
%% ip地址的时候mac地址为唯一基准 %% ip地址的时候mac地址为唯一基准
-spec alloc_ip(NetworkId :: integer(), Ips :: list(), ClientId :: binary(), Mac :: binary(), NetAddr0 :: integer()) -> -spec alloc_ip(NetworkId :: binary(), Ips :: list(), ClientId :: binary(), Mac :: binary(), NetAddr0 :: integer()) ->
{ok, Ip :: integer()} | {error, Reason :: any()}. {ok, Ip :: integer()} | {error, Reason :: any()}.
alloc_ip(NetworkId, Ips, ClientId, Mac, NetAddr0) when is_binary(ClientId), is_integer(NetAddr0), is_binary(Mac) -> alloc_ip(NetworkId, Ips, ClientId, Mac, NetAddr0) when is_binary(NetworkId), is_binary(ClientId), is_integer(NetAddr0), is_binary(Mac) ->
case mnesia:transaction(fun() -> alloc_ip0(NetworkId, Ips, ClientId, Mac, NetAddr0) end) of case mnesia:transaction(fun() -> alloc_ip0(NetworkId, Ips, ClientId, Mac, NetAddr0) end) of
{'atomic', Res} -> {'atomic', Res} ->
{ok, Res}; {ok, Res};
@ -120,7 +120,7 @@ alloc_ip0(NetworkId, Ips, ClientId, Mac, NetAddr0) ->
%%% helper functions %%% helper functions
%%%=================================================================== %%%===================================================================
debug(NetworkId) when is_integer(NetworkId) -> debug(NetworkId) when is_binary(NetworkId) ->
Tab = get_table_name(NetworkId), Tab = get_table_name(NetworkId),
F = fun() -> F = fun() ->
Q = qlc:q([E || E <- mnesia:table(Tab)]), Q = qlc:q([E || E <- mnesia:table(Tab)]),

View File

@ -11,7 +11,6 @@
ranch, ranch,
poolboy, poolboy,
mysql, mysql,
esockd,
jiffy, jiffy,
hackney, hackney,
gpb, gpb,

View File

@ -15,7 +15,7 @@
-export([get_all_networks/0, get_network/1]). -export([get_all_networks/0, get_network/1]).
-export([auth_token/3, node_online/3, node_offline/2, flow_report/5, network_forward_report/2]). -export([auth_token/3, node_online/3, node_offline/2, flow_report/5, network_forward_report/2]).
-spec get_all_networks() -> {ok, [NetworkId :: integer()]} | {error, Reason :: any()}. -spec get_all_networks() -> {ok, [NetworkId :: binary()]} | {error, Reason :: any()}.
get_all_networks() -> get_all_networks() ->
case catch do_get("get_all_networks", []) of case catch do_get("get_all_networks", []) of
{ok, Resp} -> {ok, Resp} ->
@ -31,9 +31,9 @@ get_all_networks() ->
Error Error
end. end.
-spec get_network(Id :: integer()) -> {ok, Network :: map()} | {error, Reason :: any()}. -spec get_network(Id :: binary()) -> {ok, Network :: map()} | {error, Reason :: any()}.
get_network(Id) when is_integer(Id) -> get_network(Id) when is_binary(Id) ->
case catch do_get("get_network", [{<<"id">>, integer_to_binary(Id)}]) of case catch do_get("get_network", [{<<"id">>, Id}]) of
{ok, Resp} -> {ok, Resp} ->
case catch jiffy:decode(Resp, [return_maps]) of case catch jiffy:decode(Resp, [return_maps]) of
#{<<"result">> := Network} -> #{<<"result">> := Network} ->
@ -61,8 +61,8 @@ auth_token(ClientId, Token, Version) when is_binary(ClientId), is_binary(Token),
Error Error
end. end.
-spec node_online(ClientId :: binary(), NetworkId :: integer(), IpAddr :: binary()) -> {ok, Resp :: map()} | {error, Reason :: any()}. -spec node_online(ClientId :: binary(), NetworkId :: binary(), IpAddr :: binary()) -> {ok, Resp :: map()} | {error, Reason :: any()}.
node_online(ClientId, NetworkId, IpAddr) when is_binary(ClientId), is_integer(NetworkId), is_binary(IpAddr) -> node_online(ClientId, NetworkId, IpAddr) when is_binary(ClientId), is_binary(NetworkId), is_binary(IpAddr) ->
case catch do_post("set_node_status", #{<<"client_id">> => ClientId, <<"network_id">> => NetworkId, <<"ip_addr">> => IpAddr, <<"status">> => 1}) of case catch do_post("set_node_status", #{<<"client_id">> => ClientId, <<"network_id">> => NetworkId, <<"ip_addr">> => IpAddr, <<"status">> => 1}) of
{ok, Resp} -> {ok, Resp} ->
{ok, catch jiffy:decode(Resp, [return_maps])}; {ok, catch jiffy:decode(Resp, [return_maps])};
@ -70,8 +70,8 @@ node_online(ClientId, NetworkId, IpAddr) when is_binary(ClientId), is_integer(Ne
Error Error
end. end.
-spec node_offline(ClientId :: binary(), NetworkId :: integer()) -> {ok, Resp :: map()} | {error, Reason :: any()}. -spec node_offline(ClientId :: binary(), NetworkId :: binary()) -> {ok, Resp :: map()} | {error, Reason :: any()}.
node_offline(ClientId, NetworkId) when is_binary(ClientId), is_integer(NetworkId) -> node_offline(ClientId, NetworkId) when is_binary(ClientId), is_binary(NetworkId) ->
case catch do_post("set_node_status", #{<<"client_id">> => ClientId, <<"network_id">> => NetworkId, <<"status">> => 0}) of case catch do_post("set_node_status", #{<<"client_id">> => ClientId, <<"network_id">> => NetworkId, <<"status">> => 0}) of
{ok, Resp} -> {ok, Resp} ->
{ok, catch jiffy:decode(Resp, [return_maps])}; {ok, catch jiffy:decode(Resp, [return_maps])};
@ -79,10 +79,10 @@ node_offline(ClientId, NetworkId) when is_binary(ClientId), is_integer(NetworkId
Error Error
end. end.
-spec flow_report(ClientId :: binary(), NetworkId :: integer(), ForwardNum :: integer(), P2PNum :: integer(), InboundNum :: integer()) -> -spec flow_report(ClientId :: binary(), NetworkId :: binary(), ForwardNum :: integer(), P2PNum :: integer(), InboundNum :: integer()) ->
{ok, Resp :: map()} | {error, Reason :: any()}. {ok, Resp :: map()} | {error, Reason :: any()}.
flow_report(ClientId, NetworkId, ForwardNum, P2PNum, InboundNum) flow_report(ClientId, NetworkId, ForwardNum, P2PNum, InboundNum)
when is_binary(ClientId), is_integer(NetworkId), is_integer(ForwardNum), is_integer(P2PNum), is_integer(InboundNum) -> when is_binary(ClientId), is_binary(NetworkId), is_integer(ForwardNum), is_integer(P2PNum), is_integer(InboundNum) ->
Params = #{ Params = #{
<<"client_id">> => ClientId, <<"client_id">> => ClientId,
<<"network_id">> => NetworkId, <<"network_id">> => NetworkId,
@ -97,9 +97,9 @@ flow_report(ClientId, NetworkId, ForwardNum, P2PNum, InboundNum)
Error Error
end. end.
-spec network_forward_report(NetworkId :: integer(), ForwardNum :: integer()) -> -spec network_forward_report(NetworkId :: binary(), ForwardNum :: integer()) ->
{ok, Resp :: map()} | {error, Reason :: any()}. {ok, Resp :: map()} | {error, Reason :: any()}.
network_forward_report(NetworkId, ForwardNum) when is_integer(NetworkId), is_integer(ForwardNum) -> network_forward_report(NetworkId, ForwardNum) when is_binary(NetworkId), is_integer(ForwardNum) ->
Params = #{ Params = #{
<<"network_id">> => NetworkId, <<"network_id">> => NetworkId,
<<"forward_num">> => ForwardNum <<"forward_num">> => ForwardNum

View File

@ -61,18 +61,15 @@ start_tcp_server() ->
Backlog = proplists:get_value(backlog, Props, 1024), Backlog = proplists:get_value(backlog, Props, 1024),
Port = proplists:get_value(port, Props), Port = proplists:get_value(port, Props),
TransOpts = [ TransOpts = #{
{tcp_options, [ num_acceptors => Acceptors,
binary, max_connections => MaxConnections,
{reuseaddr, true}, socket_opts => [
{active, false}, {port, Port},
{packet, 2},
{nodelay, false}, {nodelay, false},
{backlog, Backlog} {backlog, Backlog}
]}, ]
{acceptors, Acceptors}, },
{max_connections, MaxConnections} {ok, _} = ranch:start_listener('sdlan/tcp_server', ranch_tcp, TransOpts, sdlan_channel, []),
],
{ok, _} = esockd:open('sdlan/tcp_server', Port, TransOpts, {sdlan_channel, start_link, []}),
lager:debug("[sdlan_app] the tcp server start at: ~p", [Port]). lager:debug("[sdlan_app] the tcp server start at: ~p", [Port]).

View File

@ -35,7 +35,7 @@
-define(UPGRADE_FORCE, 2). -define(UPGRADE_FORCE, 2).
%% API %% API
-export([start_link/2]). -export([start_link/4]).
-export([publish_command/4, send_event/3, stop/2, move_network/3]). -export([publish_command/4, send_event/3, stop/2, move_network/3]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
@ -97,19 +97,15 @@ stop(Pid, Reason) when is_pid(Pid) ->
%% esockd callback %% esockd callback
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
start_link(Transport, Sock) -> start_link(Ref, _Socket, Transport, Opts) ->
{ok, proc_lib:spawn_link(?MODULE, init, [[Transport, Sock]])}. {ok, proc_lib:spawn_link(?MODULE, init, [[Ref, Transport, Opts]])}.
init([Transport, Sock]) -> init([Ref, Transport, _Opts = []]) ->
lager:debug("[sdlan_channel] get a new connection: ~p", [Sock]), {ok, Socket} = ranch:handshake(Ref),
case Transport:wait(Sock) of lager:debug("[sdlan_channel] get a new connection: ~p", [Socket]),
{ok, NewSock} -> Transport:setopts(Socket, [{active, true}, {packet, 2}]),
Transport:setopts(Sock, [{active, true}]),
erlang:start_timer(?PING_TICKER, self(), ping_ticker), erlang:start_timer(?PING_TICKER, self(), ping_ticker),
gen_server:enter_loop(?MODULE, [], #state{transport = Transport, socket = NewSock}); gen_server:enter_loop(?MODULE, [], #state{transport = Transport, socket = Socket}).
{error, Reason} ->
{stop, Reason}
end.
handle_call(_Request, _From, State) -> handle_call(_Request, _From, State) ->
{reply, ok, State}. {reply, ok, State}.

View File

@ -46,7 +46,7 @@
}). }).
-record(state, { -record(state, {
network_id :: integer(), network_id :: binary(),
name :: binary(), name :: binary(),
ipaddr :: binary(), ipaddr :: binary(),
mask_len :: integer(), mask_len :: integer(),
@ -77,13 +77,13 @@
test_event(Pid) -> test_event(Pid) ->
gen_server:cast(Pid, test_event). gen_server:cast(Pid, test_event).
-spec get_pid(Id :: integer()) -> undefined | pid(). -spec get_pid(Id :: binary()) -> undefined | pid().
get_pid(Id) when is_integer(Id) -> get_pid(Id) when is_binary(Id) ->
whereis(get_name(Id)). whereis(get_name(Id)).
-spec get_name(Id :: integer()) -> atom(). -spec get_name(Id :: binary()) -> atom().
get_name(Id) when is_integer(Id) -> get_name(Id) when is_binary(Id) ->
list_to_atom("sdlan_network:" ++ integer_to_list(Id)). list_to_atom("sdlan_network:" ++ binary_to_list(Id)).
-spec reload(Pid :: pid()) -> ok | {error, Reason :: any()}. -spec reload(Pid :: pid()) -> ok | {error, Reason :: any()}.
reload(Pid) when is_pid(Pid) -> reload(Pid) when is_pid(Pid) ->
@ -94,7 +94,7 @@ reload(Pid) when is_pid(Pid) ->
assign_ip_addr(Pid, ChannelPid, ClientId, Mac, NetAddr) when is_pid(Pid), is_pid(ChannelPid), is_binary(ClientId), is_binary(Mac), is_integer(NetAddr) -> assign_ip_addr(Pid, ChannelPid, ClientId, Mac, NetAddr) when is_pid(Pid), is_pid(ChannelPid), is_binary(ClientId), is_binary(Mac), is_integer(NetAddr) ->
gen_server:call(Pid, {assign_ip_addr, ChannelPid, ClientId, Mac, NetAddr}). gen_server:call(Pid, {assign_ip_addr, ChannelPid, ClientId, Mac, NetAddr}).
-spec get_network_id(Pid :: pid()) -> {ok, NetworkId :: integer()}. -spec get_network_id(Pid :: pid()) -> {ok, NetworkId :: binary()}.
get_network_id(Pid) when is_pid(Pid) -> get_network_id(Pid) when is_pid(Pid) ->
gen_server:call(Pid, get_network_id). gen_server:call(Pid, get_network_id).
@ -140,9 +140,9 @@ get_used_map(undefined) ->
#{}. #{}.
%% @doc Spawns the server and registers the local name (unique) %% @doc Spawns the server and registers the local name (unique)
-spec(start_link(Name :: atom(), Id :: integer()) -> -spec(start_link(Name :: atom(), Id :: binary()) ->
{ok, Pid :: pid()} | ignore | {error, Reason :: term()}). {ok, Pid :: pid()} | ignore | {error, Reason :: term()}).
start_link(Name, Id) when is_atom(Name), is_integer(Id) -> start_link(Name, Id) when is_atom(Name), is_binary(Id) ->
gen_server:start_link({local, Name}, ?MODULE, [Id], []). gen_server:start_link({local, Name}, ?MODULE, [Id], []).
%%%=================================================================== %%%===================================================================
@ -154,7 +154,7 @@ start_link(Name, Id) when is_atom(Name), is_integer(Id) ->
-spec(init(Args :: term()) -> -spec(init(Args :: term()) ->
{ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} |
{stop, Reason :: term()} | ignore). {stop, Reason :: term()} | ignore).
init([Id]) when is_integer(Id) -> init([Id]) ->
erlang:process_flag(trap_exit, true), erlang:process_flag(trap_exit, true),
case sdlan_api:get_network(Id) of case sdlan_api:get_network(Id) of
{ok, #{<<"ipaddr">> := Null}} when Null == <<"null">>; Null == <<"NULL">> -> {ok, #{<<"ipaddr">> := Null}} when Null == <<"null">>; Null == <<"NULL">> ->

View File

@ -51,8 +51,8 @@ init([]) ->
%%% Internal functions %%% Internal functions
%%%=================================================================== %%%===================================================================
-spec ensured_network_started(Id :: integer()) -> {ok, Pid :: pid()} | {error, Reason :: any()}. -spec ensured_network_started(Id :: binary()) -> {ok, Pid :: pid()} | {error, Reason :: any()}.
ensured_network_started(Id) when is_integer(Id) -> ensured_network_started(Id) when is_binary(Id) ->
case sdlan_network:get_pid(Id) of case sdlan_network:get_pid(Id) of
undefined -> undefined ->
case supervisor:start_child(?MODULE, child_spec(Id)) of case supervisor:start_child(?MODULE, child_spec(Id)) of
@ -67,8 +67,8 @@ ensured_network_started(Id) when is_integer(Id) ->
{ok, Pid} {ok, Pid}
end. end.
-spec start_network(Id :: integer()) -> {ok, Pid :: pid()} | {error, Reason :: any()}. -spec start_network(Id :: binary()) -> {ok, Pid :: pid()} | {error, Reason :: any()}.
start_network(Id) when is_integer(Id) -> start_network(Id) when is_binary(Id) ->
case supervisor:start_child(?MODULE, child_spec(Id)) of case supervisor:start_child(?MODULE, child_spec(Id)) of
{ok, Pid} when is_pid(Pid) -> {ok, Pid} when is_pid(Pid) ->
{ok, Pid}; {ok, Pid};
@ -88,8 +88,8 @@ reallocate_bind_width() ->
ChildPids = lists:map(fun({_Id, ChildPid, _Type, _Modules}) -> ChildPid end, supervisor:which_children(?MODULE)), ChildPids = lists:map(fun({_Id, ChildPid, _Type, _Modules}) -> ChildPid end, supervisor:which_children(?MODULE)),
set_network_bind(length(ChildPids)). set_network_bind(length(ChildPids)).
-spec delete_network(NetworkId :: integer()) -> ok | {error, Reason :: any()}. -spec delete_network(NetworkId :: binary()) -> ok | {error, Reason :: any()}.
delete_network(NetworkId) when is_integer(NetworkId) -> delete_network(NetworkId) when is_binary(NetworkId) ->
ChildId = sdlan_network:get_name(NetworkId), ChildId = sdlan_network:get_name(NetworkId),
case supervisor:terminate_child(?MODULE, ChildId) of case supervisor:terminate_child(?MODULE, ChildId) of
ok -> ok ->
@ -98,8 +98,8 @@ delete_network(NetworkId) when is_integer(NetworkId) ->
Error Error
end. end.
-spec child_spec(Id :: integer()) -> map(). -spec child_spec(Id :: binary()) -> map().
child_spec(Id) when is_integer(Id) -> child_spec(Id) when is_binary(Id) ->
Name = sdlan_network:get_name(Id), Name = sdlan_network:get_name(Id),
#{ #{
id => Name, id => Name,

View File

@ -3,9 +3,8 @@
{poolboy, ".*", {git, "https://github.com/devinus/poolboy.git", {tag, "1.5.1"}}}, {poolboy, ".*", {git, "https://github.com/devinus/poolboy.git", {tag, "1.5.1"}}},
{hackney, ".*", {git, "https://github.com/benoitc/hackney.git", {tag, "1.16.0"}}}, {hackney, ".*", {git, "https://github.com/benoitc/hackney.git", {tag, "1.16.0"}}},
{sync, ".*", {git, "https://github.com/rustyio/sync.git", {branch, "master"}}}, {sync, ".*", {git, "https://github.com/rustyio/sync.git", {branch, "master"}}},
{esockd, ".*", {git, "https://github.com/emqx/esockd.git", {tag, "v5.7.3"}}},
{jiffy, ".*", {git, "https://github.com/davisp/jiffy.git", {tag, "1.1.1"}}}, {jiffy, ".*", {git, "https://github.com/davisp/jiffy.git", {tag, "1.1.1"}}},
{cowboy, ".*", {git, "https://github.com/ninenines/cowboy.git", {tag, "2.12.0"}}}, {cowboy, ".*", {git, "https://github.com/ninenines/cowboy.git", {tag, "2.14.2"}}},
{mysql, ".*", {git, "https://github.com/mysql-otp/mysql-otp", {tag, "1.8.0"}}}, {mysql, ".*", {git, "https://github.com/mysql-otp/mysql-otp", {tag, "1.8.0"}}},
{gpb, ".*", {git, "https://github.com/tomas-abrahamsson/gpb.git", {tag, "4.21.1"}}}, {gpb, ".*", {git, "https://github.com/tomas-abrahamsson/gpb.git", {tag, "4.21.1"}}},
{throttle, ".*", {git, "https://github.com/lambdaclass/throttle.git", {tag, "0.3.0"}}}, {throttle, ".*", {git, "https://github.com/lambdaclass/throttle.git", {tag, "0.3.0"}}},

View File

@ -2,16 +2,12 @@
[{<<"certifi">>,{pkg,<<"certifi">>,<<"2.5.2">>},1}, [{<<"certifi">>,{pkg,<<"certifi">>,<<"2.5.2">>},1},
{<<"cowboy">>, {<<"cowboy">>,
{git,"https://github.com/ninenines/cowboy.git", {git,"https://github.com/ninenines/cowboy.git",
{ref,"3ea8395eb8f53a57acb5d3c00b99c70296e7cdbd"}}, {ref,"495e74ada88d0876d7e438d53f11af767a9cdcc4"}},
0}, 0},
{<<"cowlib">>, {<<"cowlib">>,
{git,"https://github.com/ninenines/cowlib", {git,"https://github.com/ninenines/cowlib",
{ref,"1eb7f4293a652adcfe43b1835d22c58d8def839f"}}, {ref,"aca0ad953417b29bab2c41eeb4c37c98606c848b"}},
1}, 1},
{<<"esockd">>,
{git,"https://github.com/emqx/esockd.git",
{ref,"d9ce4024cc42a65e9a05001997031e743442f955"}},
0},
{<<"fs">>,{pkg,<<"fs">>,<<"6.1.1">>},1}, {<<"fs">>,{pkg,<<"fs">>,<<"6.1.1">>},1},
{<<"goldrush">>,{pkg,<<"goldrush">>,<<"0.1.9">>},1}, {<<"goldrush">>,{pkg,<<"goldrush">>,<<"0.1.9">>},1},
{<<"gpb">>, {<<"gpb">>,
@ -47,7 +43,7 @@
0}, 0},
{<<"ranch">>, {<<"ranch">>,
{git,"https://github.com/ninenines/ranch", {git,"https://github.com/ninenines/ranch",
{ref,"a692f44567034dacf5efcaa24a24183788594eb7"}}, {ref,"10b51304b26062e0dbfd5e74824324e9a911e269"}},
1}, 1},
{<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.6">>},1}, {<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.6">>},1},
{<<"sync">>, {<<"sync">>,