fix
This commit is contained in:
parent
eb35558fe7
commit
75fa239ae9
@ -33,9 +33,10 @@
|
||||
|
||||
%% 定义事件信息
|
||||
-define(PACKET_EVENT_KNOWN_IP, 16#01).
|
||||
-define(PACKET_EVENT_DROP_IPS, 16#02).
|
||||
-define(PACKET_EVENT_DROP_MACS, 16#02).
|
||||
-define(PACKET_EVENT_NAT_CHANGED, 16#03).
|
||||
-define(PACKET_EVENT_SEND_REGISTER, 16#04).
|
||||
-define(PACKET_EVENT_REFRESH_AUTH, 16#05).
|
||||
|
||||
%% 网络关闭
|
||||
-define(PACKET_EVENT_NETWORK_SHUTDOWN, 16#FF).
|
||||
|
||||
@ -60,8 +60,9 @@
|
||||
-define('SDL_QUERY_INFO_PB_H', true).
|
||||
-record(sdl_query_info,
|
||||
{network_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits
|
||||
dst_mac = <<>> :: iodata() | undefined, % = 2, optional
|
||||
session_token = <<>> :: iodata() | undefined % = 3, optional
|
||||
src_mac = <<>> :: iodata() | undefined, % = 2, optional
|
||||
dst_mac = <<>> :: iodata() | undefined, % = 3, optional
|
||||
session_token = <<>> :: iodata() | undefined % = 4, optional
|
||||
}).
|
||||
-endif.
|
||||
|
||||
@ -84,6 +85,21 @@
|
||||
}).
|
||||
-endif.
|
||||
|
||||
-ifndef('SDL_DROP_MACS_EVENT_PB_H').
|
||||
-define('SDL_DROP_MACS_EVENT_PB_H', true).
|
||||
-record(sdl_drop_macs_event,
|
||||
{network_id = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits
|
||||
macs = [] :: [iodata()] | undefined % = 2, repeated
|
||||
}).
|
||||
-endif.
|
||||
|
||||
-ifndef('SDL_REFRESH_AUTH_EVENT_PB_H').
|
||||
-define('SDL_REFRESH_AUTH_EVENT_PB_H', true).
|
||||
-record(sdl_refresh_auth_event,
|
||||
{network_id = 0 :: non_neg_integer() | undefined % = 1, optional, 32 bits
|
||||
}).
|
||||
-endif.
|
||||
|
||||
-ifndef('SDL_SEND_REGISTER_EVENT_PB_H').
|
||||
-define('SDL_SEND_REGISTER_EVENT_PB_H', true).
|
||||
-record(sdl_send_register_event,
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
|
||||
%% API
|
||||
-export([start_link/2]).
|
||||
-export([get_name/1, get_pid/1, lookup_pid/1, attach/6, peer_info/3, unregister/3, debug_info/1, get_network_id/1, arp_query/2]).
|
||||
-export([get_name/1, get_pid/1, lookup_pid/1, attach/6, peer_info/6, unregister/3, debug_info/1, get_network_id/1, arp_query/2]).
|
||||
-export([forward/5, update_hole/6, disable_client/2, dropout_client/2]).
|
||||
-export([test_event/1]).
|
||||
|
||||
@ -107,10 +107,9 @@ arp_query(Pid, TargetIp) when is_pid(Pid), is_integer(TargetIp) ->
|
||||
unregister(Pid, ClientId, Mac) when is_pid(Pid), is_binary(ClientId), is_binary(Mac) ->
|
||||
gen_server:cast(Pid, {unregister, ClientId, Mac}).
|
||||
|
||||
-spec peer_info(Pid :: pid(), SrcMac :: binary(), DstMac :: binary()) ->
|
||||
error | {ok, {NatPeer :: {Ip :: inet:ip4_address(), Port :: integer()}, NatType :: integer()}, V6Info :: undefined | #sdl_v6_info{}}.
|
||||
peer_info(Pid, SrcMac, DstMac) when is_pid(Pid), is_binary(SrcMac), is_binary(DstMac) ->
|
||||
gen_server:call(Pid, {peer_info, SrcMac, DstMac}).
|
||||
-spec peer_info(Pid :: pid(), Sock :: inet:socket(), SrcIp :: inet:ip4_address(), SrcPort :: integer(), PacketId :: integer(), Query :: #sdl_query_info{}) -> no_return().
|
||||
peer_info(Pid, Sock, ClientIp, ClientPort, PacketId, Query) when is_pid(Pid) ->
|
||||
gen_server:cast(Pid, {peer_info, Sock, ClientIp, ClientPort, PacketId, Query}).
|
||||
|
||||
-spec forward(pid(), Sock :: any(), SrcMac :: binary(), DstMac :: binary(), Packet :: binary()) -> no_return().
|
||||
forward(Pid, Sock, SrcMac, DstMac, Packet) when is_pid(Pid), is_binary(SrcMac), is_binary(DstMac), is_binary(Packet) ->
|
||||
@ -235,28 +234,7 @@ handle_call({arp_query, TargetIp}, _From, State = #state{endpoints = Endpoints})
|
||||
{reply, error, State}
|
||||
end;
|
||||
|
||||
%% 网络存在的nat_peer信息
|
||||
handle_call({peer_info, SrcMac, DstMac}, _From, State = #state{endpoints = Endpoints}) ->
|
||||
case maps:find(DstMac, Endpoints) of
|
||||
{ok, #endpoint{hole = #hole{peer = DstNatPeer, nat_type = DstNatType}, v6_info = DstV6Info}} ->
|
||||
%% 让目标服务器发送sendRegister事件(2024-06-25 新增,提高打洞的成功率)
|
||||
maybe
|
||||
{ok, #endpoint{hole = #hole{peer = {SrcNatIp, SrcNatPort}, nat_type = NatType}, v6_info = SrcV6Info}} ?= maps:find(SrcMac, Endpoints),
|
||||
Event = sdlan_pb:encode_msg(#sdl_send_register_event {
|
||||
dst_mac = SrcMac,
|
||||
nat_ip = sdlan_ipaddr:ipv4_to_int(SrcNatIp),
|
||||
nat_type = NatType,
|
||||
nat_port = SrcNatPort,
|
||||
v6_info = SrcV6Info
|
||||
}),
|
||||
|
||||
EventPacket = <<?PACKET_EVENT, ?PACKET_EVENT_SEND_REGISTER, Event/binary>>,
|
||||
sdlan_stun_pool:send_packet(DstNatPeer, EventPacket)
|
||||
end,
|
||||
{reply, {ok, {DstNatPeer, DstNatType}, DstV6Info}, State};
|
||||
_ ->
|
||||
{reply, error, State}
|
||||
end;
|
||||
|
||||
handle_call(debug_info, _From, State = #state{network_id = NetworkId, ipaddr = IpAddr, mask_len = MaskLen, endpoints = Endpoints}) ->
|
||||
Reply = #{
|
||||
@ -273,6 +251,32 @@ handle_call(debug_info, _From, State = #state{network_id = NetworkId, ipaddr = I
|
||||
{noreply, NewState :: #state{}} |
|
||||
{noreply, NewState :: #state{}, timeout() | hibernate} |
|
||||
{stop, Reason :: term(), NewState :: #state{}}).
|
||||
|
||||
%% 网络存在的nat_peer信息
|
||||
%% TODO SrcMac不存在的时候需要重新校验
|
||||
handle_cast({peer_info, Sock, ClientIp, ClientPort, PacketId, #sdl_query_info{src_mac = SrcMac, dst_mac = DstMac}}, State = #state{endpoints = Endpoints}) ->
|
||||
case maps:find(DstMac, Endpoints) of
|
||||
{ok, #endpoint{hole = #hole{peer = DstNatPeer = {{Ip0, Ip1, Ip2, Ip3}, DstNatPort}, nat_type = DstNatType}, v6_info = DstV6Info}} ->
|
||||
%% 让目标服务器发送sendRegister事件(2024-06-25 新增,提高打洞的成功率)
|
||||
maybe_preload_hole(DstNatPeer, maps:get(SrcMac, Endpoints, undefined)),
|
||||
|
||||
PeerInfo = sdlan_pb:encode_msg(#sdl_peer_info{
|
||||
dst_mac = DstMac,
|
||||
v4_info = #sdl_v4_info {
|
||||
port = DstNatPort,
|
||||
v4 = <<Ip0, Ip1, Ip2, Ip3>>,
|
||||
nat_type = DstNatType
|
||||
},
|
||||
v6_info = DstV6Info
|
||||
}),
|
||||
PeerPacket = <<?PACKET_PEER_INFO, PacketId:32, PeerInfo/binary>>,
|
||||
gen_udp:send(Sock, ClientIp, ClientPort, PeerPacket);
|
||||
_ ->
|
||||
EmptyPeerPacket = <<?PACKET_PEER_INFO, PacketId:32>>,
|
||||
gen_udp:send(Sock, ClientIp, ClientPort, EmptyPeerPacket)
|
||||
end,
|
||||
{noreply, State};
|
||||
|
||||
%% 网络数据转发, mac地址单播
|
||||
handle_cast({forward, Sock, SrcMac, DstMac, Packet}, State = #state{network_id = NetworkId, endpoints = Endpoints, throttle_key = ThrottleKey, forward_bytes = ForwardBytes})
|
||||
when is_map_key(SrcMac, Endpoints), is_map_key(DstMac, Endpoints) ->
|
||||
@ -336,13 +340,14 @@ handle_cast({unregister, _ClientId, Mac}, State = #state{network_id = NetworkId,
|
||||
{noreply, State#state{endpoints = maps:remove(Mac, Endpoints)}};
|
||||
|
||||
%% 需要判断,client是属于当前网络的
|
||||
%% TODO 被拒绝的endpoint需要通知其重新验证
|
||||
handle_cast({update_hole, ClientId, Mac, Peer, NatType, V6Info}, State = #state{endpoints = Endpoints}) ->
|
||||
%% 被拒绝的endpoint需要通知其重新验证
|
||||
handle_cast({update_hole, ClientId, Mac, Peer, NatType, V6Info}, State = #state{network_id = NetworkId, endpoints = Endpoints}) ->
|
||||
case maps:find(Mac, Endpoints) of
|
||||
{ok, Endpoint0 = #endpoint{ip = Ip, client_id = ClientId0, hole = OldHole}} when ClientId =:= ClientId0 ->
|
||||
NHole = #hole{peer = Peer, nat_type = NatType},
|
||||
maybe
|
||||
true ?= same_hole(OldHole, NHole),
|
||||
%% hole changed -> notify peers
|
||||
true ?= not same_hole(OldHole, NHole),
|
||||
NatChangedEvent = sdlan_pb:encode_msg(#sdl_nat_changed_event{
|
||||
mac = Mac,
|
||||
ip = Ip
|
||||
@ -354,6 +359,13 @@ handle_cast({update_hole, ClientId, Mac, Peer, NatType, V6Info}, State = #state{
|
||||
end,
|
||||
{noreply, State#state{endpoints = maps:put(Mac, Endpoint0#endpoint{hole = NHole, v6_info = V6Info, last_seen = erlang:monotonic_time(second)}, Endpoints)}};
|
||||
_ ->
|
||||
%% 客户端需要重新校验
|
||||
RefreshAuthEvent = sdlan_pb:encode_msg(#sdl_refresh_auth_event{
|
||||
network_id = NetworkId
|
||||
}),
|
||||
EventPacket = <<?PACKET_EVENT, ?PACKET_EVENT_REFRESH_AUTH, RefreshAuthEvent/binary>>,
|
||||
sdlan_stun_pool:send_packet(Peer, EventPacket),
|
||||
|
||||
{noreply, State}
|
||||
end.
|
||||
|
||||
@ -368,11 +380,8 @@ handle_info({timeout, _, flow_report_ticker}, State = #state{network_id = Networ
|
||||
catch sdlan_api:network_forward_report(NetworkId, ForwardBytes),
|
||||
{noreply, State#state{forward_bytes = 0}};
|
||||
|
||||
handle_info({timeout, _, endpoint_gc}, State = #state{endpoints = Endpoints}) ->
|
||||
erlang:start_timer(?ENDPOINT_GC_INTERVAL, self(), endpoint_gc),
|
||||
|
||||
handle_info({timeout, _, endpoint_gc}, State = #state{network_id = NetworkId, endpoints = Endpoints}) ->
|
||||
Now = erlang:monotonic_time(second),
|
||||
|
||||
{AliveEndpoints, ExpiredEndpoints} = maps:fold(fun(Mac, Ep = #endpoint{last_seen = Last}, {Alive, Expired}) ->
|
||||
case Now - Last =< ?ENDPOINT_GC_INTERVAL of
|
||||
true ->
|
||||
@ -383,16 +392,19 @@ handle_info({timeout, _, endpoint_gc}, State = #state{endpoints = Endpoints}) ->
|
||||
end,
|
||||
{#{}, #{}}, Endpoints),
|
||||
|
||||
ExpiredIps = lists:map(fun(#endpoint{ip = Ip0}) -> Ip0 end, maps:values(ExpiredEndpoints)),
|
||||
%% 通知活着的Endpoints
|
||||
NatChangedEvent = sdlan_pb:encode_msg(#sdl_nat_changed_event{
|
||||
mac = Mac,
|
||||
ip = Ip
|
||||
maybe
|
||||
true ?= maps:size(ExpiredEndpoints) > 0,
|
||||
DropMacsEvent = sdlan_pb:encode_msg(#sdl_drop_macs_event {
|
||||
network_id = NetworkId,
|
||||
macs = maps:keys(ExpiredEndpoints)
|
||||
}),
|
||||
EventPacket = <<?PACKET_EVENT, ?PACKET_EVENT_NAT_CHANGED, NatChangedEvent/binary>>,
|
||||
EventPacket = <<?PACKET_EVENT, ?PACKET_EVENT_DROP_MACS, DropMacsEvent/binary>>,
|
||||
|
||||
EndpointPeers = endpoint_peers([Mac], Endpoints),
|
||||
sdlan_stun_pool:send_packets(EndpointPeers, EventPacket),
|
||||
EndpointPeers = endpoint_peers([], AliveEndpoints),
|
||||
sdlan_stun_pool:send_packets(EndpointPeers, EventPacket)
|
||||
end,
|
||||
erlang:start_timer(?ENDPOINT_GC_INTERVAL, self(), endpoint_gc),
|
||||
|
||||
{noreply, State#state{endpoints = AliveEndpoints}}.
|
||||
|
||||
@ -425,6 +437,21 @@ code_change(_OldVsn, State = #state{}, _Extra) ->
|
||||
%%%===================================================================
|
||||
%%% Internal functions
|
||||
%%%===================================================================
|
||||
|
||||
-spec maybe_preload_hole(DstNatPeer :: {Ip :: inet:ip4_address(), Port :: integer()}, any()) -> no_return().
|
||||
maybe_preload_hole(DstNatPeer, #endpoint{mac = SrcMac, hole = #hole{peer = {SrcNatIp, SrcNatPort}, nat_type = NatType}, v6_info = SrcV6Info}) ->
|
||||
Event = sdlan_pb:encode_msg(#sdl_send_register_event {
|
||||
dst_mac = SrcMac,
|
||||
nat_ip = sdlan_ipaddr:ipv4_to_int(SrcNatIp),
|
||||
nat_type = NatType,
|
||||
nat_port = SrcNatPort,
|
||||
v6_info = SrcV6Info
|
||||
}),
|
||||
EventPacket = <<?PACKET_EVENT, ?PACKET_EVENT_SEND_REGISTER, Event/binary>>,
|
||||
sdlan_stun_pool:send_packet(DstNatPeer, EventPacket);
|
||||
maybe_preload_hole(_, _) ->
|
||||
ok.
|
||||
|
||||
-spec limiting_check(ThrottleKey :: any()) -> pass | denied.
|
||||
limiting_check(ThrottleKey) ->
|
||||
case throttle:check(sdlan_network, ThrottleKey) of
|
||||
|
||||
@ -71,6 +71,10 @@
|
||||
|
||||
-type sdl_nat_changed_event() :: #sdl_nat_changed_event{}.
|
||||
|
||||
-type sdl_drop_macs_event() :: #sdl_drop_macs_event{}.
|
||||
|
||||
-type sdl_refresh_auth_event() :: #sdl_refresh_auth_event{}.
|
||||
|
||||
-type sdl_send_register_event() :: #sdl_send_register_event{}.
|
||||
|
||||
-type sdl_network_shutdown_event() :: #sdl_network_shutdown_event{}.
|
||||
@ -91,9 +95,9 @@
|
||||
|
||||
-type sdl_arp_response() :: #sdl_arp_response{}.
|
||||
|
||||
-export_type(['sdl_v4_info'/0, 'sdl_v6_info'/0, 'sdl_register_super'/0, 'sdl_register_super_ack'/0, 'sdl_register_super_nak'/0, 'sdl_query_info'/0, 'sdl_peer_info'/0, 'sdl_nat_changed_event'/0, 'sdl_send_register_event'/0, 'sdl_network_shutdown_event'/0, 'sdl_stun_request'/0, 'sdl_data'/0, 'sdl_register'/0, 'sdl_register_ack'/0, 'sdl_stun_probe'/0, 'sdl_stun_probe_reply'/0, 'sdl_arp_request'/0, 'sdl_arp_response'/0]).
|
||||
-type '$msg_name'() :: sdl_v4_info | sdl_v6_info | sdl_register_super | sdl_register_super_ack | sdl_register_super_nak | sdl_query_info | sdl_peer_info | sdl_nat_changed_event | sdl_send_register_event | sdl_network_shutdown_event | sdl_stun_request | sdl_data | sdl_register | sdl_register_ack | sdl_stun_probe | sdl_stun_probe_reply | sdl_arp_request | sdl_arp_response.
|
||||
-type '$msg'() :: sdl_v4_info() | sdl_v6_info() | sdl_register_super() | sdl_register_super_ack() | sdl_register_super_nak() | sdl_query_info() | sdl_peer_info() | sdl_nat_changed_event() | sdl_send_register_event() | sdl_network_shutdown_event() | sdl_stun_request() | sdl_data() | sdl_register() | sdl_register_ack() | sdl_stun_probe() | sdl_stun_probe_reply() | sdl_arp_request() | sdl_arp_response().
|
||||
-export_type(['sdl_v4_info'/0, 'sdl_v6_info'/0, 'sdl_register_super'/0, 'sdl_register_super_ack'/0, 'sdl_register_super_nak'/0, 'sdl_query_info'/0, 'sdl_peer_info'/0, 'sdl_nat_changed_event'/0, 'sdl_drop_macs_event'/0, 'sdl_refresh_auth_event'/0, 'sdl_send_register_event'/0, 'sdl_network_shutdown_event'/0, 'sdl_stun_request'/0, 'sdl_data'/0, 'sdl_register'/0, 'sdl_register_ack'/0, 'sdl_stun_probe'/0, 'sdl_stun_probe_reply'/0, 'sdl_arp_request'/0, 'sdl_arp_response'/0]).
|
||||
-type '$msg_name'() :: sdl_v4_info | sdl_v6_info | sdl_register_super | sdl_register_super_ack | sdl_register_super_nak | sdl_query_info | sdl_peer_info | sdl_nat_changed_event | sdl_drop_macs_event | sdl_refresh_auth_event | sdl_send_register_event | sdl_network_shutdown_event | sdl_stun_request | sdl_data | sdl_register | sdl_register_ack | sdl_stun_probe | sdl_stun_probe_reply | sdl_arp_request | sdl_arp_response.
|
||||
-type '$msg'() :: sdl_v4_info() | sdl_v6_info() | sdl_register_super() | sdl_register_super_ack() | sdl_register_super_nak() | sdl_query_info() | sdl_peer_info() | sdl_nat_changed_event() | sdl_drop_macs_event() | sdl_refresh_auth_event() | sdl_send_register_event() | sdl_network_shutdown_event() | sdl_stun_request() | sdl_data() | sdl_register() | sdl_register_ack() | sdl_stun_probe() | sdl_stun_probe_reply() | sdl_arp_request() | sdl_arp_response().
|
||||
-export_type(['$msg_name'/0, '$msg'/0]).
|
||||
|
||||
-if(?OTP_RELEASE >= 24).
|
||||
@ -128,6 +132,8 @@ encode_msg(Msg, MsgName, Opts) ->
|
||||
sdl_query_info -> encode_msg_sdl_query_info(id(Msg, TrUserData), TrUserData);
|
||||
sdl_peer_info -> encode_msg_sdl_peer_info(id(Msg, TrUserData), TrUserData);
|
||||
sdl_nat_changed_event -> encode_msg_sdl_nat_changed_event(id(Msg, TrUserData), TrUserData);
|
||||
sdl_drop_macs_event -> encode_msg_sdl_drop_macs_event(id(Msg, TrUserData), TrUserData);
|
||||
sdl_refresh_auth_event -> encode_msg_sdl_refresh_auth_event(id(Msg, TrUserData), TrUserData);
|
||||
sdl_send_register_event -> encode_msg_sdl_send_register_event(id(Msg, TrUserData), TrUserData);
|
||||
sdl_network_shutdown_event -> encode_msg_sdl_network_shutdown_event(id(Msg, TrUserData), TrUserData);
|
||||
sdl_stun_request -> encode_msg_sdl_stun_request(id(Msg, TrUserData), TrUserData);
|
||||
@ -341,7 +347,7 @@ encode_msg_sdl_register_super_nak(#sdl_register_super_nak{error_code = F1, error
|
||||
encode_msg_sdl_query_info(Msg, TrUserData) -> encode_msg_sdl_query_info(Msg, <<>>, TrUserData).
|
||||
|
||||
|
||||
encode_msg_sdl_query_info(#sdl_query_info{network_id = F1, dst_mac = F2, session_token = F3}, Bin, TrUserData) ->
|
||||
encode_msg_sdl_query_info(#sdl_query_info{network_id = F1, src_mac = F2, dst_mac = F3, session_token = F4}, Bin, TrUserData) ->
|
||||
B1 = if F1 == undefined -> Bin;
|
||||
true ->
|
||||
begin
|
||||
@ -361,7 +367,7 @@ encode_msg_sdl_query_info(#sdl_query_info{network_id = F1, dst_mac = F2, session
|
||||
end
|
||||
end
|
||||
end,
|
||||
if F3 == undefined -> B2;
|
||||
B3 = if F3 == undefined -> B2;
|
||||
true ->
|
||||
begin
|
||||
TrF3 = id(F3, TrUserData),
|
||||
@ -370,6 +376,16 @@ encode_msg_sdl_query_info(#sdl_query_info{network_id = F1, dst_mac = F2, session
|
||||
_ -> e_type_bytes(TrF3, <<B2/binary, 26>>, TrUserData)
|
||||
end
|
||||
end
|
||||
end,
|
||||
if F4 == undefined -> B3;
|
||||
true ->
|
||||
begin
|
||||
TrF4 = id(F4, TrUserData),
|
||||
case iolist_size(TrF4) of
|
||||
0 -> B3;
|
||||
_ -> e_type_bytes(TrF4, <<B3/binary, 34>>, TrUserData)
|
||||
end
|
||||
end
|
||||
end.
|
||||
|
||||
encode_msg_sdl_peer_info(Msg, TrUserData) -> encode_msg_sdl_peer_info(Msg, <<>>, TrUserData).
|
||||
@ -441,6 +457,40 @@ encode_msg_sdl_nat_changed_event(#sdl_nat_changed_event{network_id = F1, mac = F
|
||||
end
|
||||
end.
|
||||
|
||||
encode_msg_sdl_drop_macs_event(Msg, TrUserData) -> encode_msg_sdl_drop_macs_event(Msg, <<>>, TrUserData).
|
||||
|
||||
|
||||
encode_msg_sdl_drop_macs_event(#sdl_drop_macs_event{network_id = F1, macs = F2}, 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,
|
||||
begin
|
||||
TrF2 = id(F2, TrUserData),
|
||||
if TrF2 == [] -> B1;
|
||||
true -> e_field_sdl_drop_macs_event_macs(TrF2, B1, TrUserData)
|
||||
end
|
||||
end.
|
||||
|
||||
encode_msg_sdl_refresh_auth_event(Msg, TrUserData) -> encode_msg_sdl_refresh_auth_event(Msg, <<>>, TrUserData).
|
||||
|
||||
|
||||
encode_msg_sdl_refresh_auth_event(#sdl_refresh_auth_event{network_id = 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_sdl_send_register_event(Msg, TrUserData) -> encode_msg_sdl_send_register_event(Msg, <<>>, TrUserData).
|
||||
|
||||
|
||||
@ -855,6 +905,12 @@ e_mfield_sdl_peer_info_v6_info(Msg, Bin, TrUserData) ->
|
||||
Bin2 = e_varint(byte_size(SubBin), Bin),
|
||||
<<Bin2/binary, SubBin/binary>>.
|
||||
|
||||
e_field_sdl_drop_macs_event_macs([Elem | Rest], Bin, TrUserData) ->
|
||||
Bin2 = <<Bin/binary, 18>>,
|
||||
Bin3 = e_type_bytes(id(Elem, TrUserData), Bin2, TrUserData),
|
||||
e_field_sdl_drop_macs_event_macs(Rest, Bin3, TrUserData);
|
||||
e_field_sdl_drop_macs_event_macs([], Bin, _TrUserData) -> Bin.
|
||||
|
||||
e_mfield_sdl_send_register_event_v6_info(Msg, Bin, TrUserData) ->
|
||||
SubBin = encode_msg_sdl_v6_info(Msg, <<>>, TrUserData),
|
||||
Bin2 = e_varint(byte_size(SubBin), Bin),
|
||||
@ -1011,6 +1067,8 @@ decode_msg_2_doit(sdl_register_super_nak, Bin, TrUserData) -> id(decode_msg_sdl_
|
||||
decode_msg_2_doit(sdl_query_info, Bin, TrUserData) -> id(decode_msg_sdl_query_info(Bin, TrUserData), TrUserData);
|
||||
decode_msg_2_doit(sdl_peer_info, Bin, TrUserData) -> id(decode_msg_sdl_peer_info(Bin, TrUserData), TrUserData);
|
||||
decode_msg_2_doit(sdl_nat_changed_event, Bin, TrUserData) -> id(decode_msg_sdl_nat_changed_event(Bin, TrUserData), TrUserData);
|
||||
decode_msg_2_doit(sdl_drop_macs_event, Bin, TrUserData) -> id(decode_msg_sdl_drop_macs_event(Bin, TrUserData), TrUserData);
|
||||
decode_msg_2_doit(sdl_refresh_auth_event, Bin, TrUserData) -> id(decode_msg_sdl_refresh_auth_event(Bin, TrUserData), TrUserData);
|
||||
decode_msg_2_doit(sdl_send_register_event, Bin, TrUserData) -> id(decode_msg_sdl_send_register_event(Bin, TrUserData), TrUserData);
|
||||
decode_msg_2_doit(sdl_network_shutdown_event, Bin, TrUserData) -> id(decode_msg_sdl_network_shutdown_event(Bin, TrUserData), TrUserData);
|
||||
decode_msg_2_doit(sdl_stun_request, Bin, TrUserData) -> id(decode_msg_sdl_stun_request(Bin, TrUserData), TrUserData);
|
||||
@ -1362,63 +1420,70 @@ skip_32_sdl_register_super_nak(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrU
|
||||
|
||||
skip_64_sdl_register_super_nak(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_register_super_nak(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData).
|
||||
|
||||
decode_msg_sdl_query_info(Bin, TrUserData) -> dfp_read_field_def_sdl_query_info(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData).
|
||||
decode_msg_sdl_query_info(Bin, TrUserData) -> dfp_read_field_def_sdl_query_info(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData).
|
||||
|
||||
dfp_read_field_def_sdl_query_info(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_query_info_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
dfp_read_field_def_sdl_query_info(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_query_info_dst_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
dfp_read_field_def_sdl_query_info(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> d_field_sdl_query_info_session_token(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
dfp_read_field_def_sdl_query_info(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_query_info{network_id = F@_1, dst_mac = F@_2, session_token = F@_3};
|
||||
dfp_read_field_def_sdl_query_info(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dg_read_field_def_sdl_query_info(Other, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
|
||||
dfp_read_field_def_sdl_query_info(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_query_info_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
dfp_read_field_def_sdl_query_info(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_query_info_src_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
dfp_read_field_def_sdl_query_info(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_query_info_dst_mac(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
dfp_read_field_def_sdl_query_info(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> d_field_sdl_query_info_session_token(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
dfp_read_field_def_sdl_query_info(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, _) -> #sdl_query_info{network_id = F@_1, src_mac = F@_2, dst_mac = F@_3, session_token = F@_4};
|
||||
dfp_read_field_def_sdl_query_info(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dg_read_field_def_sdl_query_info(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData).
|
||||
|
||||
dg_read_field_def_sdl_query_info(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_query_info(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
dg_read_field_def_sdl_query_info(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, TrUserData) ->
|
||||
dg_read_field_def_sdl_query_info(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_query_info(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
dg_read_field_def_sdl_query_info(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, TrUserData) ->
|
||||
Key = X bsl N + Acc,
|
||||
case Key of
|
||||
8 -> d_field_sdl_query_info_network_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData);
|
||||
18 -> d_field_sdl_query_info_dst_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData);
|
||||
26 -> d_field_sdl_query_info_session_token(Rest, 0, 0, 0, F@_1, F@_2, F@_3, TrUserData);
|
||||
8 -> d_field_sdl_query_info_network_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
18 -> d_field_sdl_query_info_src_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
26 -> d_field_sdl_query_info_dst_mac(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
34 -> d_field_sdl_query_info_session_token(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
_ ->
|
||||
case Key band 7 of
|
||||
0 -> skip_varint_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData);
|
||||
1 -> skip_64_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData);
|
||||
2 -> skip_length_delimited_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData);
|
||||
3 -> skip_group_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData);
|
||||
5 -> skip_32_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, TrUserData)
|
||||
0 -> skip_varint_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
1 -> skip_64_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
2 -> skip_length_delimited_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
3 -> skip_group_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
5 -> skip_32_sdl_query_info(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, TrUserData)
|
||||
end
|
||||
end;
|
||||
dg_read_field_def_sdl_query_info(<<>>, 0, 0, _, F@_1, F@_2, F@_3, _) -> #sdl_query_info{network_id = F@_1, dst_mac = F@_2, session_token = F@_3}.
|
||||
dg_read_field_def_sdl_query_info(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, _) -> #sdl_query_info{network_id = F@_1, src_mac = F@_2, dst_mac = F@_3, session_token = F@_4}.
|
||||
|
||||
d_field_sdl_query_info_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_query_info_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
d_field_sdl_query_info_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, TrUserData) ->
|
||||
d_field_sdl_query_info_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_query_info_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
d_field_sdl_query_info_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, TrUserData) ->
|
||||
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
|
||||
dfp_read_field_def_sdl_query_info(RestF, 0, 0, F, NewFValue, F@_2, F@_3, TrUserData).
|
||||
dfp_read_field_def_sdl_query_info(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, TrUserData).
|
||||
|
||||
d_field_sdl_query_info_dst_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_query_info_dst_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
d_field_sdl_query_info_dst_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, TrUserData) ->
|
||||
d_field_sdl_query_info_src_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_query_info_src_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
d_field_sdl_query_info_src_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, TrUserData) ->
|
||||
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end,
|
||||
dfp_read_field_def_sdl_query_info(RestF, 0, 0, F, F@_1, NewFValue, F@_3, TrUserData).
|
||||
dfp_read_field_def_sdl_query_info(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, TrUserData).
|
||||
|
||||
d_field_sdl_query_info_session_token(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> d_field_sdl_query_info_session_token(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
d_field_sdl_query_info_session_token(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, TrUserData) ->
|
||||
d_field_sdl_query_info_dst_mac(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_query_info_dst_mac(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
d_field_sdl_query_info_dst_mac(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, TrUserData) ->
|
||||
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end,
|
||||
dfp_read_field_def_sdl_query_info(RestF, 0, 0, F, F@_1, F@_2, NewFValue, TrUserData).
|
||||
dfp_read_field_def_sdl_query_info(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, TrUserData).
|
||||
|
||||
skip_varint_sdl_query_info(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> skip_varint_sdl_query_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
skip_varint_sdl_query_info(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_query_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
|
||||
d_field_sdl_query_info_session_token(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> d_field_sdl_query_info_session_token(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
d_field_sdl_query_info_session_token(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, TrUserData) ->
|
||||
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end,
|
||||
dfp_read_field_def_sdl_query_info(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, TrUserData).
|
||||
|
||||
skip_length_delimited_sdl_query_info(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) when N < 57 -> skip_length_delimited_sdl_query_info(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, TrUserData);
|
||||
skip_length_delimited_sdl_query_info(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, TrUserData) ->
|
||||
skip_varint_sdl_query_info(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> skip_varint_sdl_query_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
skip_varint_sdl_query_info(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_query_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData).
|
||||
|
||||
skip_length_delimited_sdl_query_info(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) when N < 57 -> skip_length_delimited_sdl_query_info(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData);
|
||||
skip_length_delimited_sdl_query_info(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, TrUserData) ->
|
||||
Length = X bsl N + Acc,
|
||||
<<_:Length/binary, Rest2/binary>> = Rest,
|
||||
dfp_read_field_def_sdl_query_info(Rest2, 0, 0, F, F@_1, F@_2, F@_3, TrUserData).
|
||||
dfp_read_field_def_sdl_query_info(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, TrUserData).
|
||||
|
||||
skip_group_sdl_query_info(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, TrUserData) ->
|
||||
skip_group_sdl_query_info(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, TrUserData) ->
|
||||
{_, Rest} = read_group(Bin, FNum),
|
||||
dfp_read_field_def_sdl_query_info(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, TrUserData).
|
||||
dfp_read_field_def_sdl_query_info(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, TrUserData).
|
||||
|
||||
skip_32_sdl_query_info(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_query_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
|
||||
skip_32_sdl_query_info(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_query_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData).
|
||||
|
||||
skip_64_sdl_query_info(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_query_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
|
||||
skip_64_sdl_query_info(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData) -> dfp_read_field_def_sdl_query_info(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, TrUserData).
|
||||
|
||||
decode_msg_sdl_peer_info(Bin, TrUserData) -> dfp_read_field_def_sdl_peer_info(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(undefined, TrUserData), id(undefined, TrUserData), TrUserData).
|
||||
|
||||
@ -1563,6 +1628,101 @@ skip_32_sdl_nat_changed_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3
|
||||
|
||||
skip_64_sdl_nat_changed_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData) -> dfp_read_field_def_sdl_nat_changed_event(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, TrUserData).
|
||||
|
||||
decode_msg_sdl_drop_macs_event(Bin, TrUserData) -> dfp_read_field_def_sdl_drop_macs_event(Bin, 0, 0, 0, id(0, TrUserData), id([], TrUserData), TrUserData).
|
||||
|
||||
dfp_read_field_def_sdl_drop_macs_event(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_drop_macs_event_network_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData);
|
||||
dfp_read_field_def_sdl_drop_macs_event(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_sdl_drop_macs_event_macs(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData);
|
||||
dfp_read_field_def_sdl_drop_macs_event(<<>>, 0, 0, _, F@_1, R1, TrUserData) -> #sdl_drop_macs_event{network_id = F@_1, macs = lists_reverse(R1, TrUserData)};
|
||||
dfp_read_field_def_sdl_drop_macs_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_sdl_drop_macs_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData).
|
||||
|
||||
dg_read_field_def_sdl_drop_macs_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_drop_macs_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData);
|
||||
dg_read_field_def_sdl_drop_macs_event(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) ->
|
||||
Key = X bsl N + Acc,
|
||||
case Key of
|
||||
8 -> d_field_sdl_drop_macs_event_network_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData);
|
||||
18 -> d_field_sdl_drop_macs_event_macs(Rest, 0, 0, 0, F@_1, F@_2, TrUserData);
|
||||
_ ->
|
||||
case Key band 7 of
|
||||
0 -> skip_varint_sdl_drop_macs_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData);
|
||||
1 -> skip_64_sdl_drop_macs_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData);
|
||||
2 -> skip_length_delimited_sdl_drop_macs_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData);
|
||||
3 -> skip_group_sdl_drop_macs_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData);
|
||||
5 -> skip_32_sdl_drop_macs_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData)
|
||||
end
|
||||
end;
|
||||
dg_read_field_def_sdl_drop_macs_event(<<>>, 0, 0, _, F@_1, R1, TrUserData) -> #sdl_drop_macs_event{network_id = F@_1, macs = lists_reverse(R1, TrUserData)}.
|
||||
|
||||
d_field_sdl_drop_macs_event_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_drop_macs_event_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData);
|
||||
d_field_sdl_drop_macs_event_network_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) ->
|
||||
{NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest},
|
||||
dfp_read_field_def_sdl_drop_macs_event(RestF, 0, 0, F, NewFValue, F@_2, TrUserData).
|
||||
|
||||
d_field_sdl_drop_macs_event_macs(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_sdl_drop_macs_event_macs(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData);
|
||||
d_field_sdl_drop_macs_event_macs(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, Prev, TrUserData) ->
|
||||
{NewFValue, RestF} = begin Len = X bsl N + Acc, <<Bytes:Len/binary, Rest2/binary>> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end,
|
||||
dfp_read_field_def_sdl_drop_macs_event(RestF, 0, 0, F, F@_1, cons(NewFValue, Prev, TrUserData), TrUserData).
|
||||
|
||||
skip_varint_sdl_drop_macs_event(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_sdl_drop_macs_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData);
|
||||
skip_varint_sdl_drop_macs_event(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_drop_macs_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData).
|
||||
|
||||
skip_length_delimited_sdl_drop_macs_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_sdl_drop_macs_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData);
|
||||
skip_length_delimited_sdl_drop_macs_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) ->
|
||||
Length = X bsl N + Acc,
|
||||
<<_:Length/binary, Rest2/binary>> = Rest,
|
||||
dfp_read_field_def_sdl_drop_macs_event(Rest2, 0, 0, F, F@_1, F@_2, TrUserData).
|
||||
|
||||
skip_group_sdl_drop_macs_event(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) ->
|
||||
{_, Rest} = read_group(Bin, FNum),
|
||||
dfp_read_field_def_sdl_drop_macs_event(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData).
|
||||
|
||||
skip_32_sdl_drop_macs_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_drop_macs_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData).
|
||||
|
||||
skip_64_sdl_drop_macs_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_drop_macs_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData).
|
||||
|
||||
decode_msg_sdl_refresh_auth_event(Bin, TrUserData) -> dfp_read_field_def_sdl_refresh_auth_event(Bin, 0, 0, 0, id(0, TrUserData), TrUserData).
|
||||
|
||||
dfp_read_field_def_sdl_refresh_auth_event(<<8, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_sdl_refresh_auth_event_network_id(Rest, Z1, Z2, F, F@_1, TrUserData);
|
||||
dfp_read_field_def_sdl_refresh_auth_event(<<>>, 0, 0, _, F@_1, _) -> #sdl_refresh_auth_event{network_id = F@_1};
|
||||
dfp_read_field_def_sdl_refresh_auth_event(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_sdl_refresh_auth_event(Other, Z1, Z2, F, F@_1, TrUserData).
|
||||
|
||||
dg_read_field_def_sdl_refresh_auth_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_refresh_auth_event(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData);
|
||||
dg_read_field_def_sdl_refresh_auth_event(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) ->
|
||||
Key = X bsl N + Acc,
|
||||
case Key of
|
||||
8 -> d_field_sdl_refresh_auth_event_network_id(Rest, 0, 0, 0, F@_1, TrUserData);
|
||||
_ ->
|
||||
case Key band 7 of
|
||||
0 -> skip_varint_sdl_refresh_auth_event(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
|
||||
1 -> skip_64_sdl_refresh_auth_event(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
|
||||
2 -> skip_length_delimited_sdl_refresh_auth_event(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
|
||||
3 -> skip_group_sdl_refresh_auth_event(Rest, 0, 0, Key bsr 3, F@_1, TrUserData);
|
||||
5 -> skip_32_sdl_refresh_auth_event(Rest, 0, 0, Key bsr 3, F@_1, TrUserData)
|
||||
end
|
||||
end;
|
||||
dg_read_field_def_sdl_refresh_auth_event(<<>>, 0, 0, _, F@_1, _) -> #sdl_refresh_auth_event{network_id = F@_1}.
|
||||
|
||||
d_field_sdl_refresh_auth_event_network_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_sdl_refresh_auth_event_network_id(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData);
|
||||
d_field_sdl_refresh_auth_event_network_id(<<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_sdl_refresh_auth_event(RestF, 0, 0, F, NewFValue, TrUserData).
|
||||
|
||||
skip_varint_sdl_refresh_auth_event(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_sdl_refresh_auth_event(Rest, Z1, Z2, F, F@_1, TrUserData);
|
||||
skip_varint_sdl_refresh_auth_event(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_refresh_auth_event(Rest, Z1, Z2, F, F@_1, TrUserData).
|
||||
|
||||
skip_length_delimited_sdl_refresh_auth_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> skip_length_delimited_sdl_refresh_auth_event(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData);
|
||||
skip_length_delimited_sdl_refresh_auth_event(<<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_sdl_refresh_auth_event(Rest2, 0, 0, F, F@_1, TrUserData).
|
||||
|
||||
skip_group_sdl_refresh_auth_event(Bin, _, Z2, FNum, F@_1, TrUserData) ->
|
||||
{_, Rest} = read_group(Bin, FNum),
|
||||
dfp_read_field_def_sdl_refresh_auth_event(Rest, 0, Z2, FNum, F@_1, TrUserData).
|
||||
|
||||
skip_32_sdl_refresh_auth_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_refresh_auth_event(Rest, Z1, Z2, F, F@_1, TrUserData).
|
||||
|
||||
skip_64_sdl_refresh_auth_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_refresh_auth_event(Rest, Z1, Z2, F, F@_1, TrUserData).
|
||||
|
||||
decode_msg_sdl_send_register_event(Bin, TrUserData) -> dfp_read_field_def_sdl_send_register_event(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(0, TrUserData), id(undefined, TrUserData), TrUserData).
|
||||
|
||||
dfp_read_field_def_sdl_send_register_event(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_sdl_send_register_event_network_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData);
|
||||
@ -2323,6 +2483,8 @@ merge_msgs(Prev, New, MsgName, Opts) ->
|
||||
sdl_query_info -> merge_msg_sdl_query_info(Prev, New, TrUserData);
|
||||
sdl_peer_info -> merge_msg_sdl_peer_info(Prev, New, TrUserData);
|
||||
sdl_nat_changed_event -> merge_msg_sdl_nat_changed_event(Prev, New, TrUserData);
|
||||
sdl_drop_macs_event -> merge_msg_sdl_drop_macs_event(Prev, New, TrUserData);
|
||||
sdl_refresh_auth_event -> merge_msg_sdl_refresh_auth_event(Prev, New, TrUserData);
|
||||
sdl_send_register_event -> merge_msg_sdl_send_register_event(Prev, New, TrUserData);
|
||||
sdl_network_shutdown_event -> merge_msg_sdl_network_shutdown_event(Prev, New, TrUserData);
|
||||
sdl_stun_request -> merge_msg_sdl_stun_request(Prev, New, TrUserData);
|
||||
@ -2424,11 +2586,16 @@ merge_msg_sdl_register_super_nak(#sdl_register_super_nak{error_code = PFerror_co
|
||||
end}.
|
||||
|
||||
-compile({nowarn_unused_function,merge_msg_sdl_query_info/3}).
|
||||
merge_msg_sdl_query_info(#sdl_query_info{network_id = PFnetwork_id, dst_mac = PFdst_mac, session_token = PFsession_token}, #sdl_query_info{network_id = NFnetwork_id, dst_mac = NFdst_mac, session_token = NFsession_token}, _) ->
|
||||
merge_msg_sdl_query_info(#sdl_query_info{network_id = PFnetwork_id, src_mac = PFsrc_mac, dst_mac = PFdst_mac, session_token = PFsession_token},
|
||||
#sdl_query_info{network_id = NFnetwork_id, src_mac = NFsrc_mac, dst_mac = NFdst_mac, session_token = NFsession_token}, _) ->
|
||||
#sdl_query_info{network_id =
|
||||
if NFnetwork_id =:= undefined -> PFnetwork_id;
|
||||
true -> NFnetwork_id
|
||||
end,
|
||||
src_mac =
|
||||
if NFsrc_mac =:= undefined -> PFsrc_mac;
|
||||
true -> NFsrc_mac
|
||||
end,
|
||||
dst_mac =
|
||||
if NFdst_mac =:= undefined -> PFdst_mac;
|
||||
true -> NFdst_mac
|
||||
@ -2474,6 +2641,25 @@ merge_msg_sdl_nat_changed_event(#sdl_nat_changed_event{network_id = PFnetwork_id
|
||||
true -> NFip
|
||||
end}.
|
||||
|
||||
-compile({nowarn_unused_function,merge_msg_sdl_drop_macs_event/3}).
|
||||
merge_msg_sdl_drop_macs_event(#sdl_drop_macs_event{network_id = PFnetwork_id, macs = PFmacs}, #sdl_drop_macs_event{network_id = NFnetwork_id, macs = NFmacs}, TrUserData) ->
|
||||
#sdl_drop_macs_event{network_id =
|
||||
if NFnetwork_id =:= undefined -> PFnetwork_id;
|
||||
true -> NFnetwork_id
|
||||
end,
|
||||
macs =
|
||||
if PFmacs /= undefined, NFmacs /= undefined -> 'erlang_++'(PFmacs, NFmacs, TrUserData);
|
||||
PFmacs == undefined -> NFmacs;
|
||||
NFmacs == undefined -> PFmacs
|
||||
end}.
|
||||
|
||||
-compile({nowarn_unused_function,merge_msg_sdl_refresh_auth_event/3}).
|
||||
merge_msg_sdl_refresh_auth_event(#sdl_refresh_auth_event{network_id = PFnetwork_id}, #sdl_refresh_auth_event{network_id = NFnetwork_id}, _) ->
|
||||
#sdl_refresh_auth_event{network_id =
|
||||
if NFnetwork_id =:= undefined -> PFnetwork_id;
|
||||
true -> NFnetwork_id
|
||||
end}.
|
||||
|
||||
-compile({nowarn_unused_function,merge_msg_sdl_send_register_event/3}).
|
||||
merge_msg_sdl_send_register_event(#sdl_send_register_event{network_id = PFnetwork_id, dst_mac = PFdst_mac, nat_ip = PFnat_ip, nat_port = PFnat_port, nat_type = PFnat_type, v6_info = PFv6_info},
|
||||
#sdl_send_register_event{network_id = NFnetwork_id, dst_mac = NFdst_mac, nat_ip = NFnat_ip, nat_port = NFnat_port, nat_type = NFnat_type, v6_info = NFv6_info}, TrUserData) ->
|
||||
@ -2684,6 +2870,8 @@ verify_msg(Msg, MsgName, Opts) ->
|
||||
sdl_query_info -> v_msg_sdl_query_info(Msg, [MsgName], TrUserData);
|
||||
sdl_peer_info -> v_msg_sdl_peer_info(Msg, [MsgName], TrUserData);
|
||||
sdl_nat_changed_event -> v_msg_sdl_nat_changed_event(Msg, [MsgName], TrUserData);
|
||||
sdl_drop_macs_event -> v_msg_sdl_drop_macs_event(Msg, [MsgName], TrUserData);
|
||||
sdl_refresh_auth_event -> v_msg_sdl_refresh_auth_event(Msg, [MsgName], TrUserData);
|
||||
sdl_send_register_event -> v_msg_sdl_send_register_event(Msg, [MsgName], TrUserData);
|
||||
sdl_network_shutdown_event -> v_msg_sdl_network_shutdown_event(Msg, [MsgName], TrUserData);
|
||||
sdl_stun_request -> v_msg_sdl_stun_request(Msg, [MsgName], TrUserData);
|
||||
@ -2792,15 +2980,18 @@ v_msg_sdl_register_super_nak(X, Path, _TrUserData) -> mk_type_error({expected_ms
|
||||
|
||||
-compile({nowarn_unused_function,v_msg_sdl_query_info/3}).
|
||||
-dialyzer({nowarn_function,v_msg_sdl_query_info/3}).
|
||||
v_msg_sdl_query_info(#sdl_query_info{network_id = F1, dst_mac = F2, session_token = F3}, Path, TrUserData) ->
|
||||
v_msg_sdl_query_info(#sdl_query_info{network_id = F1, src_mac = F2, dst_mac = F3, session_token = F4}, Path, TrUserData) ->
|
||||
if F1 == undefined -> ok;
|
||||
true -> v_type_uint32(F1, [network_id | Path], TrUserData)
|
||||
end,
|
||||
if F2 == undefined -> ok;
|
||||
true -> v_type_bytes(F2, [dst_mac | Path], TrUserData)
|
||||
true -> v_type_bytes(F2, [src_mac | Path], TrUserData)
|
||||
end,
|
||||
if F3 == undefined -> ok;
|
||||
true -> v_type_bytes(F3, [session_token | Path], TrUserData)
|
||||
true -> v_type_bytes(F3, [dst_mac | Path], TrUserData)
|
||||
end,
|
||||
if F4 == undefined -> ok;
|
||||
true -> v_type_bytes(F4, [session_token | Path], TrUserData)
|
||||
end,
|
||||
ok;
|
||||
v_msg_sdl_query_info(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_query_info}, X, Path).
|
||||
@ -2838,6 +3029,29 @@ v_msg_sdl_nat_changed_event(#sdl_nat_changed_event{network_id = F1, mac = F2, ip
|
||||
ok;
|
||||
v_msg_sdl_nat_changed_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_nat_changed_event}, X, Path).
|
||||
|
||||
-compile({nowarn_unused_function,v_msg_sdl_drop_macs_event/3}).
|
||||
-dialyzer({nowarn_function,v_msg_sdl_drop_macs_event/3}).
|
||||
v_msg_sdl_drop_macs_event(#sdl_drop_macs_event{network_id = F1, macs = F2}, Path, TrUserData) ->
|
||||
if F1 == undefined -> ok;
|
||||
true -> v_type_uint32(F1, [network_id | Path], TrUserData)
|
||||
end,
|
||||
if is_list(F2) ->
|
||||
_ = [v_type_bytes(Elem, [macs | Path], TrUserData) || Elem <- F2],
|
||||
ok;
|
||||
true -> mk_type_error({invalid_list_of, bytes}, F2, [macs | Path])
|
||||
end,
|
||||
ok;
|
||||
v_msg_sdl_drop_macs_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_drop_macs_event}, X, Path).
|
||||
|
||||
-compile({nowarn_unused_function,v_msg_sdl_refresh_auth_event/3}).
|
||||
-dialyzer({nowarn_function,v_msg_sdl_refresh_auth_event/3}).
|
||||
v_msg_sdl_refresh_auth_event(#sdl_refresh_auth_event{network_id = F1}, Path, TrUserData) ->
|
||||
if F1 == undefined -> ok;
|
||||
true -> v_type_uint32(F1, [network_id | Path], TrUserData)
|
||||
end,
|
||||
ok;
|
||||
v_msg_sdl_refresh_auth_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_refresh_auth_event}, X, Path).
|
||||
|
||||
-compile({nowarn_unused_function,v_msg_sdl_send_register_event/3}).
|
||||
-dialyzer({nowarn_function,v_msg_sdl_send_register_event/3}).
|
||||
v_msg_sdl_send_register_event(#sdl_send_register_event{network_id = F1, dst_mac = F2, nat_ip = F3, nat_port = F4, nat_type = F5, v6_info = F6}, Path, TrUserData) ->
|
||||
@ -3103,8 +3317,9 @@ get_msg_defs() ->
|
||||
{{msg, sdl_register_super_nak}, [#field{name = error_code, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = error_message, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}]},
|
||||
{{msg, sdl_query_info},
|
||||
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
|
||||
#field{name = dst_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
#field{name = session_token, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []}]},
|
||||
#field{name = src_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
#field{name = dst_mac, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []},
|
||||
#field{name = session_token, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}]},
|
||||
{{msg, sdl_peer_info},
|
||||
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
|
||||
#field{name = dst_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
@ -3114,6 +3329,8 @@ get_msg_defs() ->
|
||||
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
|
||||
#field{name = mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
#field{name = ip, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]},
|
||||
{{msg, sdl_drop_macs_event}, [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = macs, fnum = 2, rnum = 3, type = bytes, occurrence = repeated, opts = []}]},
|
||||
{{msg, sdl_refresh_auth_event}, [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]},
|
||||
{{msg, sdl_send_register_event},
|
||||
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
|
||||
#field{name = dst_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
@ -3170,6 +3387,8 @@ get_msg_names() ->
|
||||
sdl_query_info,
|
||||
sdl_peer_info,
|
||||
sdl_nat_changed_event,
|
||||
sdl_drop_macs_event,
|
||||
sdl_refresh_auth_event,
|
||||
sdl_send_register_event,
|
||||
sdl_network_shutdown_event,
|
||||
sdl_stun_request,
|
||||
@ -3194,6 +3413,8 @@ get_msg_or_group_names() ->
|
||||
sdl_query_info,
|
||||
sdl_peer_info,
|
||||
sdl_nat_changed_event,
|
||||
sdl_drop_macs_event,
|
||||
sdl_refresh_auth_event,
|
||||
sdl_send_register_event,
|
||||
sdl_network_shutdown_event,
|
||||
sdl_stun_request,
|
||||
@ -3239,8 +3460,9 @@ find_msg_def(sdl_register_super_ack) -> [#field{name = aes_key, fnum = 1, rnum =
|
||||
find_msg_def(sdl_register_super_nak) -> [#field{name = error_code, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = error_message, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}];
|
||||
find_msg_def(sdl_query_info) ->
|
||||
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
|
||||
#field{name = dst_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
#field{name = session_token, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []}];
|
||||
#field{name = src_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
#field{name = dst_mac, fnum = 3, rnum = 4, type = bytes, occurrence = defaulty, opts = []},
|
||||
#field{name = session_token, fnum = 4, rnum = 5, type = bytes, occurrence = defaulty, opts = []}];
|
||||
find_msg_def(sdl_peer_info) ->
|
||||
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
|
||||
#field{name = dst_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
@ -3250,6 +3472,8 @@ find_msg_def(sdl_nat_changed_event) ->
|
||||
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
|
||||
#field{name = mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
#field{name = ip, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}];
|
||||
find_msg_def(sdl_drop_macs_event) -> [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = macs, fnum = 2, rnum = 3, type = bytes, occurrence = repeated, opts = []}];
|
||||
find_msg_def(sdl_refresh_auth_event) -> [#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}];
|
||||
find_msg_def(sdl_send_register_event) ->
|
||||
[#field{name = network_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []},
|
||||
#field{name = dst_mac, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []},
|
||||
@ -3361,6 +3585,8 @@ fqbin_to_msg_name(<<"SDLRegisterSuperNak">>) -> sdl_register_super_nak;
|
||||
fqbin_to_msg_name(<<"SDLQueryInfo">>) -> sdl_query_info;
|
||||
fqbin_to_msg_name(<<"SDLPeerInfo">>) -> sdl_peer_info;
|
||||
fqbin_to_msg_name(<<"SDLNatChangedEvent">>) -> sdl_nat_changed_event;
|
||||
fqbin_to_msg_name(<<"SDLDropMacsEvent">>) -> sdl_drop_macs_event;
|
||||
fqbin_to_msg_name(<<"SDLRefreshAuthEvent">>) -> sdl_refresh_auth_event;
|
||||
fqbin_to_msg_name(<<"SDLSendRegisterEvent">>) -> sdl_send_register_event;
|
||||
fqbin_to_msg_name(<<"SDLNetworkShutdownEvent">>) -> sdl_network_shutdown_event;
|
||||
fqbin_to_msg_name(<<"SDLStunRequest">>) -> sdl_stun_request;
|
||||
@ -3382,6 +3608,8 @@ msg_name_to_fqbin(sdl_register_super_nak) -> <<"SDLRegisterSuperNak">>;
|
||||
msg_name_to_fqbin(sdl_query_info) -> <<"SDLQueryInfo">>;
|
||||
msg_name_to_fqbin(sdl_peer_info) -> <<"SDLPeerInfo">>;
|
||||
msg_name_to_fqbin(sdl_nat_changed_event) -> <<"SDLNatChangedEvent">>;
|
||||
msg_name_to_fqbin(sdl_drop_macs_event) -> <<"SDLDropMacsEvent">>;
|
||||
msg_name_to_fqbin(sdl_refresh_auth_event) -> <<"SDLRefreshAuthEvent">>;
|
||||
msg_name_to_fqbin(sdl_send_register_event) -> <<"SDLSendRegisterEvent">>;
|
||||
msg_name_to_fqbin(sdl_network_shutdown_event) -> <<"SDLNetworkShutdownEvent">>;
|
||||
msg_name_to_fqbin(sdl_stun_request) -> <<"SDLStunRequest">>;
|
||||
@ -3434,10 +3662,12 @@ get_msg_containment("sdlan_pb") ->
|
||||
[sdl_arp_request,
|
||||
sdl_arp_response,
|
||||
sdl_data,
|
||||
sdl_drop_macs_event,
|
||||
sdl_nat_changed_event,
|
||||
sdl_network_shutdown_event,
|
||||
sdl_peer_info,
|
||||
sdl_query_info,
|
||||
sdl_refresh_auth_event,
|
||||
sdl_register,
|
||||
sdl_register_ack,
|
||||
sdl_register_super,
|
||||
@ -3473,8 +3703,10 @@ get_proto_by_msg_name_as_fqbin(<<"SDLRegisterSuper">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLRegister">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLStunRequest">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLSendRegisterEvent">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLRefreshAuthEvent">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLNetworkShutdownEvent">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLNatChangedEvent">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLDropMacsEvent">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLArpRequest">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLStunProbe">>) -> "sdlan_pb";
|
||||
get_proto_by_msg_name_as_fqbin(<<"SDLArpResponse">>) -> "sdlan_pb";
|
||||
|
||||
@ -88,8 +88,8 @@ handle_cast({stun_relay, Ip, Port, Reply}, State = #state{socket = Sock}) ->
|
||||
{noreply, NewState :: #state{}} |
|
||||
{noreply, NewState :: #state{}, timeout() | hibernate} |
|
||||
{stop, Reason :: term(), NewState :: #state{}}).
|
||||
handle_info({udp, Sock, Ip, Port, Packet}, State = #state{socket = Sock}) ->
|
||||
catch handle_packet(Sock, Ip, Port, Packet),
|
||||
handle_info({udp, Sock, PeerIp, PeerPort, Packet}, State = #state{socket = Sock}) ->
|
||||
catch handle_packet(Sock, PeerIp, PeerPort, Packet),
|
||||
{noreply, State};
|
||||
handle_info({udp_error , Sock, Reason}, State = #state{socket = Sock}) ->
|
||||
{stop, Reason, State};
|
||||
@ -125,31 +125,13 @@ code_change(_OldVsn, State = #state{}, _Extra) ->
|
||||
handle_packet(Sock, Ip, Port, <<?PACKET_REGISTER_SUPER, Body/binary>>) ->
|
||||
sdlan_register_worker_sup:start_worker(Sock, Ip, Port, Body);
|
||||
|
||||
%handle_packet(Sock, Ip, Port, <<?PACKET_QUERY_INFO, PacketId:32, Body/binary>>) ->
|
||||
% #sdl_query_info{dst_mac = DstMac} = sdlan_pb:decode_msg(Body, sdl_query_info),
|
||||
% case sdlan_network:peer_info(NetworkPid, SrcMac, DstMac) of
|
||||
% error ->
|
||||
% logger:debug("[sdlan_channel] query_info src_mac is: ~p, dst_mac: ~p, nat_peer not found",
|
||||
% [sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]),
|
||||
%
|
||||
% Transport:send(Sock, <<PacketId:32, ?PACKET_EMPTY>>),
|
||||
% {noreply, State};
|
||||
% {ok, {NatPeer = {{Ip0, Ip1, Ip2, Ip3}, NatPort}, NatType}, V6Info} ->
|
||||
% logger:debug("[sdlan_channel] query_info src_mac is: ~p, dst_mac: ~p, nat_peer: ~p",
|
||||
% [sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac), NatPeer]),
|
||||
%
|
||||
% PeerInfo = sdlan_pb:encode_msg(#sdl_peer_info{
|
||||
% dst_mac = DstMac,
|
||||
% v4_info = #sdl_v4_info {
|
||||
% port = NatPort,
|
||||
% v4 = <<Ip0, Ip1, Ip2, Ip3>>,
|
||||
% nat_type = NatType
|
||||
% },
|
||||
% v6_info = V6Info
|
||||
% }),
|
||||
% Transport:send(Sock, <<PacketId:32, ?PACKET_PEER_INFO, PeerInfo/binary>>),
|
||||
% {noreply, State}
|
||||
% end;
|
||||
%% 查询信息
|
||||
handle_packet(Sock, ClientIp, ClientPort, <<?PACKET_QUERY_INFO, PacketId:32, Body/binary>>) ->
|
||||
Query = #sdl_query_info{network_id = NetworkId} = sdlan_pb:decode_msg(Body, sdl_query_info),
|
||||
maybe
|
||||
{ok, NetworkPid} ?= sdlan_network:lookup_pid(NetworkId),
|
||||
sdlan_network:peer_info(NetworkPid, Sock, ClientIp, ClientPort, PacketId, Query)
|
||||
end;
|
||||
|
||||
handle_packet(Sock, Ip, Port, <<?PACKET_STUN_REQUEST:8, Body/binary>>) ->
|
||||
#sdl_stun_request{cookie = Cookie, client_id = ClientId, network_id = NetworkId, mac = Mac, nat_type = NatType, v6_info = V6Info} = sdlan_pb:decode_msg(Body, sdl_stun_request),
|
||||
|
||||
@ -45,8 +45,9 @@ message SDLRegisterSuperNak {
|
||||
// 网络地址查询
|
||||
message SDLQueryInfo {
|
||||
uint32 network_id = 1;
|
||||
bytes dst_mac = 2;
|
||||
bytes session_token = 3;
|
||||
bytes src_mac = 2;
|
||||
bytes dst_mac = 3;
|
||||
bytes session_token = 4;
|
||||
}
|
||||
|
||||
message SDLPeerInfo {
|
||||
@ -67,7 +68,12 @@ message SDLNatChangedEvent {
|
||||
// 被清理掉的Endpoints
|
||||
message SDLDropMacsEvent {
|
||||
uint32 network_id = 1;
|
||||
repeated bytes mac = 2;
|
||||
repeated bytes macs = 2;
|
||||
}
|
||||
|
||||
// 通知端上必须重新校验
|
||||
message SDLRefreshAuthEvent {
|
||||
uint32 network_id = 1;
|
||||
}
|
||||
|
||||
message SDLSendRegisterEvent {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user