Compare commits

...

11 Commits

Author SHA1 Message Date
153d8e7ec5 fix docs 2026-05-30 17:08:50 +08:00
a405691cbd fix node acl_changed 2026-05-26 22:54:37 +08:00
2a500cb421 fix node acl_changed 2026-05-26 22:39:08 +08:00
f1fcce9603 fix node acl_changed 2026-05-26 21:49:32 +08:00
bed29d89da add sdlan_transport 2026-05-26 15:24:51 +08:00
94f0476dee fix config 2026-05-26 14:21:19 +08:00
9ede6aaa40 fix acl_changed event 2026-05-26 14:18:21 +08:00
5138a18364 fix acl_changed event 2026-05-26 14:09:29 +08:00
f6e1cd7c5e fix sdlan_network 2026-05-26 13:59:59 +08:00
07bdfb5f31 fix quic proto 2026-05-26 13:46:40 +08:00
a7f43b7260 fix acl 2026-05-26 13:24:53 +08:00
19 changed files with 1286 additions and 374 deletions

18
API.md
View File

@ -140,7 +140,23 @@ url: /node/disable
method: post method: post
params: params:
network_id: int network_id: int
client_id: int client_id: string
return:
{"result": "success"}
{"error": {"code": 1, "message": "错误描述"}}
```
#### 2. 节点导出的服务发生变化
```text
url: /node/acl_changed
method: post
params:
network_id: int
client_id: string
return: return:

File diff suppressed because it is too large Load Diff

View File

@ -28,7 +28,7 @@
{ssl_server, [ {ssl_server, [
{port, 1443}, {port, 1443},
{acceptors, 500}, {acceptors, 10},
{max_connections, 10240}, {max_connections, 10240},
{backlog, 10240}, {backlog, 10240},
{limits, [ {limits, [
@ -67,7 +67,7 @@
{mysql_sdlan, {mysql_sdlan,
[{size, 10}, {max_overflow, 20}, {worker_module, mysql}], [{size, 10}, {max_overflow, 20}, {worker_module, mysql}],
[ [
{host, {118, 178, 229, 213}}, {host, {47, 111, 101, 3}},
{port, 3306}, {port, 3306},
{user, "punchnetuser"}, {user, "punchnetuser"},
{connect_mode, lazy}, {connect_mode, lazy},
@ -79,8 +79,8 @@
} }
]}, ]},
{api_url, "http://127.0.0.1:18082/test/"} %{api_url, "http://127.0.0.1:18082/test/"}
{api_url, "https://test.punchsky.com/api/"}
]}, ]},
{throttle, [ {throttle, [

View File

@ -61,6 +61,9 @@
-define(PACKET_POLICY_REQUEST, 16#b0). -define(PACKET_POLICY_REQUEST, 16#b0).
-define(PACKET_POLICY_REPLY, 16#b1). -define(PACKET_POLICY_REPLY, 16#b1).
-define(PACKET_EXPOSED_SERVICE_REQUEST, 16#b2).
-define(PACKET_EXPOSED_SERVICE_RESPONSE, 16#b3).
%% %%
-define(PACKET_WELCOME, 16#4F). -define(PACKET_WELCOME, 16#4F).

View File

@ -137,6 +137,22 @@
}). }).
-endif. -endif.
-ifndef('SDLEXPOSEDSERVICEREQUEST_PB_H').
-define('SDLEXPOSEDSERVICEREQUEST_PB_H', true).
-record('SDLExposedServiceRequest',
{version = 0 :: non_neg_integer() | undefined % = 1, optional, 32 bits
}).
-endif.
-ifndef('SDLEXPOSEDSERVICERESPONSE_PB_H').
-define('SDLEXPOSEDSERVICERESPONSE_PB_H', true).
-record('SDLExposedServiceResponse',
{version = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits
tcp_ports = [] :: [non_neg_integer()] | undefined, % = 2, repeated, 32 bits
udp_ports = [] :: [non_neg_integer()] | undefined % = 3, repeated, 32 bits
}).
-endif.
-ifndef('SDLEVENT.NATCHANGED_PB_H'). -ifndef('SDLEVENT.NATCHANGED_PB_H').
-define('SDLEVENT.NATCHANGED_PB_H', true). -define('SDLEVENT.NATCHANGED_PB_H', true).
-record('SDLEvent.NatChanged', -record('SDLEvent.NatChanged',
@ -156,6 +172,13 @@
}). }).
-endif. -endif.
-ifndef('SDLEVENT.EXPOSEDSERVICECHANGED_PB_H').
-define('SDLEVENT.EXPOSEDSERVICECHANGED_PB_H', true).
-record('SDLEvent.ExposedServiceChanged',
{
}).
-endif.
-ifndef('SDLEVENT.NETWORKSHUTDOWN_PB_H'). -ifndef('SDLEVENT.NETWORKSHUTDOWN_PB_H').
-define('SDLEVENT.NETWORKSHUTDOWN_PB_H', true). -define('SDLEVENT.NETWORKSHUTDOWN_PB_H', true).
-record('SDLEvent.NetworkShutdown', -record('SDLEvent.NetworkShutdown',
@ -166,7 +189,7 @@
-ifndef('SDLEVENT_PB_H'). -ifndef('SDLEVENT_PB_H').
-define('SDLEVENT_PB_H', true). -define('SDLEVENT_PB_H', true).
-record('SDLEvent', -record('SDLEvent',
{event :: {nat_changed, sdlan_pb:'SDLEvent.NatChanged'()} | {send_register, sdlan_pb:'SDLEvent.SendRegister'()} | {shutdown, sdlan_pb:'SDLEvent.NetworkShutdown'()} | undefined % oneof {event :: {nat_changed, sdlan_pb:'SDLEvent.NatChanged'()} | {send_register, sdlan_pb:'SDLEvent.SendRegister'()} | {shutdown, sdlan_pb:'SDLEvent.NetworkShutdown'()} | {exposed_service_changed, sdlan_pb:'SDLEvent.ExposedServiceChanged'()} | undefined % oneof
}). }).
-endif. -endif.

View File

@ -117,6 +117,16 @@ message SDLPolicyResponse {
bytes rules = 4; bytes rules = 4;
} }
message SDLExposedServiceRequest {
uint32 version = 1;
}
message SDLExposedServiceResponse {
uint32 version = 1;
repeated uint32 tcp_ports = 2;
repeated uint32 udp_ports = 3;
}
// //
message SDLEvent { message SDLEvent {
@ -135,6 +145,10 @@ message SDLEvent {
optional SDLV6Info v6_info = 5; optional SDLV6Info v6_info = 5;
} }
message ExposedServiceChanged {
}
// //
message NetworkShutdown { message NetworkShutdown {
string message = 1; string message = 1;
@ -144,6 +158,7 @@ message SDLEvent {
NatChanged nat_changed = 1; NatChanged nat_changed = 1;
SendRegister send_register = 2; SendRegister send_register = 2;
NetworkShutdown shutdown = 3; NetworkShutdown shutdown = 3;
ExposedServiceChanged exposed_service_changed = 4;
} }
} }

View File

@ -23,6 +23,15 @@ handle_request("POST", "/node/disable", _, #{<<"network_id">> := NetworkId, <<"c
{ok, 200, sdlan_util:json_data(<<"success">>)} {ok, 200, sdlan_util:json_data(<<"success">>)}
end; end;
handle_request("POST", "/node/acl_changed", _, #{<<"network_id">> := NetworkId, <<"client_ids">> := ClientIds}) when NetworkId > 0 ->
case sdlan_network:get_pid(NetworkId) of
undefined ->
{ok, 200, sdlan_util:json_error(-1, <<"network not found">>)};
Pid ->
ok = sdlan_network:exposed_service_changed(Pid, ClientIds),
{ok, 200, sdlan_util:json_data(<<"success">>)}
end;
handle_request(_, Path, _, _) -> handle_request(_, Path, _, _) ->
Path1 = list_to_binary(Path), Path1 = list_to_binary(Path),
{ok, 200, sdlan_util:json_error(-1, <<"url: ", Path1/binary, " not found">>)}. {ok, 200, sdlan_util:json_error(-1, <<"url: ", Path1/binary, " not found">>)}.

View File

@ -1,48 +0,0 @@
%%%-------------------------------------------------------------------
%%% @author anlicheng
%%% @copyright (C) 2026, <COMPANY>
%%% @doc
%%% Compatibility facade for the QUIC channel API.
%%% @end
%%%-------------------------------------------------------------------
-module(sdlan_quic_channel).
-author("anlicheng").
%% API
-export([start_link/2]).
-export([accept_stream/1, send_event/2, command/4, stop/2, debug_info/1]).
-export([test_rules/2]).
%%%===================================================================
%%% API
%%%===================================================================
%%
-spec test_rules(SrcIdentityId :: integer(), DstIdentityId :: integer()) -> binary().
test_rules(SrcIdentityId, DstIdentityId) when is_integer(SrcIdentityId), is_integer(DstIdentityId) ->
sdlan_session:test_rules(SrcIdentityId, DstIdentityId).
-spec send_event(Pid :: pid(), Event :: binary()) -> ok.
send_event(Pid, ProtobufEvent) when is_pid(Pid), is_binary(ProtobufEvent) ->
sdlan_quic_transport:send_event(Pid, ProtobufEvent).
-spec command(Pid :: pid(), Ref :: reference(), ReceiverPid :: pid(), {Tag :: atom(), SubCommand :: any()}) -> ok.
command(Pid, Ref, ReceiverPid, SubCommand) when is_pid(Pid), is_pid(ReceiverPid) ->
sdlan_quic_transport:command(Pid, Ref, ReceiverPid, SubCommand).
-spec accept_stream(Pid :: pid()) -> ok.
accept_stream(Pid) when is_pid(Pid) ->
sdlan_quic_transport:accept_stream(Pid).
-spec stop(Pid :: pid(), Reason :: term()) -> ok.
stop(Pid, Reason) when is_pid(Pid) ->
sdlan_quic_transport:stop(Pid, Reason).
-spec debug_info(Pid :: pid()) -> map().
debug_info(Pid) when is_pid(Pid) ->
sdlan_quic_transport:debug_info(Pid).
%% @doc Creates a transport process. Kept for existing supervisor specs.
-spec start_link(Conn :: quicer:connection_handle(), Limits :: proplists:proplist()) -> gen_statem:start_ret().
start_link(Conn, Limits) when is_list(Limits) ->
sdlan_quic_transport:start_link(Conn, Limits).

View File

@ -66,7 +66,7 @@ loop_accept(L, Limits, AcceptorId) ->
logger:debug("[sdlan_quic_server] acceptor: ~p, accept a new connection: ~p", [AcceptorId, Conn]), logger:debug("[sdlan_quic_server] acceptor: ~p, accept a new connection: ~p", [AcceptorId, Conn]),
case quicer:handshake(Conn) of case quicer:handshake(Conn) of
{ok, NConn} -> {ok, NConn} ->
case sdlan_quic_channel_sup:start_channel(NConn, Limits) of case sdlan_quic_transport_sup:start_transport(NConn, Limits) of
{ok, ChannelPid} -> {ok, ChannelPid} ->
logger:debug("[sdlan_quic_server] conn: ~p, handshake success, channel pid: ~p", [NConn, ChannelPid]), logger:debug("[sdlan_quic_server] conn: ~p, handshake success, channel pid: ~p", [NConn, ChannelPid]),
case quicer:controlling_process(NConn, ChannelPid) of case quicer:controlling_process(NConn, ChannelPid) of

View File

@ -11,6 +11,7 @@
-include("sdlan_pb.hrl"). -include("sdlan_pb.hrl").
-behaviour(gen_statem). -behaviour(gen_statem).
-behaviour(sdlan_transport).
%% %%
-define(STREAM_ACTIVE_N, 100). -define(STREAM_ACTIVE_N, 100).

View File

@ -6,14 +6,14 @@
%%% @end %%% @end
%%% Created : 13. 2 2026 18:00 %%% Created : 13. 2 2026 18:00
%%%------------------------------------------------------------------- %%%-------------------------------------------------------------------
-module(sdlan_quic_channel_sup). -module(sdlan_quic_transport_sup).
-author("anlicheng"). -author("anlicheng").
-behaviour(supervisor). -behaviour(supervisor).
%% API %% API
-export([start_link/0]). -export([start_link/0]).
-export([start_channel/2]). -export([start_transport/2]).
%% Supervisor callbacks %% Supervisor callbacks
-export([init/1]). -export([init/1]).
@ -58,6 +58,6 @@ init([]) ->
%%% Internal functions %%% Internal functions
%%%=================================================================== %%%===================================================================
-spec start_channel(NConn :: quicer:connection_handle(), Limits :: proplists:proplist()) -> supervisor:startchild_ret(). -spec start_transport(NConn :: quicer:connection_handle(), Limits :: proplists:proplist()) -> supervisor:startchild_ret().
start_channel(NConn, Limits) when is_list(Limits) -> start_transport(NConn, Limits) when is_list(Limits) ->
supervisor:start_child(?MODULE, [NConn, Limits]). supervisor:start_child(?MODULE, [NConn, Limits]).

View File

@ -14,6 +14,7 @@
%% API %% API
-export([get_all_networks/0, get_network/1]). -export([get_all_networks/0, get_network/1]).
-export([flow_report/5, network_forward_report/2, auth_access_token/1, set_node_status/1]). -export([flow_report/5, network_forward_report/2, auth_access_token/1, set_node_status/1]).
-export([node_acl/1]).
-spec get_all_networks() -> {ok, [NetworkId :: integer()]} | {error, Reason :: any()}. -spec get_all_networks() -> {ok, [NetworkId :: integer()]} | {error, Reason :: any()}.
get_all_networks() -> get_all_networks() ->
@ -65,6 +66,20 @@ auth_access_token(Params) when is_map(Params) ->
Error Error
end. end.
-spec node_acl(Params :: map()) -> {ok, Resp :: map()} | {error, Reason :: any()}.
node_acl(Params) when is_map(Params) ->
case safe_request(fun() -> do_post("acl", Params) end) of
{ok, Resp} ->
case decode_json(Resp) of
{ok, Result} ->
{ok, Result};
{error, Reason} ->
{error, Reason}
end;
{error, _Reason} = Error ->
Error
end.
-spec set_node_status(Params :: map()) -> {ok, Resp :: map()} | {error, Reason :: any()}. -spec set_node_status(Params :: map()) -> {ok, Resp :: map()} | {error, Reason :: any()}.
set_node_status(Params) when is_map(Params) -> set_node_status(Params) when is_map(Params) ->
case safe_request(fun() -> do_post("set_node_status", Params) end) of case safe_request(fun() -> do_post("set_node_status", Params) end) of

View File

@ -19,8 +19,8 @@
%% API %% API
-export([start_link/2]). -export([start_link/2]).
-export([get_name/1, get_pid/1, lookup_pid/1, peer_info/3, unregister/3, debug_info/1, get_network_id/1, attach/6, arp_request/2]). -export([get_name/1, get_pid/1, lookup_pid/1, peer_info/3, unregister/3, debug_info/1, get_network_id/1, attach/7, arp_request/2]).
-export([forward_by_ets/5, update_hole/7, disable_client/2, get_channel/2]). -export([forward_by_ets/5, update_hole/7, disable_client/2, get_channel/2, exposed_service_changed/2]).
-export([command/4, wait_command_ack/2]). -export([command/4, wait_command_ack/2]).
%% gen_server callbacks %% gen_server callbacks
@ -35,6 +35,7 @@
-record(endpoint, { -record(endpoint, {
channel_pid :: undefined | pid(), channel_pid :: undefined | pid(),
channel_ref :: undefined | reference(), channel_ref :: undefined | reference(),
transport :: module(),
client_id :: binary(), client_id :: binary(),
mac :: binary(), mac :: binary(),
@ -90,10 +91,11 @@ get_name(Id) when is_integer(Id) ->
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).
-spec attach(Pid :: pid(), ChannelPid :: pid(), ClientId :: binary(), Mac :: binary(), Ip :: integer(), Hostname :: binary()) -> -spec attach(Pid :: pid(), ChannelPid :: pid(), Transport :: module(), ClientId :: binary(), Mac :: binary(), Ip :: integer(), Hostname :: binary()) ->
{ok, Algorithm :: binary(), Key :: binary(), RegionId :: integer(), SessionToken :: binary()}. {ok, Algorithm :: binary(), Key :: binary(), RegionId :: integer(), SessionToken :: binary()}.
attach(Pid, ChannelPid, ClientId, Mac, Ip, Hostname) when is_pid(Pid), is_pid(ChannelPid), is_binary(ClientId), is_binary(Mac), is_integer(Ip), is_binary(Hostname) -> attach(Pid, ChannelPid, Transport, ClientId, Mac, Ip, Hostname)
gen_server:call(Pid, {attach, ChannelPid, ClientId, Mac, Ip, Hostname}). when is_pid(Pid), is_pid(ChannelPid), is_atom(Transport), is_binary(ClientId), is_binary(Mac), is_integer(Ip), is_binary(Hostname) ->
gen_server:call(Pid, {attach, ChannelPid, Transport, ClientId, Mac, Ip, Hostname}).
-spec unregister(Pid :: pid(), ClientId :: binary(), Mac :: binary()) -> ok. -spec unregister(Pid :: pid(), ClientId :: binary(), Mac :: binary()) -> ok.
unregister(Pid, ClientId, Mac) when is_pid(Pid), is_binary(ClientId), is_binary(Mac) -> unregister(Pid, ClientId, Mac) when is_pid(Pid), is_binary(ClientId), is_binary(Mac) ->
@ -116,7 +118,7 @@ command(Pid, ReceiverPid, ClientId, SubCommand) when is_pid(Pid), is_pid(Receive
-spec wait_command_ack(Ref :: reference(), Timeout :: integer()) -> {error, timeout} | {ok, CommandAck :: #'SDLCommandAck'{}}. -spec wait_command_ack(Ref :: reference(), Timeout :: integer()) -> {error, timeout} | {ok, CommandAck :: #'SDLCommandAck'{}}.
wait_command_ack(Ref, Timeout) when is_reference(Ref), is_integer(Timeout) -> wait_command_ack(Ref, Timeout) when is_reference(Ref), is_integer(Timeout) ->
receive receive
{quic_command_ack, Ref, CommandAck} -> {command_ack, Ref, CommandAck} ->
{ok, CommandAck} {ok, CommandAck}
after Timeout -> after Timeout ->
{error, timeout} {error, timeout}
@ -153,6 +155,10 @@ update_hole(Pid, SessionToken, ClientId, Mac, Peer, NatType, V6Info) when is_pid
disable_client(Pid, ClientId) when is_pid(Pid), is_binary(ClientId) -> disable_client(Pid, ClientId) when is_pid(Pid), is_binary(ClientId) ->
gen_server:call(Pid, {disable_client, ClientId}). gen_server:call(Pid, {disable_client, ClientId}).
-spec exposed_service_changed(Pid :: pid(), ClientIds :: [binary()]) -> ok.
exposed_service_changed(Pid, ClientIds) when is_pid(Pid), is_list(ClientIds) ->
gen_server:call(Pid, {exposed_service_changed, ClientIds}).
-spec get_channel(Pid :: pid(), ClientId :: binary()) -> error | {ok, ChannelPid :: pid()}. -spec get_channel(Pid :: pid(), ClientId :: binary()) -> error | {ok, ChannelPid :: pid()}.
get_channel(Pid, ClientId) when is_pid(Pid), is_binary(ClientId) -> get_channel(Pid, ClientId) when is_pid(Pid), is_binary(ClientId) ->
gen_server:call(Pid, {get_channel, ClientId}). gen_server:call(Pid, {get_channel, ClientId}).
@ -205,7 +211,7 @@ init([{network, Id, Name, Domain, IpAddr, MaskLen, OwnerId, Algorithm0}]) ->
{stop, Reason :: term(), Reply :: term(), NewState :: #state{}} | {stop, Reason :: term(), Reply :: term(), NewState :: #state{}} |
{stop, Reason :: term(), NewState :: #state{}}). {stop, Reason :: term(), NewState :: #state{}}).
%% ip地址 %% ip地址
handle_call({attach, ChannelPid, ClientId, Mac, Ip, Hostname}, _From, handle_call({attach, ChannelPid, Transport, ClientId, Mac, Ip, Hostname}, _From,
State = #state{network_id = NetworkId, domain = Domain, algorithm = Algorithm, key = Key, endpoint_table = EndpointTable}) -> State = #state{network_id = NetworkId, domain = Domain, algorithm = Algorithm, key = Key, endpoint_table = EndpointTable}) ->
%% ip地址的时候mac地址为唯一基准 %% ip地址的时候mac地址为唯一基准
logger:debug("[sdlan_network] alloc_ip, network_id: ~p, client_id: ~p, mac: ~p, ip_addr: ~p", logger:debug("[sdlan_network] alloc_ip, network_id: ~p, client_id: ~p, mac: ~p, ip_addr: ~p",
@ -221,6 +227,7 @@ handle_call({attach, ChannelPid, ClientId, Mac, Ip, Hostname}, _From,
Endpoint = #endpoint{ Endpoint = #endpoint{
channel_pid = ChannelPid, channel_pid = ChannelPid,
channel_ref = ChannelRef, channel_ref = ChannelRef,
transport = Transport,
client_id = ClientId, client_id = ClientId,
mac = Mac, mac = Mac,
ip = Ip, ip = Ip,
@ -266,7 +273,7 @@ handle_call(get_network_id, _From, State = #state{network_id = NetworkId}) ->
%% nat_peer信息 %% nat_peer信息
handle_call({peer_info, SrcMac, DstMac}, _From, State = #state{endpoint_table = EndpointTable}) -> handle_call({peer_info, SrcMac, DstMac}, _From, State = #state{endpoint_table = EndpointTable}) ->
case lookup_endpoint(EndpointTable, DstMac) of case lookup_endpoint(EndpointTable, DstMac) of
#endpoint{channel_pid = DstChannelPid, hole = #hole{peer = DstNatPeer, nat_type = DstNatType}, v6_info = DstV6Info} -> #endpoint{channel_pid = DstChannelPid, transport = Transport, hole = #hole{peer = DstNatPeer, nat_type = DstNatType}, v6_info = DstV6Info} ->
%% sendRegister事件(2024-06-25 ) %% sendRegister事件(2024-06-25 )
maybe maybe
#endpoint{hole = #hole{peer = {SrcNatIp, SrcNatPort}, nat_type = SrcNatType}, v6_info = SrcV6Info} ?= lookup_endpoint(EndpointTable, SrcMac), #endpoint{hole = #hole{peer = {SrcNatIp, SrcNatPort}, nat_type = SrcNatType}, v6_info = SrcV6Info} ?= lookup_endpoint(EndpointTable, SrcMac),
@ -282,7 +289,7 @@ handle_call({peer_info, SrcMac, DstMac}, _From, State = #state{endpoint_table =
}), }),
logger:debug("Event: send_register, for peer_info"), logger:debug("Event: send_register, for peer_info"),
sdlan_quic_channel:send_event(DstChannelPid, RegisterEvent) Transport:send_event(DstChannelPid, RegisterEvent)
end, end,
{reply, {ok, {DstNatPeer, DstNatType}, DstV6Info}, State}; {reply, {ok, {DstNatPeer, DstNatType}, DstV6Info}, State};
_ -> _ ->
@ -293,7 +300,7 @@ handle_call({peer_info, SrcMac, DstMac}, _From, State = #state{endpoint_table =
handle_call({arp_request, TargetIp}, _From, State = #state{endpoint_table = EndpointTable}) -> handle_call({arp_request, TargetIp}, _From, State = #state{endpoint_table = EndpointTable}) ->
MatchSpec = ets:fun2ms(fun(Object = {_Mac, #endpoint{ip = Ip}}) when Ip =:= TargetIp -> MatchSpec = ets:fun2ms(fun(Object = {_Mac, #endpoint{ip = Ip}}) when Ip =:= TargetIp ->
Object Object
end), end),
case select_endpoint(EndpointTable, MatchSpec) of case select_endpoint(EndpointTable, MatchSpec) of
error -> error ->
{reply, error, State}; {reply, error, State};
@ -307,14 +314,34 @@ handle_call({command, ReceiverPid, ClientId, SubCommand}, _From, State = #state{
Object Object
end), end),
case select_endpoint(EndpointTable, MatchSpec) of case select_endpoint(EndpointTable, MatchSpec) of
{ok, _Mac, #endpoint{channel_pid = ChannelPid}} -> {ok, _Mac, #endpoint{channel_pid = ChannelPid, transport = Transport}} ->
Ref = make_ref(), Ref = make_ref(),
sdlan_quic_channel:command(ChannelPid, Ref, ReceiverPid, SubCommand), Transport:command(ChannelPid, Ref, ReceiverPid, SubCommand),
{reply, {ok, Ref}, State}; {reply, {ok, Ref}, State};
error -> error ->
{reply, {error, <<"目标Node不在线"/utf8>>}, State} {reply, {error, <<"目标Node不在线"/utf8>>}, State}
end; end;
%% acl改变
handle_call({exposed_service_changed, ClientIds}, _From, State = #state{endpoint_table = EndpointTable}) ->
Endpoints = ets:foldl(fun({_, EP = #endpoint{client_id = ClientId0}}, Acc) ->
case lists:member(ClientId0, ClientIds) of
true ->
[EP|Acc];
false ->
Acc
end
end, [], EndpointTable),
ExposedServiceChangedEvent = sdlan_pb:encode_msg(#'SDLEvent' {
event = {exposed_service_changed, #'SDLEvent.ExposedServiceChanged'{}}
}),
lists:foreach(fun(#endpoint{channel_pid = ChannelPid, transport = Transport}) ->
Transport:send_event(ChannelPid, ExposedServiceChangedEvent)
end, Endpoints),
{reply, ok, State};
handle_call(debug_info, _From, State = #state{network_id = NetworkId, ipaddr = IpAddr, mask_len = MaskLen, owner_id = OwnerId, endpoint_table = EndpointTable}) -> handle_call(debug_info, _From, State = #state{network_id = NetworkId, ipaddr = IpAddr, mask_len = MaskLen, owner_id = OwnerId, endpoint_table = EndpointTable}) ->
Reply = #{ Reply = #{
<<"network_id">> => NetworkId, <<"network_id">> => NetworkId,
@ -362,8 +389,8 @@ handle_cast({update_hole, SessionToken, ClientId, Mac, Peer, NatType, V6Info}, S
}), }),
logger:debug("[sdlan_network] Event: nat_changed, update_hole, client_id: ~p(~p), hole changed", [ClientId, Ip]), logger:debug("[sdlan_network] Event: nat_changed, update_hole, client_id: ~p(~p), hole changed", [ClientId, Ip]),
broadcast(fun(#endpoint{channel_pid = ChannelPid}) -> broadcast(fun(#endpoint{channel_pid = ChannelPid, transport = Transport}) ->
sdlan_quic_channel:send_event(ChannelPid, NatChangedEvent) Transport:send_event(ChannelPid, NatChangedEvent)
end, [Mac], EndpointTable) end, [Mac], EndpointTable)
end, end,
NEndpoint = Endpoint0#endpoint{hole = NHole, v6_info = V6Info, last_seen = erlang:monotonic_time(second)}, NEndpoint = Endpoint0#endpoint{hole = NHole, v6_info = V6Info, last_seen = erlang:monotonic_time(second)},
@ -399,7 +426,7 @@ handle_info(Info, State) ->
-spec(terminate(Reason :: (normal | shutdown | {shutdown, term()} | term()), -spec(terminate(Reason :: (normal | shutdown | {shutdown, term()} | term()),
State :: #state{}) -> ok). State :: #state{}) -> ok).
terminate(Reason, #state{network_id = NetworkId, endpoint_table = EndpointTable}) -> terminate(Reason, #state{network_id = NetworkId, endpoint_table = EndpointTable}) ->
broadcast(fun(#endpoint{channel_pid = ChannelPid}) -> broadcast(fun(#endpoint{channel_pid = ChannelPid, transport = Transport}) ->
case is_pid(ChannelPid) andalso is_process_alive(ChannelPid) of case is_pid(ChannelPid) andalso is_process_alive(ChannelPid) of
true -> true ->
NetworkShutdownEvent = sdlan_pb:encode_msg(#'SDLEvent'{ NetworkShutdownEvent = sdlan_pb:encode_msg(#'SDLEvent'{
@ -410,8 +437,8 @@ terminate(Reason, #state{network_id = NetworkId, endpoint_table = EndpointTable}
logger:debug("[sdlan_network] Event: shutdown"), logger:debug("[sdlan_network] Event: shutdown"),
sdlan_quic_channel:send_event(ChannelPid, NetworkShutdownEvent), Transport:send_event(ChannelPid, NetworkShutdownEvent),
sdlan_quic_channel:stop(ChannelPid, normal); Transport:stop(ChannelPid, normal);
false -> false ->
ok ok
end end
@ -571,8 +598,8 @@ maybe_nat_changed(ChannelPid, Mac, Ip, EndpointTable) ->
}), }),
logger:debug("Event: nat_changed, for attach"), logger:debug("Event: nat_changed, for attach"),
broadcast(fun(#endpoint{channel_pid = ChannelPid0}) -> broadcast(fun(#endpoint{channel_pid = ChannelPid0, transport = Transport}) ->
sdlan_quic_channel:send_event(ChannelPid0, Event) Transport:send_event(ChannelPid0, Event)
end, [Mac], EndpointTable) end, [Mac], EndpointTable)
end, end,
%% attach需要清理之前的绑定信息使IP未变化channel %% attach需要清理之前的绑定信息使IP未变化channel
@ -580,11 +607,11 @@ maybe_nat_changed(ChannelPid, Mac, Ip, EndpointTable) ->
cleanup_endpoint(undefined, _KeepChannelPid, _Reason) -> cleanup_endpoint(undefined, _KeepChannelPid, _Reason) ->
ok; ok;
cleanup_endpoint(#endpoint{channel_ref = ChannelRef, channel_pid = ChannelPid}, KeepChannelPid, Reason) -> cleanup_endpoint(#endpoint{channel_ref = ChannelRef, channel_pid = ChannelPid, transport = Transport}, KeepChannelPid, Reason) ->
is_reference(ChannelRef) andalso erlang:demonitor(ChannelRef, [flush]), is_reference(ChannelRef) andalso erlang:demonitor(ChannelRef, [flush]),
case should_stop_channel(ChannelPid, KeepChannelPid) of case should_stop_channel(ChannelPid, KeepChannelPid) of
true -> true ->
catch sdlan_quic_channel:stop(ChannelPid, Reason), catch Transport:stop(ChannelPid, Reason),
ok; ok;
false -> false ->
ok ok
@ -674,7 +701,7 @@ select_endpoint(Table, MatchSpec) ->
case catch ets:select(Table, MatchSpec, 1) of case catch ets:select(Table, MatchSpec, 1) of
{[], _Continuation} -> {[], _Continuation} ->
error; error;
{[{Mac, Endpoint = #endpoint{}}], _Continuation} -> {[{Mac, Endpoint = #endpoint{}}|_], _Continuation} ->
{ok, Mac, Endpoint}; {ok, Mac, Endpoint};
'$end_of_table' -> '$end_of_table' ->
error; error;

View File

@ -82,10 +82,16 @@
-type 'SDLPolicyResponse'() :: #'SDLPolicyResponse'{}. -type 'SDLPolicyResponse'() :: #'SDLPolicyResponse'{}.
-type 'SDLExposedServiceRequest'() :: #'SDLExposedServiceRequest'{}.
-type 'SDLExposedServiceResponse'() :: #'SDLExposedServiceResponse'{}.
-type 'SDLEvent.NatChanged'() :: #'SDLEvent.NatChanged'{}. -type 'SDLEvent.NatChanged'() :: #'SDLEvent.NatChanged'{}.
-type 'SDLEvent.SendRegister'() :: #'SDLEvent.SendRegister'{}. -type 'SDLEvent.SendRegister'() :: #'SDLEvent.SendRegister'{}.
-type 'SDLEvent.ExposedServiceChanged'() :: #'SDLEvent.ExposedServiceChanged'{}.
-type 'SDLEvent.NetworkShutdown'() :: #'SDLEvent.NetworkShutdown'{}. -type 'SDLEvent.NetworkShutdown'() :: #'SDLEvent.NetworkShutdown'{}.
-type 'SDLEvent'() :: #'SDLEvent'{}. -type 'SDLEvent'() :: #'SDLEvent'{}.
@ -110,9 +116,9 @@
-type 'SDLRegisterAck'() :: #'SDLRegisterAck'{}. -type 'SDLRegisterAck'() :: #'SDLRegisterAck'{}.
-export_type(['SDLV4Info'/0, 'SDLV6Info'/0, 'SDLV6AssistProbe'/0, 'SDLV6AssistProbeReply'/0, 'SDLWelcome'/0, 'SDLRegisterSuper'/0, 'SDLRegisterSuperAck'/0, 'SDLRegisterSuperNak'/0, 'SDLQueryInfo'/0, 'SDLPeerInfo'/0, 'SDLArpRequest'/0, 'SDLArpResponse'/0, 'SDLPolicyRequest'/0, 'SDLPolicyResponse'/0, 'SDLEvent.NatChanged'/0, 'SDLEvent.SendRegister'/0, 'SDLEvent.NetworkShutdown'/0, 'SDLEvent'/0, 'SDLCommand.ExitNodeControl'/0, 'SDLCommand'/0, 'SDLCommandAck'/0, 'SDLStunRequest'/0, 'SDLStunReply'/0, 'SDLData'/0, 'SDLStunProbe'/0, 'SDLStunProbeReply'/0, 'SDLRegister'/0, 'SDLRegisterAck'/0]). -export_type(['SDLV4Info'/0, 'SDLV6Info'/0, 'SDLV6AssistProbe'/0, 'SDLV6AssistProbeReply'/0, 'SDLWelcome'/0, 'SDLRegisterSuper'/0, 'SDLRegisterSuperAck'/0, 'SDLRegisterSuperNak'/0, 'SDLQueryInfo'/0, 'SDLPeerInfo'/0, 'SDLArpRequest'/0, 'SDLArpResponse'/0, 'SDLPolicyRequest'/0, 'SDLPolicyResponse'/0, 'SDLExposedServiceRequest'/0, 'SDLExposedServiceResponse'/0, 'SDLEvent.NatChanged'/0, 'SDLEvent.SendRegister'/0, 'SDLEvent.ExposedServiceChanged'/0, 'SDLEvent.NetworkShutdown'/0, 'SDLEvent'/0, 'SDLCommand.ExitNodeControl'/0, 'SDLCommand'/0, 'SDLCommandAck'/0, 'SDLStunRequest'/0, 'SDLStunReply'/0, 'SDLData'/0, 'SDLStunProbe'/0, 'SDLStunProbeReply'/0, 'SDLRegister'/0, 'SDLRegisterAck'/0]).
-type '$msg_name'() :: 'SDLV4Info' | 'SDLV6Info' | 'SDLV6AssistProbe' | 'SDLV6AssistProbeReply' | 'SDLWelcome' | 'SDLRegisterSuper' | 'SDLRegisterSuperAck' | 'SDLRegisterSuperNak' | 'SDLQueryInfo' | 'SDLPeerInfo' | 'SDLArpRequest' | 'SDLArpResponse' | 'SDLPolicyRequest' | 'SDLPolicyResponse' | 'SDLEvent.NatChanged' | 'SDLEvent.SendRegister' | 'SDLEvent.NetworkShutdown' | 'SDLEvent' | 'SDLCommand.ExitNodeControl' | 'SDLCommand' | 'SDLCommandAck' | 'SDLStunRequest' | 'SDLStunReply' | 'SDLData' | 'SDLStunProbe' | 'SDLStunProbeReply' | 'SDLRegister' | 'SDLRegisterAck'. -type '$msg_name'() :: 'SDLV4Info' | 'SDLV6Info' | 'SDLV6AssistProbe' | 'SDLV6AssistProbeReply' | 'SDLWelcome' | 'SDLRegisterSuper' | 'SDLRegisterSuperAck' | 'SDLRegisterSuperNak' | 'SDLQueryInfo' | 'SDLPeerInfo' | 'SDLArpRequest' | 'SDLArpResponse' | 'SDLPolicyRequest' | 'SDLPolicyResponse' | 'SDLExposedServiceRequest' | 'SDLExposedServiceResponse' | 'SDLEvent.NatChanged' | 'SDLEvent.SendRegister' | 'SDLEvent.ExposedServiceChanged' | 'SDLEvent.NetworkShutdown' | 'SDLEvent' | 'SDLCommand.ExitNodeControl' | 'SDLCommand' | 'SDLCommandAck' | 'SDLStunRequest' | 'SDLStunReply' | 'SDLData' | 'SDLStunProbe' | 'SDLStunProbeReply' | 'SDLRegister' | 'SDLRegisterAck'.
-type '$msg'() :: 'SDLV4Info'() | 'SDLV6Info'() | 'SDLV6AssistProbe'() | 'SDLV6AssistProbeReply'() | 'SDLWelcome'() | 'SDLRegisterSuper'() | 'SDLRegisterSuperAck'() | 'SDLRegisterSuperNak'() | 'SDLQueryInfo'() | 'SDLPeerInfo'() | 'SDLArpRequest'() | 'SDLArpResponse'() | 'SDLPolicyRequest'() | 'SDLPolicyResponse'() | 'SDLEvent.NatChanged'() | 'SDLEvent.SendRegister'() | 'SDLEvent.NetworkShutdown'() | 'SDLEvent'() | 'SDLCommand.ExitNodeControl'() | 'SDLCommand'() | 'SDLCommandAck'() | 'SDLStunRequest'() | 'SDLStunReply'() | 'SDLData'() | 'SDLStunProbe'() | 'SDLStunProbeReply'() | 'SDLRegister'() | 'SDLRegisterAck'(). -type '$msg'() :: 'SDLV4Info'() | 'SDLV6Info'() | 'SDLV6AssistProbe'() | 'SDLV6AssistProbeReply'() | 'SDLWelcome'() | 'SDLRegisterSuper'() | 'SDLRegisterSuperAck'() | 'SDLRegisterSuperNak'() | 'SDLQueryInfo'() | 'SDLPeerInfo'() | 'SDLArpRequest'() | 'SDLArpResponse'() | 'SDLPolicyRequest'() | 'SDLPolicyResponse'() | 'SDLExposedServiceRequest'() | 'SDLExposedServiceResponse'() | 'SDLEvent.NatChanged'() | 'SDLEvent.SendRegister'() | 'SDLEvent.ExposedServiceChanged'() | 'SDLEvent.NetworkShutdown'() | 'SDLEvent'() | 'SDLCommand.ExitNodeControl'() | 'SDLCommand'() | 'SDLCommandAck'() | 'SDLStunRequest'() | 'SDLStunReply'() | 'SDLData'() | 'SDLStunProbe'() | 'SDLStunProbeReply'() | 'SDLRegister'() | 'SDLRegisterAck'().
-export_type(['$msg_name'/0, '$msg'/0]). -export_type(['$msg_name'/0, '$msg'/0]).
-if(?OTP_RELEASE >= 24). -if(?OTP_RELEASE >= 24).
@ -153,8 +159,11 @@ encode_msg(Msg, MsgName, Opts) ->
'SDLArpResponse' -> encode_msg_SDLArpResponse(id(Msg, TrUserData), TrUserData); 'SDLArpResponse' -> encode_msg_SDLArpResponse(id(Msg, TrUserData), TrUserData);
'SDLPolicyRequest' -> encode_msg_SDLPolicyRequest(id(Msg, TrUserData), TrUserData); 'SDLPolicyRequest' -> encode_msg_SDLPolicyRequest(id(Msg, TrUserData), TrUserData);
'SDLPolicyResponse' -> encode_msg_SDLPolicyResponse(id(Msg, TrUserData), TrUserData); 'SDLPolicyResponse' -> encode_msg_SDLPolicyResponse(id(Msg, TrUserData), TrUserData);
'SDLExposedServiceRequest' -> encode_msg_SDLExposedServiceRequest(id(Msg, TrUserData), TrUserData);
'SDLExposedServiceResponse' -> encode_msg_SDLExposedServiceResponse(id(Msg, TrUserData), TrUserData);
'SDLEvent.NatChanged' -> 'encode_msg_SDLEvent.NatChanged'(id(Msg, TrUserData), TrUserData); 'SDLEvent.NatChanged' -> 'encode_msg_SDLEvent.NatChanged'(id(Msg, TrUserData), TrUserData);
'SDLEvent.SendRegister' -> 'encode_msg_SDLEvent.SendRegister'(id(Msg, TrUserData), TrUserData); 'SDLEvent.SendRegister' -> 'encode_msg_SDLEvent.SendRegister'(id(Msg, TrUserData), TrUserData);
'SDLEvent.ExposedServiceChanged' -> 'encode_msg_SDLEvent.ExposedServiceChanged'(id(Msg, TrUserData), TrUserData);
'SDLEvent.NetworkShutdown' -> 'encode_msg_SDLEvent.NetworkShutdown'(id(Msg, TrUserData), TrUserData); 'SDLEvent.NetworkShutdown' -> 'encode_msg_SDLEvent.NetworkShutdown'(id(Msg, TrUserData), TrUserData);
'SDLEvent' -> encode_msg_SDLEvent(id(Msg, TrUserData), TrUserData); 'SDLEvent' -> encode_msg_SDLEvent(id(Msg, TrUserData), TrUserData);
'SDLCommand.ExitNodeControl' -> 'encode_msg_SDLCommand.ExitNodeControl'(id(Msg, TrUserData), TrUserData); 'SDLCommand.ExitNodeControl' -> 'encode_msg_SDLCommand.ExitNodeControl'(id(Msg, TrUserData), TrUserData);
@ -650,6 +659,46 @@ encode_msg_SDLPolicyResponse(#'SDLPolicyResponse'{src_identity_id = F1, dst_iden
end end
end. end.
encode_msg_SDLExposedServiceRequest(Msg, TrUserData) -> encode_msg_SDLExposedServiceRequest(Msg, <<>>, TrUserData).
encode_msg_SDLExposedServiceRequest(#'SDLExposedServiceRequest'{version = F1}, Bin, TrUserData) ->
if F1 == undefined -> Bin;
true ->
begin
TrF1 = id(F1, TrUserData),
if TrF1 =:= 0 -> Bin;
true -> e_varint(TrF1, <<Bin/binary, 8>>, TrUserData)
end
end
end.
encode_msg_SDLExposedServiceResponse(Msg, TrUserData) -> encode_msg_SDLExposedServiceResponse(Msg, <<>>, TrUserData).
encode_msg_SDLExposedServiceResponse(#'SDLExposedServiceResponse'{version = F1, tcp_ports = F2, udp_ports = F3}, Bin, TrUserData) ->
B1 = if F1 == undefined -> Bin;
true ->
begin
TrF1 = id(F1, TrUserData),
if TrF1 =:= 0 -> Bin;
true -> e_varint(TrF1, <<Bin/binary, 8>>, TrUserData)
end
end
end,
B2 = begin
TrF2 = id(F2, TrUserData),
if TrF2 == [] -> B1;
true -> e_field_SDLExposedServiceResponse_tcp_ports(TrF2, B1, TrUserData)
end
end,
begin
TrF3 = id(F3, TrUserData),
if TrF3 == [] -> B2;
true -> e_field_SDLExposedServiceResponse_udp_ports(TrF3, B2, TrUserData)
end
end.
'encode_msg_SDLEvent.NatChanged'(Msg, TrUserData) -> 'encode_msg_SDLEvent.NatChanged'(Msg, <<>>, TrUserData). 'encode_msg_SDLEvent.NatChanged'(Msg, TrUserData) -> 'encode_msg_SDLEvent.NatChanged'(Msg, <<>>, TrUserData).
@ -719,6 +768,8 @@ encode_msg_SDLPolicyResponse(#'SDLPolicyResponse'{src_identity_id = F1, dst_iden
true -> begin TrF5 = id(F5, TrUserData), 'e_mfield_SDLEvent.SendRegister_v6_info'(TrF5, <<B4/binary, 42>>, TrUserData) end true -> begin TrF5 = id(F5, TrUserData), 'e_mfield_SDLEvent.SendRegister_v6_info'(TrF5, <<B4/binary, 42>>, TrUserData) end
end. end.
'encode_msg_SDLEvent.ExposedServiceChanged'(_Msg, _TrUserData) -> <<>>.
'encode_msg_SDLEvent.NetworkShutdown'(Msg, TrUserData) -> 'encode_msg_SDLEvent.NetworkShutdown'(Msg, <<>>, TrUserData). 'encode_msg_SDLEvent.NetworkShutdown'(Msg, TrUserData) -> 'encode_msg_SDLEvent.NetworkShutdown'(Msg, <<>>, TrUserData).
@ -743,7 +794,8 @@ encode_msg_SDLEvent(#'SDLEvent'{event = F1}, Bin, TrUserData) ->
case id(F1, TrUserData) of case id(F1, TrUserData) of
{nat_changed, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_SDLEvent_nat_changed(TrTF1, <<Bin/binary, 10>>, TrUserData) end; {nat_changed, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_SDLEvent_nat_changed(TrTF1, <<Bin/binary, 10>>, TrUserData) end;
{send_register, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_SDLEvent_send_register(TrTF1, <<Bin/binary, 18>>, TrUserData) end; {send_register, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_SDLEvent_send_register(TrTF1, <<Bin/binary, 18>>, TrUserData) end;
{shutdown, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_SDLEvent_shutdown(TrTF1, <<Bin/binary, 26>>, TrUserData) end {shutdown, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_SDLEvent_shutdown(TrTF1, <<Bin/binary, 26>>, TrUserData) end;
{exposed_service_changed, TF1} -> begin TrTF1 = id(TF1, TrUserData), e_mfield_SDLEvent_exposed_service_changed(TrTF1, <<Bin/binary, 34>>, TrUserData) end
end end
end. end.
@ -1140,6 +1192,30 @@ e_mfield_SDLPeerInfo_v6_info(Msg, Bin, TrUserData) ->
Bin2 = e_varint(byte_size(SubBin), Bin), Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>. <<Bin2/binary, SubBin/binary>>.
e_field_SDLExposedServiceResponse_tcp_ports(Elems, Bin, TrUserData) when Elems =/= [] ->
SubBin = e_pfield_SDLExposedServiceResponse_tcp_ports(Elems, <<>>, TrUserData),
Bin2 = <<Bin/binary, 18>>,
Bin3 = e_varint(byte_size(SubBin), Bin2),
<<Bin3/binary, SubBin/binary>>;
e_field_SDLExposedServiceResponse_tcp_ports([], Bin, _TrUserData) -> Bin.
e_pfield_SDLExposedServiceResponse_tcp_ports([Value | Rest], Bin, TrUserData) ->
Bin2 = e_varint(id(Value, TrUserData), Bin, TrUserData),
e_pfield_SDLExposedServiceResponse_tcp_ports(Rest, Bin2, TrUserData);
e_pfield_SDLExposedServiceResponse_tcp_ports([], Bin, _TrUserData) -> Bin.
e_field_SDLExposedServiceResponse_udp_ports(Elems, Bin, TrUserData) when Elems =/= [] ->
SubBin = e_pfield_SDLExposedServiceResponse_udp_ports(Elems, <<>>, TrUserData),
Bin2 = <<Bin/binary, 26>>,
Bin3 = e_varint(byte_size(SubBin), Bin2),
<<Bin3/binary, SubBin/binary>>;
e_field_SDLExposedServiceResponse_udp_ports([], Bin, _TrUserData) -> Bin.
e_pfield_SDLExposedServiceResponse_udp_ports([Value | Rest], Bin, TrUserData) ->
Bin2 = e_varint(id(Value, TrUserData), Bin, TrUserData),
e_pfield_SDLExposedServiceResponse_udp_ports(Rest, Bin2, TrUserData);
e_pfield_SDLExposedServiceResponse_udp_ports([], Bin, _TrUserData) -> Bin.
'e_mfield_SDLEvent.SendRegister_v6_info'(Msg, Bin, TrUserData) -> 'e_mfield_SDLEvent.SendRegister_v6_info'(Msg, Bin, TrUserData) ->
SubBin = encode_msg_SDLV6Info(Msg, <<>>, TrUserData), SubBin = encode_msg_SDLV6Info(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin), Bin2 = e_varint(byte_size(SubBin), Bin),
@ -1160,6 +1236,8 @@ e_mfield_SDLEvent_shutdown(Msg, Bin, TrUserData) ->
Bin2 = e_varint(byte_size(SubBin), Bin), Bin2 = e_varint(byte_size(SubBin), Bin),
<<Bin2/binary, SubBin/binary>>. <<Bin2/binary, SubBin/binary>>.
e_mfield_SDLEvent_exposed_service_changed(_Msg, Bin, _TrUserData) -> <<Bin/binary, 0>>.
e_mfield_SDLCommand_exit_node(Msg, Bin, TrUserData) -> e_mfield_SDLCommand_exit_node(Msg, Bin, TrUserData) ->
SubBin = 'encode_msg_SDLCommand.ExitNodeControl'(Msg, <<>>, TrUserData), SubBin = 'encode_msg_SDLCommand.ExitNodeControl'(Msg, <<>>, TrUserData),
Bin2 = e_varint(byte_size(SubBin), Bin), Bin2 = e_varint(byte_size(SubBin), Bin),
@ -1322,8 +1400,11 @@ decode_msg_2_doit('SDLArpRequest', Bin, TrUserData) -> id(decode_msg_SDLArpReque
decode_msg_2_doit('SDLArpResponse', Bin, TrUserData) -> id(decode_msg_SDLArpResponse(Bin, TrUserData), TrUserData); decode_msg_2_doit('SDLArpResponse', Bin, TrUserData) -> id(decode_msg_SDLArpResponse(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLPolicyRequest', Bin, TrUserData) -> id(decode_msg_SDLPolicyRequest(Bin, TrUserData), TrUserData); decode_msg_2_doit('SDLPolicyRequest', Bin, TrUserData) -> id(decode_msg_SDLPolicyRequest(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLPolicyResponse', Bin, TrUserData) -> id(decode_msg_SDLPolicyResponse(Bin, TrUserData), TrUserData); decode_msg_2_doit('SDLPolicyResponse', Bin, TrUserData) -> id(decode_msg_SDLPolicyResponse(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLExposedServiceRequest', Bin, TrUserData) -> id(decode_msg_SDLExposedServiceRequest(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLExposedServiceResponse', Bin, TrUserData) -> id(decode_msg_SDLExposedServiceResponse(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLEvent.NatChanged', Bin, TrUserData) -> id('decode_msg_SDLEvent.NatChanged'(Bin, TrUserData), TrUserData); decode_msg_2_doit('SDLEvent.NatChanged', Bin, TrUserData) -> id('decode_msg_SDLEvent.NatChanged'(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLEvent.SendRegister', Bin, TrUserData) -> id('decode_msg_SDLEvent.SendRegister'(Bin, TrUserData), TrUserData); decode_msg_2_doit('SDLEvent.SendRegister', Bin, TrUserData) -> id('decode_msg_SDLEvent.SendRegister'(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLEvent.ExposedServiceChanged', Bin, TrUserData) -> id('decode_msg_SDLEvent.ExposedServiceChanged'(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLEvent.NetworkShutdown', Bin, TrUserData) -> id('decode_msg_SDLEvent.NetworkShutdown'(Bin, TrUserData), TrUserData); decode_msg_2_doit('SDLEvent.NetworkShutdown', Bin, TrUserData) -> id('decode_msg_SDLEvent.NetworkShutdown'(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLEvent', Bin, TrUserData) -> id(decode_msg_SDLEvent(Bin, TrUserData), TrUserData); decode_msg_2_doit('SDLEvent', Bin, TrUserData) -> id(decode_msg_SDLEvent(Bin, TrUserData), TrUserData);
decode_msg_2_doit('SDLCommand.ExitNodeControl', Bin, TrUserData) -> id('decode_msg_SDLCommand.ExitNodeControl'(Bin, TrUserData), TrUserData); decode_msg_2_doit('SDLCommand.ExitNodeControl', Bin, TrUserData) -> id('decode_msg_SDLCommand.ExitNodeControl'(Bin, TrUserData), TrUserData);
@ -2222,6 +2303,138 @@ skip_32_SDLPolicyResponse(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@
skip_64_SDLPolicyResponse(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_SDLPolicyResponse(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData). skip_64_SDLPolicyResponse(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_SDLPolicyResponse(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData).
decode_msg_SDLExposedServiceRequest(Bin, TrUserData) -> dfp_read_field_def_SDLExposedServiceRequest(Bin, 0, 0, 0, id(0, TrUserData), TrUserData).
dfp_read_field_def_SDLExposedServiceRequest(<<8, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_SDLExposedServiceRequest_version(Rest, Z1, Z2, F, F@_1, TrUserData);
dfp_read_field_def_SDLExposedServiceRequest(<<>>, 0, 0, _, F@_1, _) -> #'SDLExposedServiceRequest'{version = F@_1};
dfp_read_field_def_SDLExposedServiceRequest(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_SDLExposedServiceRequest(Other, Z1, Z2, F, F@_1, TrUserData).
dg_read_field_def_SDLExposedServiceRequest(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> dg_read_field_def_SDLExposedServiceRequest(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData);
dg_read_field_def_SDLExposedServiceRequest(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) ->
Key = X bsl N + Acc,
case Key of
8 -> d_field_SDLExposedServiceRequest_version(Rest, 0, 0, 0, F@_1, TrUserData);
_ ->
case Key band 7 of
0 -> skip_varint_SDLExposedServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
1 -> skip_64_SDLExposedServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
2 -> skip_length_delimited_SDLExposedServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
3 -> skip_group_SDLExposedServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
5 -> skip_32_SDLExposedServiceRequest(Rest, 0, 0, Key bsr 3, F@_1, TrUserData)
end
end;
dg_read_field_def_SDLExposedServiceRequest(<<>>, 0, 0, _, F@_1, _) -> #'SDLExposedServiceRequest'{version = F@_1}.
d_field_SDLExposedServiceRequest_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_SDLExposedServiceRequest_version(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData);
d_field_SDLExposedServiceRequest_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
dfp_read_field_def_SDLExposedServiceRequest(RestF, 0, 0, F, NewFValue, TrUserData).
skip_varint_SDLExposedServiceRequest(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_SDLExposedServiceRequest(Rest, Z1, Z2, F, F@_1, TrUserData);
skip_varint_SDLExposedServiceRequest(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_SDLExposedServiceRequest(Rest, Z1, Z2, F, F@_1, TrUserData).
skip_length_delimited_SDLExposedServiceRequest(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> skip_length_delimited_SDLExposedServiceRequest(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData);
skip_length_delimited_SDLExposedServiceRequest(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) ->
Length = X bsl N + Acc,
<<_:Length/binary, Rest2/binary>> = Rest,
dfp_read_field_def_SDLExposedServiceRequest(Rest2, 0, 0, F, F@_1, TrUserData).
skip_group_SDLExposedServiceRequest(Bin, _, Z2, FNum, F@_1, TrUserData) ->
{_, Rest} = read_group(Bin, FNum),
dfp_read_field_def_SDLExposedServiceRequest(Rest, 0, Z2, FNum, F@_1, TrUserData).
skip_32_SDLExposedServiceRequest(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_SDLExposedServiceRequest(Rest, Z1, Z2, F, F@_1, TrUserData).
skip_64_SDLExposedServiceRequest(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_SDLExposedServiceRequest(Rest, Z1, Z2, F, F@_1, TrUserData).
decode_msg_SDLExposedServiceResponse(Bin, TrUserData) -> dfp_read_field_def_SDLExposedServiceResponse(Bin, 0, 0, 0, id(0, TrUserData), id([], TrUserData), id([], TrUserData), TrUserData).
dfp_read_field_def_SDLExposedServiceResponse(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_SDLExposedServiceResponse_version(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
dfp_read_field_def_SDLExposedServiceResponse(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_pfield_SDLExposedServiceResponse_tcp_ports(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
dfp_read_field_def_SDLExposedServiceResponse(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_SDLExposedServiceResponse_tcp_ports(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
dfp_read_field_def_SDLExposedServiceResponse(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_pfield_SDLExposedServiceResponse_udp_ports(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
dfp_read_field_def_SDLExposedServiceResponse(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_SDLExposedServiceResponse_udp_ports(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
dfp_read_field_def_SDLExposedServiceResponse(<<>>, 0, 0, _, F@_1, R1, R2, TrUserData) -> #'SDLExposedServiceResponse'{version = F@_1, tcp_ports = lists_reverse(R1, TrUserData), udp_ports = lists_reverse(R2, TrUserData)};
dfp_read_field_def_SDLExposedServiceResponse(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dg_read_field_def_SDLExposedServiceResponse(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
dg_read_field_def_SDLExposedServiceResponse(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> dg_read_field_def_SDLExposedServiceResponse(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
dg_read_field_def_SDLExposedServiceResponse(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) ->
Key = X bsl N + Acc,
case Key of
8 -> d_field_SDLExposedServiceResponse_version(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData);
18 -> d_pfield_SDLExposedServiceResponse_tcp_ports(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData);
16 -> d_field_SDLExposedServiceResponse_tcp_ports(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData);
26 -> d_pfield_SDLExposedServiceResponse_udp_ports(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData);
24 -> d_field_SDLExposedServiceResponse_udp_ports(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData);
_ ->
case Key band 7 of
0 -> skip_varint_SDLExposedServiceResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData);
1 -> skip_64_SDLExposedServiceResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData);
2 -> skip_length_delimited_SDLExposedServiceResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData);
3 -> skip_group_SDLExposedServiceResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData);
5 -> skip_32_SDLExposedServiceResponse(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData)
end
end;
dg_read_field_def_SDLExposedServiceResponse(<<>>, 0, 0, _, F@_1, R1, R2, TrUserData) -> #'SDLExposedServiceResponse'{version = F@_1, tcp_ports = lists_reverse(R1, TrUserData), udp_ports = lists_reverse(R2, TrUserData)}.
d_field_SDLExposedServiceResponse_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_SDLExposedServiceResponse_version(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
d_field_SDLExposedServiceResponse_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
dfp_read_field_def_SDLExposedServiceResponse(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData).
d_field_SDLExposedServiceResponse_tcp_ports(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_SDLExposedServiceResponse_tcp_ports(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
d_field_SDLExposedServiceResponse_tcp_ports(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, Prev, F@_3, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
dfp_read_field_def_SDLExposedServiceResponse(RestF, 0, 0, F, F@_1, cons(NewFValue, Prev, TrUserData), F@_3, TrUserData).
d_pfield_SDLExposedServiceResponse_tcp_ports(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_pfield_SDLExposedServiceResponse_tcp_ports(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
d_pfield_SDLExposedServiceResponse_tcp_ports(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, E, F@_3, TrUserData) ->
Len = X bsl N + Acc,
<<PackedBytes:Len/binary, Rest2/binary>> = Rest,
NewSeq = d_packed_field_SDLExposedServiceResponse_tcp_ports(PackedBytes, 0, 0, F, E, TrUserData),
dfp_read_field_def_SDLExposedServiceResponse(Rest2, 0, 0, F, F@_1, NewSeq, F@_3, TrUserData).
d_packed_field_SDLExposedServiceResponse_tcp_ports(<<1:1, X:7, Rest/binary>>, N, Acc, F, AccSeq, TrUserData) when N < 57 -> d_packed_field_SDLExposedServiceResponse_tcp_ports(Rest, N + 7, X bsl N + Acc, F, AccSeq, TrUserData);
d_packed_field_SDLExposedServiceResponse_tcp_ports(<<0:1, X:7, Rest/binary>>, N, Acc, F, AccSeq, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
d_packed_field_SDLExposedServiceResponse_tcp_ports(RestF, 0, 0, F, [NewFValue | AccSeq], TrUserData);
d_packed_field_SDLExposedServiceResponse_tcp_ports(<<>>, 0, 0, _, AccSeq, _) -> AccSeq.
d_field_SDLExposedServiceResponse_udp_ports(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_SDLExposedServiceResponse_udp_ports(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
d_field_SDLExposedServiceResponse_udp_ports(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, Prev, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
dfp_read_field_def_SDLExposedServiceResponse(RestF, 0, 0, F, F@_1, F@_2, cons(NewFValue, Prev, TrUserData), TrUserData).
d_pfield_SDLExposedServiceResponse_udp_ports(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_pfield_SDLExposedServiceResponse_udp_ports(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
d_pfield_SDLExposedServiceResponse_udp_ports(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, E, TrUserData) ->
Len = X bsl N + Acc,
<<PackedBytes:Len/binary, Rest2/binary>> = Rest,
NewSeq = d_packed_field_SDLExposedServiceResponse_udp_ports(PackedBytes, 0, 0, F, E, TrUserData),
dfp_read_field_def_SDLExposedServiceResponse(Rest2, 0, 0, F, F@_1, F@_2, NewSeq, TrUserData).
d_packed_field_SDLExposedServiceResponse_udp_ports(<<1:1, X:7, Rest/binary>>, N, Acc, F, AccSeq, TrUserData) when N < 57 -> d_packed_field_SDLExposedServiceResponse_udp_ports(Rest, N + 7, X bsl N + Acc, F, AccSeq, TrUserData);
d_packed_field_SDLExposedServiceResponse_udp_ports(<<0:1, X:7, Rest/binary>>, N, Acc, F, AccSeq, TrUserData) ->
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
d_packed_field_SDLExposedServiceResponse_udp_ports(RestF, 0, 0, F, [NewFValue | AccSeq], TrUserData);
d_packed_field_SDLExposedServiceResponse_udp_ports(<<>>, 0, 0, _, AccSeq, _) -> AccSeq.
skip_varint_SDLExposedServiceResponse(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> skip_varint_SDLExposedServiceResponse(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
skip_varint_SDLExposedServiceResponse(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_SDLExposedServiceResponse(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
skip_length_delimited_SDLExposedServiceResponse(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> skip_length_delimited_SDLExposedServiceResponse(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
skip_length_delimited_SDLExposedServiceResponse(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) ->
Length = X bsl N + Acc,
<<_:Length/binary, Rest2/binary>> = Rest,
dfp_read_field_def_SDLExposedServiceResponse(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData).
skip_group_SDLExposedServiceResponse(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) ->
{_, Rest} = read_group(Bin, FNum),
dfp_read_field_def_SDLExposedServiceResponse(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData).
skip_32_SDLExposedServiceResponse(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_SDLExposedServiceResponse(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
skip_64_SDLExposedServiceResponse(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_SDLExposedServiceResponse(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
'decode_msg_SDLEvent.NatChanged'(Bin, TrUserData) -> 'dfp_read_field_def_SDLEvent.NatChanged'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(0, TrUserData), TrUserData). 'decode_msg_SDLEvent.NatChanged'(Bin, TrUserData) -> 'dfp_read_field_def_SDLEvent.NatChanged'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(0, TrUserData), TrUserData).
'dfp_read_field_def_SDLEvent.NatChanged'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_SDLEvent.NatChanged_mac'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); 'dfp_read_field_def_SDLEvent.NatChanged'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_SDLEvent.NatChanged_mac'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData);
@ -2358,6 +2571,40 @@ skip_64_SDLPolicyResponse(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@
'skip_64_SDLEvent.SendRegister'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> 'dfp_read_field_def_SDLEvent.SendRegister'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). 'skip_64_SDLEvent.SendRegister'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> 'dfp_read_field_def_SDLEvent.SendRegister'(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData).
'decode_msg_SDLEvent.ExposedServiceChanged'(Bin, TrUserData) -> 'dfp_read_field_def_SDLEvent.ExposedServiceChanged'(Bin, 0, 0, 0, TrUserData).
'dfp_read_field_def_SDLEvent.ExposedServiceChanged'(<<>>, 0, 0, _, _) -> #'SDLEvent.ExposedServiceChanged'{};
'dfp_read_field_def_SDLEvent.ExposedServiceChanged'(Other, Z1, Z2, F, TrUserData) -> 'dg_read_field_def_SDLEvent.ExposedServiceChanged'(Other, Z1, Z2, F, TrUserData).
'dg_read_field_def_SDLEvent.ExposedServiceChanged'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_SDLEvent.ExposedServiceChanged'(Rest, N + 7, X bsl N + Acc, F, TrUserData);
'dg_read_field_def_SDLEvent.ExposedServiceChanged'(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) ->
Key = X bsl N + Acc,
case Key band 7 of
0 -> 'skip_varint_SDLEvent.ExposedServiceChanged'(Rest, 0, 0, Key bsr 3, TrUserData);
1 -> 'skip_64_SDLEvent.ExposedServiceChanged'(Rest, 0, 0, Key bsr 3, TrUserData);
2 -> 'skip_length_delimited_SDLEvent.ExposedServiceChanged'(Rest, 0, 0, Key bsr 3, TrUserData);
3 -> 'skip_group_SDLEvent.ExposedServiceChanged'(Rest, 0, 0, Key bsr 3, TrUserData);
5 -> 'skip_32_SDLEvent.ExposedServiceChanged'(Rest, 0, 0, Key bsr 3, TrUserData)
end;
'dg_read_field_def_SDLEvent.ExposedServiceChanged'(<<>>, 0, 0, _, _) -> #'SDLEvent.ExposedServiceChanged'{}.
'skip_varint_SDLEvent.ExposedServiceChanged'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'skip_varint_SDLEvent.ExposedServiceChanged'(Rest, Z1, Z2, F, TrUserData);
'skip_varint_SDLEvent.ExposedServiceChanged'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_SDLEvent.ExposedServiceChanged'(Rest, Z1, Z2, F, TrUserData).
'skip_length_delimited_SDLEvent.ExposedServiceChanged'(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> 'skip_length_delimited_SDLEvent.ExposedServiceChanged'(Rest, N + 7, X bsl N + Acc, F, TrUserData);
'skip_length_delimited_SDLEvent.ExposedServiceChanged'(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) ->
Length = X bsl N + Acc,
<<_:Length/binary, Rest2/binary>> = Rest,
'dfp_read_field_def_SDLEvent.ExposedServiceChanged'(Rest2, 0, 0, F, TrUserData).
'skip_group_SDLEvent.ExposedServiceChanged'(Bin, _, Z2, FNum, TrUserData) ->
{_, Rest} = read_group(Bin, FNum),
'dfp_read_field_def_SDLEvent.ExposedServiceChanged'(Rest, 0, Z2, FNum, TrUserData).
'skip_32_SDLEvent.ExposedServiceChanged'(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_SDLEvent.ExposedServiceChanged'(Rest, Z1, Z2, F, TrUserData).
'skip_64_SDLEvent.ExposedServiceChanged'(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> 'dfp_read_field_def_SDLEvent.ExposedServiceChanged'(Rest, Z1, Z2, F, TrUserData).
'decode_msg_SDLEvent.NetworkShutdown'(Bin, TrUserData) -> 'dfp_read_field_def_SDLEvent.NetworkShutdown'(Bin, 0, 0, 0, id(<<>>, TrUserData), TrUserData). 'decode_msg_SDLEvent.NetworkShutdown'(Bin, TrUserData) -> 'dfp_read_field_def_SDLEvent.NetworkShutdown'(Bin, 0, 0, 0, id(<<>>, TrUserData), TrUserData).
'dfp_read_field_def_SDLEvent.NetworkShutdown'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_SDLEvent.NetworkShutdown_message'(Rest, Z1, Z2, F, F@_1, TrUserData); 'dfp_read_field_def_SDLEvent.NetworkShutdown'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> 'd_field_SDLEvent.NetworkShutdown_message'(Rest, Z1, Z2, F, F@_1, TrUserData);
@ -2407,6 +2654,7 @@ decode_msg_SDLEvent(Bin, TrUserData) -> dfp_read_field_def_SDLEvent(Bin, 0, 0, 0
dfp_read_field_def_SDLEvent(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_SDLEvent_nat_changed(Rest, Z1, Z2, F, F@_1, TrUserData); dfp_read_field_def_SDLEvent(<<10, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_SDLEvent_nat_changed(Rest, Z1, Z2, F, F@_1, TrUserData);
dfp_read_field_def_SDLEvent(<<18, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_SDLEvent_send_register(Rest, Z1, Z2, F, F@_1, TrUserData); dfp_read_field_def_SDLEvent(<<18, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_SDLEvent_send_register(Rest, Z1, Z2, F, F@_1, TrUserData);
dfp_read_field_def_SDLEvent(<<26, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_SDLEvent_shutdown(Rest, Z1, Z2, F, F@_1, TrUserData); dfp_read_field_def_SDLEvent(<<26, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_SDLEvent_shutdown(Rest, Z1, Z2, F, F@_1, TrUserData);
dfp_read_field_def_SDLEvent(<<34, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_SDLEvent_exposed_service_changed(Rest, Z1, Z2, F, F@_1, TrUserData);
dfp_read_field_def_SDLEvent(<<>>, 0, 0, _, F@_1, _) -> #'SDLEvent'{event = F@_1}; dfp_read_field_def_SDLEvent(<<>>, 0, 0, _, F@_1, _) -> #'SDLEvent'{event = F@_1};
dfp_read_field_def_SDLEvent(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_SDLEvent(Other, Z1, Z2, F, F@_1, TrUserData). dfp_read_field_def_SDLEvent(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_SDLEvent(Other, Z1, Z2, F, F@_1, TrUserData).
@ -2417,6 +2665,7 @@ dg_read_field_def_SDLEvent(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserDat
10 -> d_field_SDLEvent_nat_changed(Rest, 0, 0, 0, F@_1, TrUserData); 10 -> d_field_SDLEvent_nat_changed(Rest, 0, 0, 0, F@_1, TrUserData);
18 -> d_field_SDLEvent_send_register(Rest, 0, 0, 0, F@_1, TrUserData); 18 -> d_field_SDLEvent_send_register(Rest, 0, 0, 0, F@_1, TrUserData);
26 -> d_field_SDLEvent_shutdown(Rest, 0, 0, 0, F@_1, TrUserData); 26 -> d_field_SDLEvent_shutdown(Rest, 0, 0, 0, F@_1, TrUserData);
34 -> d_field_SDLEvent_exposed_service_changed(Rest, 0, 0, 0, F@_1, TrUserData);
_ -> _ ->
case Key band 7 of case Key band 7 of
0 -> skip_varint_SDLEvent(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); 0 -> skip_varint_SDLEvent(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
@ -2470,6 +2719,20 @@ d_field_SDLEvent_shutdown(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData
end, end,
TrUserData). TrUserData).
d_field_SDLEvent_exposed_service_changed(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_SDLEvent_exposed_service_changed(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData);
d_field_SDLEvent_exposed_service_changed(<<0:1, X:7, Rest/binary>>, N, Acc, F, Prev, TrUserData) ->
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bs:Len/binary, Rest2/binary>> = Rest, {id('decode_msg_SDLEvent.ExposedServiceChanged'(Bs, TrUserData), TrUserData), Rest2} end,
dfp_read_field_def_SDLEvent(RestF,
0,
0,
F,
case Prev of
undefined -> id({exposed_service_changed, NewFValue}, TrUserData);
{exposed_service_changed, MVPrev} -> id({exposed_service_changed, 'merge_msg_SDLEvent.ExposedServiceChanged'(MVPrev, NewFValue, TrUserData)}, TrUserData);
_ -> id({exposed_service_changed, NewFValue}, TrUserData)
end,
TrUserData).
skip_varint_SDLEvent(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_SDLEvent(Rest, Z1, Z2, F, F@_1, TrUserData); skip_varint_SDLEvent(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_SDLEvent(Rest, Z1, Z2, F, F@_1, TrUserData);
skip_varint_SDLEvent(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_SDLEvent(Rest, Z1, Z2, F, F@_1, TrUserData). skip_varint_SDLEvent(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_SDLEvent(Rest, Z1, Z2, F, F@_1, TrUserData).
@ -3225,8 +3488,11 @@ merge_msgs(Prev, New, MsgName, Opts) ->
'SDLArpResponse' -> merge_msg_SDLArpResponse(Prev, New, TrUserData); 'SDLArpResponse' -> merge_msg_SDLArpResponse(Prev, New, TrUserData);
'SDLPolicyRequest' -> merge_msg_SDLPolicyRequest(Prev, New, TrUserData); 'SDLPolicyRequest' -> merge_msg_SDLPolicyRequest(Prev, New, TrUserData);
'SDLPolicyResponse' -> merge_msg_SDLPolicyResponse(Prev, New, TrUserData); 'SDLPolicyResponse' -> merge_msg_SDLPolicyResponse(Prev, New, TrUserData);
'SDLExposedServiceRequest' -> merge_msg_SDLExposedServiceRequest(Prev, New, TrUserData);
'SDLExposedServiceResponse' -> merge_msg_SDLExposedServiceResponse(Prev, New, TrUserData);
'SDLEvent.NatChanged' -> 'merge_msg_SDLEvent.NatChanged'(Prev, New, TrUserData); 'SDLEvent.NatChanged' -> 'merge_msg_SDLEvent.NatChanged'(Prev, New, TrUserData);
'SDLEvent.SendRegister' -> 'merge_msg_SDLEvent.SendRegister'(Prev, New, TrUserData); 'SDLEvent.SendRegister' -> 'merge_msg_SDLEvent.SendRegister'(Prev, New, TrUserData);
'SDLEvent.ExposedServiceChanged' -> 'merge_msg_SDLEvent.ExposedServiceChanged'(Prev, New, TrUserData);
'SDLEvent.NetworkShutdown' -> 'merge_msg_SDLEvent.NetworkShutdown'(Prev, New, TrUserData); 'SDLEvent.NetworkShutdown' -> 'merge_msg_SDLEvent.NetworkShutdown'(Prev, New, TrUserData);
'SDLEvent' -> merge_msg_SDLEvent(Prev, New, TrUserData); 'SDLEvent' -> merge_msg_SDLEvent(Prev, New, TrUserData);
'SDLCommand.ExitNodeControl' -> 'merge_msg_SDLCommand.ExitNodeControl'(Prev, New, TrUserData); 'SDLCommand.ExitNodeControl' -> 'merge_msg_SDLCommand.ExitNodeControl'(Prev, New, TrUserData);
@ -3473,6 +3739,31 @@ merge_msg_SDLPolicyResponse(#'SDLPolicyResponse'{src_identity_id = PFsrc_identit
true -> NFrules true -> NFrules
end}. end}.
-compile({nowarn_unused_function,merge_msg_SDLExposedServiceRequest/3}).
merge_msg_SDLExposedServiceRequest(#'SDLExposedServiceRequest'{version = PFversion}, #'SDLExposedServiceRequest'{version = NFversion}, _) ->
#'SDLExposedServiceRequest'{version =
if NFversion =:= undefined -> PFversion;
true -> NFversion
end}.
-compile({nowarn_unused_function,merge_msg_SDLExposedServiceResponse/3}).
merge_msg_SDLExposedServiceResponse(#'SDLExposedServiceResponse'{version = PFversion, tcp_ports = PFtcp_ports, udp_ports = PFudp_ports}, #'SDLExposedServiceResponse'{version = NFversion, tcp_ports = NFtcp_ports, udp_ports = NFudp_ports},
TrUserData) ->
#'SDLExposedServiceResponse'{version =
if NFversion =:= undefined -> PFversion;
true -> NFversion
end,
tcp_ports =
if PFtcp_ports /= undefined, NFtcp_ports /= undefined -> 'erlang_++'(PFtcp_ports, NFtcp_ports, TrUserData);
PFtcp_ports == undefined -> NFtcp_ports;
NFtcp_ports == undefined -> PFtcp_ports
end,
udp_ports =
if PFudp_ports /= undefined, NFudp_ports /= undefined -> 'erlang_++'(PFudp_ports, NFudp_ports, TrUserData);
PFudp_ports == undefined -> NFudp_ports;
NFudp_ports == undefined -> PFudp_ports
end}.
-compile({nowarn_unused_function,'merge_msg_SDLEvent.NatChanged'/3}). -compile({nowarn_unused_function,'merge_msg_SDLEvent.NatChanged'/3}).
'merge_msg_SDLEvent.NatChanged'(#'SDLEvent.NatChanged'{mac = PFmac, ip = PFip}, #'SDLEvent.NatChanged'{mac = NFmac, ip = NFip}, _) -> 'merge_msg_SDLEvent.NatChanged'(#'SDLEvent.NatChanged'{mac = PFmac, ip = PFip}, #'SDLEvent.NatChanged'{mac = NFmac, ip = NFip}, _) ->
#'SDLEvent.NatChanged'{mac = #'SDLEvent.NatChanged'{mac =
@ -3509,6 +3800,9 @@ merge_msg_SDLPolicyResponse(#'SDLPolicyResponse'{src_identity_id = PFsrc_identit
NFv6_info == undefined -> PFv6_info NFv6_info == undefined -> PFv6_info
end}. end}.
-compile({nowarn_unused_function,'merge_msg_SDLEvent.ExposedServiceChanged'/3}).
'merge_msg_SDLEvent.ExposedServiceChanged'(_Prev, New, _TrUserData) -> New.
-compile({nowarn_unused_function,'merge_msg_SDLEvent.NetworkShutdown'/3}). -compile({nowarn_unused_function,'merge_msg_SDLEvent.NetworkShutdown'/3}).
'merge_msg_SDLEvent.NetworkShutdown'(#'SDLEvent.NetworkShutdown'{message = PFmessage}, #'SDLEvent.NetworkShutdown'{message = NFmessage}, _) -> 'merge_msg_SDLEvent.NetworkShutdown'(#'SDLEvent.NetworkShutdown'{message = PFmessage}, #'SDLEvent.NetworkShutdown'{message = NFmessage}, _) ->
#'SDLEvent.NetworkShutdown'{message = #'SDLEvent.NetworkShutdown'{message =
@ -3523,6 +3817,7 @@ merge_msg_SDLEvent(#'SDLEvent'{event = PFevent}, #'SDLEvent'{event = NFevent}, T
{{nat_changed, OPFevent}, {nat_changed, ONFevent}} -> {nat_changed, 'merge_msg_SDLEvent.NatChanged'(OPFevent, ONFevent, TrUserData)}; {{nat_changed, OPFevent}, {nat_changed, ONFevent}} -> {nat_changed, 'merge_msg_SDLEvent.NatChanged'(OPFevent, ONFevent, TrUserData)};
{{send_register, OPFevent}, {send_register, ONFevent}} -> {send_register, 'merge_msg_SDLEvent.SendRegister'(OPFevent, ONFevent, TrUserData)}; {{send_register, OPFevent}, {send_register, ONFevent}} -> {send_register, 'merge_msg_SDLEvent.SendRegister'(OPFevent, ONFevent, TrUserData)};
{{shutdown, OPFevent}, {shutdown, ONFevent}} -> {shutdown, 'merge_msg_SDLEvent.NetworkShutdown'(OPFevent, ONFevent, TrUserData)}; {{shutdown, OPFevent}, {shutdown, ONFevent}} -> {shutdown, 'merge_msg_SDLEvent.NetworkShutdown'(OPFevent, ONFevent, TrUserData)};
{{exposed_service_changed, OPFevent}, {exposed_service_changed, ONFevent}} -> {exposed_service_changed, 'merge_msg_SDLEvent.ExposedServiceChanged'(OPFevent, ONFevent, TrUserData)};
{_, undefined} -> PFevent; {_, undefined} -> PFevent;
_ -> NFevent _ -> NFevent
end}. end}.
@ -3731,8 +4026,11 @@ verify_msg(Msg, MsgName, Opts) ->
'SDLArpResponse' -> v_msg_SDLArpResponse(Msg, [MsgName], TrUserData); 'SDLArpResponse' -> v_msg_SDLArpResponse(Msg, [MsgName], TrUserData);
'SDLPolicyRequest' -> v_msg_SDLPolicyRequest(Msg, [MsgName], TrUserData); 'SDLPolicyRequest' -> v_msg_SDLPolicyRequest(Msg, [MsgName], TrUserData);
'SDLPolicyResponse' -> v_msg_SDLPolicyResponse(Msg, [MsgName], TrUserData); 'SDLPolicyResponse' -> v_msg_SDLPolicyResponse(Msg, [MsgName], TrUserData);
'SDLExposedServiceRequest' -> v_msg_SDLExposedServiceRequest(Msg, [MsgName], TrUserData);
'SDLExposedServiceResponse' -> v_msg_SDLExposedServiceResponse(Msg, [MsgName], TrUserData);
'SDLEvent.NatChanged' -> 'v_msg_SDLEvent.NatChanged'(Msg, [MsgName], TrUserData); 'SDLEvent.NatChanged' -> 'v_msg_SDLEvent.NatChanged'(Msg, [MsgName], TrUserData);
'SDLEvent.SendRegister' -> 'v_msg_SDLEvent.SendRegister'(Msg, [MsgName], TrUserData); 'SDLEvent.SendRegister' -> 'v_msg_SDLEvent.SendRegister'(Msg, [MsgName], TrUserData);
'SDLEvent.ExposedServiceChanged' -> 'v_msg_SDLEvent.ExposedServiceChanged'(Msg, [MsgName], TrUserData);
'SDLEvent.NetworkShutdown' -> 'v_msg_SDLEvent.NetworkShutdown'(Msg, [MsgName], TrUserData); 'SDLEvent.NetworkShutdown' -> 'v_msg_SDLEvent.NetworkShutdown'(Msg, [MsgName], TrUserData);
'SDLEvent' -> v_msg_SDLEvent(Msg, [MsgName], TrUserData); 'SDLEvent' -> v_msg_SDLEvent(Msg, [MsgName], TrUserData);
'SDLCommand.ExitNodeControl' -> 'v_msg_SDLCommand.ExitNodeControl'(Msg, [MsgName], TrUserData); 'SDLCommand.ExitNodeControl' -> 'v_msg_SDLCommand.ExitNodeControl'(Msg, [MsgName], TrUserData);
@ -3976,6 +4274,34 @@ v_msg_SDLPolicyResponse(#'SDLPolicyResponse'{src_identity_id = F1, dst_identity_
ok; ok;
v_msg_SDLPolicyResponse(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'SDLPolicyResponse'}, X, Path). v_msg_SDLPolicyResponse(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'SDLPolicyResponse'}, X, Path).
-compile({nowarn_unused_function,v_msg_SDLExposedServiceRequest/3}).
-dialyzer({nowarn_function,v_msg_SDLExposedServiceRequest/3}).
v_msg_SDLExposedServiceRequest(#'SDLExposedServiceRequest'{version = F1}, Path, TrUserData) ->
if F1 == undefined -> ok;
true -> v_type_uint32(F1, [version | Path], TrUserData)
end,
ok;
v_msg_SDLExposedServiceRequest(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'SDLExposedServiceRequest'}, X, Path).
-compile({nowarn_unused_function,v_msg_SDLExposedServiceResponse/3}).
-dialyzer({nowarn_function,v_msg_SDLExposedServiceResponse/3}).
v_msg_SDLExposedServiceResponse(#'SDLExposedServiceResponse'{version = F1, tcp_ports = F2, udp_ports = F3}, Path, TrUserData) ->
if F1 == undefined -> ok;
true -> v_type_uint32(F1, [version | Path], TrUserData)
end,
if is_list(F2) ->
_ = [v_type_uint32(Elem, [tcp_ports | Path], TrUserData) || Elem <- F2],
ok;
true -> mk_type_error({invalid_list_of, uint32}, F2, [tcp_ports | Path])
end,
if is_list(F3) ->
_ = [v_type_uint32(Elem, [udp_ports | Path], TrUserData) || Elem <- F3],
ok;
true -> mk_type_error({invalid_list_of, uint32}, F3, [udp_ports | Path])
end,
ok;
v_msg_SDLExposedServiceResponse(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'SDLExposedServiceResponse'}, X, Path).
-compile({nowarn_unused_function,'v_submsg_SDLEvent.NatChanged'/3}). -compile({nowarn_unused_function,'v_submsg_SDLEvent.NatChanged'/3}).
-dialyzer({nowarn_function,'v_submsg_SDLEvent.NatChanged'/3}). -dialyzer({nowarn_function,'v_submsg_SDLEvent.NatChanged'/3}).
'v_submsg_SDLEvent.NatChanged'(Msg, Path, TrUserData) -> 'v_msg_SDLEvent.NatChanged'(Msg, Path, TrUserData). 'v_submsg_SDLEvent.NatChanged'(Msg, Path, TrUserData) -> 'v_msg_SDLEvent.NatChanged'(Msg, Path, TrUserData).
@ -4017,6 +4343,15 @@ v_msg_SDLPolicyResponse(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'S
ok; ok;
'v_msg_SDLEvent.SendRegister'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'SDLEvent.SendRegister'}, X, Path). 'v_msg_SDLEvent.SendRegister'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'SDLEvent.SendRegister'}, X, Path).
-compile({nowarn_unused_function,'v_submsg_SDLEvent.ExposedServiceChanged'/3}).
-dialyzer({nowarn_function,'v_submsg_SDLEvent.ExposedServiceChanged'/3}).
'v_submsg_SDLEvent.ExposedServiceChanged'(Msg, Path, TrUserData) -> 'v_msg_SDLEvent.ExposedServiceChanged'(Msg, Path, TrUserData).
-compile({nowarn_unused_function,'v_msg_SDLEvent.ExposedServiceChanged'/3}).
-dialyzer({nowarn_function,'v_msg_SDLEvent.ExposedServiceChanged'/3}).
'v_msg_SDLEvent.ExposedServiceChanged'(#'SDLEvent.ExposedServiceChanged'{}, _Path, _) -> ok;
'v_msg_SDLEvent.ExposedServiceChanged'(X, Path, _TrUserData) -> mk_type_error({expected_msg, 'SDLEvent.ExposedServiceChanged'}, X, Path).
-compile({nowarn_unused_function,'v_submsg_SDLEvent.NetworkShutdown'/3}). -compile({nowarn_unused_function,'v_submsg_SDLEvent.NetworkShutdown'/3}).
-dialyzer({nowarn_function,'v_submsg_SDLEvent.NetworkShutdown'/3}). -dialyzer({nowarn_function,'v_submsg_SDLEvent.NetworkShutdown'/3}).
'v_submsg_SDLEvent.NetworkShutdown'(Msg, Path, TrUserData) -> 'v_msg_SDLEvent.NetworkShutdown'(Msg, Path, TrUserData). 'v_submsg_SDLEvent.NetworkShutdown'(Msg, Path, TrUserData) -> 'v_msg_SDLEvent.NetworkShutdown'(Msg, Path, TrUserData).
@ -4038,6 +4373,7 @@ v_msg_SDLEvent(#'SDLEvent'{event = F1}, Path, TrUserData) ->
{nat_changed, OF1} -> 'v_submsg_SDLEvent.NatChanged'(OF1, [nat_changed, event | Path], TrUserData); {nat_changed, OF1} -> 'v_submsg_SDLEvent.NatChanged'(OF1, [nat_changed, event | Path], TrUserData);
{send_register, OF1} -> 'v_submsg_SDLEvent.SendRegister'(OF1, [send_register, event | Path], TrUserData); {send_register, OF1} -> 'v_submsg_SDLEvent.SendRegister'(OF1, [send_register, event | Path], TrUserData);
{shutdown, OF1} -> 'v_submsg_SDLEvent.NetworkShutdown'(OF1, [shutdown, event | Path], TrUserData); {shutdown, OF1} -> 'v_submsg_SDLEvent.NetworkShutdown'(OF1, [shutdown, event | Path], TrUserData);
{exposed_service_changed, OF1} -> 'v_submsg_SDLEvent.ExposedServiceChanged'(OF1, [exposed_service_changed, event | Path], TrUserData);
_ -> mk_type_error(invalid_oneof, F1, [event | Path]) _ -> mk_type_error(invalid_oneof, F1, [event | Path])
end, end,
ok; ok;
@ -4342,6 +4678,11 @@ get_msg_defs() ->
#field{name = dst_identity_id, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, #field{name = dst_identity_id, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []},
#field{name = version, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, #field{name = version, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []},
#field{name = rules, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}]}, #field{name = rules, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}]},
{{msg, 'SDLExposedServiceRequest'}, [#field{name = version, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]},
{{msg, 'SDLExposedServiceResponse'},
[#field{name = version, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
#field{name = tcp_ports, fnum = 2, rnum = 3, type = uint32, occurrence = repeated, opts = [packed]},
#field{name = udp_ports, fnum = 3, rnum = 4, type = uint32, occurrence = repeated, opts = [packed]}]},
{{msg, 'SDLEvent.NatChanged'}, [#field{name = mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = ip, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}]}, {{msg, 'SDLEvent.NatChanged'}, [#field{name = mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = ip, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}]},
{{msg, 'SDLEvent.SendRegister'}, {{msg, 'SDLEvent.SendRegister'},
[#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, [#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []},
@ -4349,13 +4690,15 @@ get_msg_defs() ->
#field{name = nat_port, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, #field{name = nat_port, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []},
#field{name = nat_type, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []}, #field{name = nat_type, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []},
#field{name = v6_info, fnum = 5, rnum = 6, type = {msg, 'SDLV6Info'}, occurrence = optional, opts = []}]}, #field{name = v6_info, fnum = 5, rnum = 6, type = {msg, 'SDLV6Info'}, occurrence = optional, opts = []}]},
{{msg, 'SDLEvent.ExposedServiceChanged'}, []},
{{msg, 'SDLEvent.NetworkShutdown'}, [#field{name = message, fnum = 1, rnum = 2, type = string, occurrence = defaulty, opts = []}]}, {{msg, 'SDLEvent.NetworkShutdown'}, [#field{name = message, fnum = 1, rnum = 2, type = string, occurrence = defaulty, opts = []}]},
{{msg, 'SDLEvent'}, {{msg, 'SDLEvent'},
[#gpb_oneof{name = event, rnum = 2, [#gpb_oneof{name = event, rnum = 2,
fields = fields =
[#field{name = nat_changed, fnum = 1, rnum = 2, type = {msg, 'SDLEvent.NatChanged'}, occurrence = optional, opts = []}, [#field{name = nat_changed, fnum = 1, rnum = 2, type = {msg, 'SDLEvent.NatChanged'}, occurrence = optional, opts = []},
#field{name = send_register, fnum = 2, rnum = 2, type = {msg, 'SDLEvent.SendRegister'}, occurrence = optional, opts = []}, #field{name = send_register, fnum = 2, rnum = 2, type = {msg, 'SDLEvent.SendRegister'}, occurrence = optional, opts = []},
#field{name = shutdown, fnum = 3, rnum = 2, type = {msg, 'SDLEvent.NetworkShutdown'}, occurrence = optional, opts = []}], #field{name = shutdown, fnum = 3, rnum = 2, type = {msg, 'SDLEvent.NetworkShutdown'}, occurrence = optional, opts = []},
#field{name = exposed_service_changed, fnum = 4, rnum = 2, type = {msg, 'SDLEvent.ExposedServiceChanged'}, occurrence = optional, opts = []}],
opts = []}]}, opts = []}]},
{{msg, 'SDLCommand.ExitNodeControl'}, [#field{name = action, fnum = 1, rnum = 2, type = int32, occurrence = defaulty, opts = []}, #field{name = remark, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}]}, {{msg, 'SDLCommand.ExitNodeControl'}, [#field{name = action, fnum = 1, rnum = 2, type = int32, occurrence = defaulty, opts = []}, #field{name = remark, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}]},
{{msg, 'SDLCommand'}, {{msg, 'SDLCommand'},
@ -4418,8 +4761,11 @@ get_msg_names() ->
'SDLArpResponse', 'SDLArpResponse',
'SDLPolicyRequest', 'SDLPolicyRequest',
'SDLPolicyResponse', 'SDLPolicyResponse',
'SDLExposedServiceRequest',
'SDLExposedServiceResponse',
'SDLEvent.NatChanged', 'SDLEvent.NatChanged',
'SDLEvent.SendRegister', 'SDLEvent.SendRegister',
'SDLEvent.ExposedServiceChanged',
'SDLEvent.NetworkShutdown', 'SDLEvent.NetworkShutdown',
'SDLEvent', 'SDLEvent',
'SDLCommand.ExitNodeControl', 'SDLCommand.ExitNodeControl',
@ -4452,8 +4798,11 @@ get_msg_or_group_names() ->
'SDLArpResponse', 'SDLArpResponse',
'SDLPolicyRequest', 'SDLPolicyRequest',
'SDLPolicyResponse', 'SDLPolicyResponse',
'SDLExposedServiceRequest',
'SDLExposedServiceResponse',
'SDLEvent.NatChanged', 'SDLEvent.NatChanged',
'SDLEvent.SendRegister', 'SDLEvent.SendRegister',
'SDLEvent.ExposedServiceChanged',
'SDLEvent.NetworkShutdown', 'SDLEvent.NetworkShutdown',
'SDLEvent', 'SDLEvent',
'SDLCommand.ExitNodeControl', 'SDLCommand.ExitNodeControl',
@ -4533,6 +4882,11 @@ find_msg_def('SDLPolicyResponse') ->
#field{name = dst_identity_id, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}, #field{name = dst_identity_id, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []},
#field{name = version, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, #field{name = version, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []},
#field{name = rules, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}]; #field{name = rules, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}];
find_msg_def('SDLExposedServiceRequest') -> [#field{name = version, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}];
find_msg_def('SDLExposedServiceResponse') ->
[#field{name = version, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
#field{name = tcp_ports, fnum = 2, rnum = 3, type = uint32, occurrence = repeated, opts = [packed]},
#field{name = udp_ports, fnum = 3, rnum = 4, type = uint32, occurrence = repeated, opts = [packed]}];
find_msg_def('SDLEvent.NatChanged') -> [#field{name = mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = ip, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def('SDLEvent.NatChanged') -> [#field{name = mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, #field{name = ip, fnum = 2, rnum = 3, type = uint32, occurrence = defaulty, opts = []}];
find_msg_def('SDLEvent.SendRegister') -> find_msg_def('SDLEvent.SendRegister') ->
[#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []}, [#field{name = dst_mac, fnum = 1, rnum = 2, type = bytes, occurrence = defaulty, opts = []},
@ -4540,13 +4894,15 @@ find_msg_def('SDLEvent.SendRegister') ->
#field{name = nat_port, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}, #field{name = nat_port, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []},
#field{name = nat_type, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []}, #field{name = nat_type, fnum = 4, rnum = 5, type = uint32, occurrence = defaulty, opts = []},
#field{name = v6_info, fnum = 5, rnum = 6, type = {msg, 'SDLV6Info'}, occurrence = optional, opts = []}]; #field{name = v6_info, fnum = 5, rnum = 6, type = {msg, 'SDLV6Info'}, occurrence = optional, opts = []}];
find_msg_def('SDLEvent.ExposedServiceChanged') -> [];
find_msg_def('SDLEvent.NetworkShutdown') -> [#field{name = message, fnum = 1, rnum = 2, type = string, occurrence = defaulty, opts = []}]; find_msg_def('SDLEvent.NetworkShutdown') -> [#field{name = message, fnum = 1, rnum = 2, type = string, occurrence = defaulty, opts = []}];
find_msg_def('SDLEvent') -> find_msg_def('SDLEvent') ->
[#gpb_oneof{name = event, rnum = 2, [#gpb_oneof{name = event, rnum = 2,
fields = fields =
[#field{name = nat_changed, fnum = 1, rnum = 2, type = {msg, 'SDLEvent.NatChanged'}, occurrence = optional, opts = []}, [#field{name = nat_changed, fnum = 1, rnum = 2, type = {msg, 'SDLEvent.NatChanged'}, occurrence = optional, opts = []},
#field{name = send_register, fnum = 2, rnum = 2, type = {msg, 'SDLEvent.SendRegister'}, occurrence = optional, opts = []}, #field{name = send_register, fnum = 2, rnum = 2, type = {msg, 'SDLEvent.SendRegister'}, occurrence = optional, opts = []},
#field{name = shutdown, fnum = 3, rnum = 2, type = {msg, 'SDLEvent.NetworkShutdown'}, occurrence = optional, opts = []}], #field{name = shutdown, fnum = 3, rnum = 2, type = {msg, 'SDLEvent.NetworkShutdown'}, occurrence = optional, opts = []},
#field{name = exposed_service_changed, fnum = 4, rnum = 2, type = {msg, 'SDLEvent.ExposedServiceChanged'}, occurrence = optional, opts = []}],
opts = []}]; opts = []}];
find_msg_def('SDLCommand.ExitNodeControl') -> [#field{name = action, fnum = 1, rnum = 2, type = int32, occurrence = defaulty, opts = []}, #field{name = remark, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}]; find_msg_def('SDLCommand.ExitNodeControl') -> [#field{name = action, fnum = 1, rnum = 2, type = int32, occurrence = defaulty, opts = []}, #field{name = remark, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}];
find_msg_def('SDLCommand') -> find_msg_def('SDLCommand') ->
@ -4664,8 +5020,11 @@ fqbin_to_msg_name(<<"SDLArpRequest">>) -> 'SDLArpRequest';
fqbin_to_msg_name(<<"SDLArpResponse">>) -> 'SDLArpResponse'; fqbin_to_msg_name(<<"SDLArpResponse">>) -> 'SDLArpResponse';
fqbin_to_msg_name(<<"SDLPolicyRequest">>) -> 'SDLPolicyRequest'; fqbin_to_msg_name(<<"SDLPolicyRequest">>) -> 'SDLPolicyRequest';
fqbin_to_msg_name(<<"SDLPolicyResponse">>) -> 'SDLPolicyResponse'; fqbin_to_msg_name(<<"SDLPolicyResponse">>) -> 'SDLPolicyResponse';
fqbin_to_msg_name(<<"SDLExposedServiceRequest">>) -> 'SDLExposedServiceRequest';
fqbin_to_msg_name(<<"SDLExposedServiceResponse">>) -> 'SDLExposedServiceResponse';
fqbin_to_msg_name(<<"SDLEvent.NatChanged">>) -> 'SDLEvent.NatChanged'; fqbin_to_msg_name(<<"SDLEvent.NatChanged">>) -> 'SDLEvent.NatChanged';
fqbin_to_msg_name(<<"SDLEvent.SendRegister">>) -> 'SDLEvent.SendRegister'; fqbin_to_msg_name(<<"SDLEvent.SendRegister">>) -> 'SDLEvent.SendRegister';
fqbin_to_msg_name(<<"SDLEvent.ExposedServiceChanged">>) -> 'SDLEvent.ExposedServiceChanged';
fqbin_to_msg_name(<<"SDLEvent.NetworkShutdown">>) -> 'SDLEvent.NetworkShutdown'; fqbin_to_msg_name(<<"SDLEvent.NetworkShutdown">>) -> 'SDLEvent.NetworkShutdown';
fqbin_to_msg_name(<<"SDLEvent">>) -> 'SDLEvent'; fqbin_to_msg_name(<<"SDLEvent">>) -> 'SDLEvent';
fqbin_to_msg_name(<<"SDLCommand.ExitNodeControl">>) -> 'SDLCommand.ExitNodeControl'; fqbin_to_msg_name(<<"SDLCommand.ExitNodeControl">>) -> 'SDLCommand.ExitNodeControl';
@ -4695,8 +5054,11 @@ msg_name_to_fqbin('SDLArpRequest') -> <<"SDLArpRequest">>;
msg_name_to_fqbin('SDLArpResponse') -> <<"SDLArpResponse">>; msg_name_to_fqbin('SDLArpResponse') -> <<"SDLArpResponse">>;
msg_name_to_fqbin('SDLPolicyRequest') -> <<"SDLPolicyRequest">>; msg_name_to_fqbin('SDLPolicyRequest') -> <<"SDLPolicyRequest">>;
msg_name_to_fqbin('SDLPolicyResponse') -> <<"SDLPolicyResponse">>; msg_name_to_fqbin('SDLPolicyResponse') -> <<"SDLPolicyResponse">>;
msg_name_to_fqbin('SDLExposedServiceRequest') -> <<"SDLExposedServiceRequest">>;
msg_name_to_fqbin('SDLExposedServiceResponse') -> <<"SDLExposedServiceResponse">>;
msg_name_to_fqbin('SDLEvent.NatChanged') -> <<"SDLEvent.NatChanged">>; msg_name_to_fqbin('SDLEvent.NatChanged') -> <<"SDLEvent.NatChanged">>;
msg_name_to_fqbin('SDLEvent.SendRegister') -> <<"SDLEvent.SendRegister">>; msg_name_to_fqbin('SDLEvent.SendRegister') -> <<"SDLEvent.SendRegister">>;
msg_name_to_fqbin('SDLEvent.ExposedServiceChanged') -> <<"SDLEvent.ExposedServiceChanged">>;
msg_name_to_fqbin('SDLEvent.NetworkShutdown') -> <<"SDLEvent.NetworkShutdown">>; msg_name_to_fqbin('SDLEvent.NetworkShutdown') -> <<"SDLEvent.NetworkShutdown">>;
msg_name_to_fqbin('SDLEvent') -> <<"SDLEvent">>; msg_name_to_fqbin('SDLEvent') -> <<"SDLEvent">>;
msg_name_to_fqbin('SDLCommand.ExitNodeControl') -> <<"SDLCommand.ExitNodeControl">>; msg_name_to_fqbin('SDLCommand.ExitNodeControl') -> <<"SDLCommand.ExitNodeControl">>;
@ -4755,9 +5117,12 @@ get_msg_containment("sdlan") ->
'SDLCommandAck', 'SDLCommandAck',
'SDLData', 'SDLData',
'SDLEvent', 'SDLEvent',
'SDLEvent.ExposedServiceChanged',
'SDLEvent.NatChanged', 'SDLEvent.NatChanged',
'SDLEvent.NetworkShutdown', 'SDLEvent.NetworkShutdown',
'SDLEvent.SendRegister', 'SDLEvent.SendRegister',
'SDLExposedServiceRequest',
'SDLExposedServiceResponse',
'SDLPeerInfo', 'SDLPeerInfo',
'SDLPolicyRequest', 'SDLPolicyRequest',
'SDLPolicyResponse', 'SDLPolicyResponse',
@ -4801,7 +5166,9 @@ get_proto_by_msg_name_as_fqbin(<<"SDLRegister">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLEvent.SendRegister">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLEvent.SendRegister">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLStunRequest">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLStunRequest">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLPolicyRequest">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLPolicyRequest">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLExposedServiceRequest">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLEvent.NatChanged">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLEvent.NatChanged">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLEvent.ExposedServiceChanged">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLEvent">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLEvent">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLCommand">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLCommand">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLArpRequest">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLArpRequest">>) -> "sdlan";
@ -4809,6 +5176,7 @@ get_proto_by_msg_name_as_fqbin(<<"SDLWelcome">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLV6AssistProbe">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLV6AssistProbe">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLStunProbe">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLStunProbe">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLPolicyResponse">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLPolicyResponse">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLExposedServiceResponse">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLArpResponse">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLArpResponse">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLV6AssistProbeReply">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLV6AssistProbeReply">>) -> "sdlan";
get_proto_by_msg_name_as_fqbin(<<"SDLStunReply">>) -> "sdlan"; get_proto_by_msg_name_as_fqbin(<<"SDLStunReply">>) -> "sdlan";

View File

@ -36,6 +36,8 @@
client_id :: undefined | binary(), client_id :: undefined | binary(),
network_id = 0 :: integer(), network_id = 0 :: integer(),
access_token :: undefined | binary(),
%% id %% id
network_pid :: undefined | pid(), network_pid :: undefined | pid(),
%% mac地址 %% mac地址
@ -119,7 +121,7 @@ handle_frame(<<?PACKET_REGISTER_SUPER, Body/binary>>, Session = #session{status
%% network的对应关系 %% network的对应关系
case sdlan_network:get_pid(NetworkId) of case sdlan_network:get_pid(NetworkId) of
NetworkPid when is_pid(NetworkPid) -> NetworkPid when is_pid(NetworkPid) ->
{ok, Algorithm, Key, RegionId, SessionToken} = sdlan_network:attach(NetworkPid, self(), ClientId, Mac, Ip, HostName), {ok, Algorithm, Key, RegionId, SessionToken} = sdlan_network:attach(NetworkPid, self(), Transport, ClientId, Mac, Ip, HostName),
RsaPubKey = sdlan_cipher:rsa_pem_decode(PubKey), RsaPubKey = sdlan_cipher:rsa_pem_decode(PubKey),
RegisterSuperAck = sdlan_pb:encode_msg(#'SDLRegisterSuperAck'{ RegisterSuperAck = sdlan_pb:encode_msg(#'SDLRegisterSuperAck'{
algorithm = Algorithm, algorithm = Algorithm,
@ -150,6 +152,7 @@ handle_frame(<<?PACKET_REGISTER_SUPER, Body/binary>>, Session = #session{status
network_id = NetworkId, network_id = NetworkId,
network_pid = NetworkPid, network_pid = NetworkPid,
client_id = ClientId, client_id = ClientId,
access_token = AccessToken,
mac = Mac, mac = Mac,
ip = Ip, ip = Ip,
offline_cb = OfflineCb offline_cb = OfflineCb
@ -246,6 +249,34 @@ handle_frame(<<?PACKET_POLICY_REQUEST, Body/binary>>, Session = #session{status
end, end,
ok_result(Session, Packets); ok_result(Session, Packets);
handle_frame(<<?PACKET_EXPOSED_SERVICE_REQUEST, Body/binary>>,
Session = #session{status = registered, network_pid = NetworkPid, transport = Transport, client_id = ClientId, access_token = AccessToken, network_id = NetworkId}) when is_pid(NetworkPid) ->
Packets = maybe
#'SDLExposedServiceRequest'{version = Version} ?= sdlan_pb:decode_msg(Body, 'SDLExposedServiceRequest'),
Params = #{
<<"client_id">> => ClientId,
<<"network_id">> => NetworkId,
<<"access_token">> => AccessToken
},
case sdlan_api:node_acl(Params) of
{ok, #{<<"result">> := #{<<"tcp_ports">> := TcpPorts0, <<"udp_ports">> := UdpPorts0}}} ->
ExposedServiceResponsePkt = sdlan_pb:encode_msg(#'SDLExposedServiceResponse'{
version = Version,
tcp_ports = parse_ports(TcpPorts0),
udp_ports = parse_ports(UdpPorts0)
}),
[<<?PACKET_EXPOSED_SERVICE_RESPONSE, ExposedServiceResponsePkt/binary>>];
{error, Reason} ->
logger:debug("[sdlan_session] SDLExposedServiceRequest: ~p, transport: ~p, get error: ~p", [Transport, Reason]),
[]
end
else
_ ->
[]
end,
ok_result(Session, Packets);
%% %%
handle_frame(<<?PACKET_COMMAND_ACK, Body/binary>>, Session = #session{status = registered, pending_commands = PendingCommands, transport = Transport}) -> handle_frame(<<?PACKET_COMMAND_ACK, Body/binary>>, Session = #session{status = registered, pending_commands = PendingCommands, transport = Transport}) ->
logger:debug("[sdlan_session] transport: ~p command_ack", [Transport]), logger:debug("[sdlan_session] transport: ~p command_ack", [Transport]),
@ -256,7 +287,7 @@ handle_frame(<<?PACKET_COMMAND_ACK, Body/binary>>, Session = #session{status = r
{{Ref, ReceiverPid}, RestPendingCommands} ?= maps:take(PktId, PendingCommands), {{Ref, ReceiverPid}, RestPendingCommands} ?= maps:take(PktId, PendingCommands),
case is_process_alive(ReceiverPid) of case is_process_alive(ReceiverPid) of
true -> true ->
ReceiverPid ! {quic_command_ack, Ref, CommandAck}; ReceiverPid ! {command_ack, Ref, CommandAck};
false -> false ->
ok ok
end, end,
@ -377,3 +408,6 @@ heartbeat_ms(HeartbeatSec) when is_integer(HeartbeatSec), HeartbeatSec > 0 ->
HeartbeatSec * 1000; HeartbeatSec * 1000;
heartbeat_ms(_) -> heartbeat_ms(_) ->
?PING_TICKER. ?PING_TICKER.
parse_ports(Ports0) when is_list(Ports0) ->
lists:filter(fun(P0) -> is_integer(P0) andalso (P0 > 0 andalso P0 < 65535) end, Ports0).

View File

@ -76,12 +76,12 @@ init([]) ->
}, },
#{ #{
id => sdlan_quic_channel_sup, id => sdlan_quic_transport_sup,
start => {sdlan_quic_channel_sup, start_link, []}, start => {sdlan_quic_transport_sup, start_link, []},
restart => permanent, restart => permanent,
shutdown => 2000, shutdown => 2000,
type => supervisor, type => supervisor,
modules => ['sdlan_quic_channel_sup'] modules => ['sdlan_quic_transport_sup']
}, },
#{ #{

10
src/sdlan_transport.erl Normal file
View File

@ -0,0 +1,10 @@
%%%-------------------------------------------------------------------
%%% @doc Behaviour for client transport modules.
%%% @end
%%%-------------------------------------------------------------------
-module(sdlan_transport).
-callback send_event(Pid :: pid(), Event :: binary()) -> ok.
-callback command(Pid :: pid(), Ref :: reference(), ReceiverPid :: pid(), SubCommand :: {Tag :: atom(), SubCommand :: any()}) -> ok.
-callback stop(Pid :: pid(), Reason :: term()) -> ok.
-callback debug_info(Pid :: pid()) -> map().

View File

@ -12,10 +12,14 @@
-behaviour(gen_statem). -behaviour(gen_statem).
-behaviour(ranch_protocol). -behaviour(ranch_protocol).
-behaviour(sdlan_transport).
%% Ranch protocol callback %% Ranch protocol callback
-export([start_link/4]). -export([start_link/4]).
%% API
-export([send_event/2, command/4, stop/2, debug_info/1]).
%% gen_statem callbacks %% gen_statem callbacks
-export([init/1, handle_event/4, terminate/3, code_change/4, callback_mode/0]). -export([init/1, handle_event/4, terminate/3, code_change/4, callback_mode/0]).
@ -36,6 +40,22 @@
%%% Ranch protocol callback %%% Ranch protocol callback
%%%=================================================================== %%%===================================================================
-spec send_event(Pid :: pid(), Event :: binary()) -> ok.
send_event(Pid, ProtobufEvent) when is_pid(Pid), is_binary(ProtobufEvent) ->
gen_statem:cast(Pid, {send_event, ProtobufEvent}).
-spec command(Pid :: pid(), Ref :: reference(), ReceiverPid :: pid(), {Tag :: atom(), SubCommand :: any()}) -> ok.
command(Pid, Ref, ReceiverPid, SubCommand) when is_pid(Pid), is_pid(ReceiverPid) ->
gen_statem:cast(Pid, {command, Ref, ReceiverPid, SubCommand}).
-spec stop(Pid :: pid(), Reason :: term()) -> ok.
stop(Pid, Reason) when is_pid(Pid) ->
gen_statem:stop(Pid, Reason, 2000).
-spec debug_info(Pid :: pid()) -> map().
debug_info(Pid) when is_pid(Pid) ->
gen_statem:call(Pid, debug_info).
-spec start_link(Ref :: ranch:ref(), Socket :: inet:socket(), Transport :: module(), -spec start_link(Ref :: ranch:ref(), Socket :: inet:socket(), Transport :: module(),
Limits :: proplists:proplist()) -> gen_statem:start_ret(). Limits :: proplists:proplist()) -> gen_statem:start_ret().
start_link(Ref, Socket, Transport, Limits) -> start_link(Ref, Socket, Transport, Limits) ->

View File

@ -2,11 +2,10 @@
rm -rf tmp rm -rf tmp
mkdir tmp mkdir tmp
cp proto/sdlan.proto tmp/sdlan_pb.proto cp proto/sdlan.proto tmp/sdlan_pb.proto
cd tmp cd tmp
protoc sdlan_pb.proto --swift_out=. protoc sdlan_pb.proto --swift_out=.
cp sdlan_pb.pb.swift SDLMessage.pb.swift cp sdlan_pb.pb.swift SDLMessage.pb.swift
cp SDLMessage.pb.swift /usr/local/code/macos/punchnet/Tun/Punchnet/Protobuf/ cp SDLMessage.pb.swift /usr/local/code/macos/punchnet/Tun/Protobuf/