From 75fa239ae9a526bc3ec09a6209aa58fdab6e5cbf Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 26 Jan 2026 15:53:18 +0800 Subject: [PATCH] fix --- apps/sdlan/include/sdlan.hrl | 3 +- apps/sdlan/include/sdlan_pb.hrl | 20 +- apps/sdlan/src/sdlan_network.erl | 109 ++++++---- apps/sdlan/src/sdlan_pb.erl | 336 ++++++++++++++++++++++++++----- apps/sdlan/src/sdlan_stun.erl | 36 +--- message.proto | 12 +- 6 files changed, 390 insertions(+), 126 deletions(-) diff --git a/apps/sdlan/include/sdlan.hrl b/apps/sdlan/include/sdlan.hrl index 81ffc4d..38f5868 100644 --- a/apps/sdlan/include/sdlan.hrl +++ b/apps/sdlan/include/sdlan.hrl @@ -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). diff --git a/apps/sdlan/include/sdlan_pb.hrl b/apps/sdlan/include/sdlan_pb.hrl index 58b3498..d7b9c60 100644 --- a/apps/sdlan/include/sdlan_pb.hrl +++ b/apps/sdlan/include/sdlan_pb.hrl @@ -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, diff --git a/apps/sdlan/src/sdlan_network.erl b/apps/sdlan/src/sdlan_network.erl index b72037d..4b02a5e 100644 --- a/apps/sdlan/src/sdlan_network.erl +++ b/apps/sdlan/src/sdlan_network.erl @@ -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 = <>, - 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 = <>, + nat_type = DstNatType + }, + v6_info = DstV6Info + }), + PeerPacket = <>, + gen_udp:send(Sock, ClientIp, ClientPort, PeerPacket); + _ -> + EmptyPeerPacket = <>, + 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 = <>, + 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 - }), - EventPacket = <>, + maybe + true ?= maps:size(ExpiredEndpoints) > 0, + DropMacsEvent = sdlan_pb:encode_msg(#sdl_drop_macs_event { + network_id = NetworkId, + macs = maps:keys(ExpiredEndpoints) + }), + EventPacket = <>, - 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 = <>, + 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 diff --git a/apps/sdlan/src/sdlan_pb.erl b/apps/sdlan/src/sdlan_pb.erl index 38c38d5..56ae441 100644 --- a/apps/sdlan/src/sdlan_pb.erl +++ b/apps/sdlan/src/sdlan_pb.erl @@ -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,13 +367,23 @@ 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), + case iolist_size(TrF3) of + 0 -> B2; + _ -> e_type_bytes(TrF3, <>, TrUserData) + end + end + end, + if F4 == undefined -> B3; true -> begin - TrF3 = id(F3, TrUserData), - case iolist_size(TrF3) of - 0 -> B2; - _ -> e_type_bytes(TrF3, <>, TrUserData) + TrF4 = id(F4, TrUserData), + case iolist_size(TrF4) of + 0 -> B3; + _ -> e_type_bytes(TrF4, <>, TrUserData) end end end. @@ -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, <>, 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, <>, 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), <>. +e_field_sdl_drop_macs_event_macs([Elem | Rest], Bin, TrUserData) -> + Bin2 = <>, + 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, <> = 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, <> = 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, <> = 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, <> = 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"; diff --git a/apps/sdlan/src/sdlan_stun.erl b/apps/sdlan/src/sdlan_stun.erl index e536f91..d79197f 100644 --- a/apps/sdlan/src/sdlan_stun.erl +++ b/apps/sdlan/src/sdlan_stun.erl @@ -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, <>) -> sdlan_register_worker_sup:start_worker(Sock, Ip, Port, Body); -%handle_packet(Sock, Ip, Port, <>) -> -% #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, <>), -% {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 = <>, -% nat_type = NatType -% }, -% v6_info = V6Info -% }), -% Transport:send(Sock, <>), -% {noreply, State} -% end; +%% 查询信息 +handle_packet(Sock, ClientIp, ClientPort, <>) -> + 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, <>) -> #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), diff --git a/message.proto b/message.proto index 248ae86..d32d0bd 100644 --- a/message.proto +++ b/message.proto @@ -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 {