This commit is contained in:
anlicheng 2026-01-26 23:16:06 +08:00
parent 672da8d7b1
commit 160fb4d92b
3 changed files with 32 additions and 10 deletions

View File

@ -256,6 +256,9 @@ handle_call(debug_info, _From, State = #state{network_id = NetworkId, ipaddr = I
handle_cast({peer_info, Sock, {ClientIp, ClientPort}, #sdl_query_info{pkt_id = PktId, src_mac = SrcMac, dst_mac = DstMac}},
State = #state{network_id = NetworkId, endpoints = Endpoints}) ->
logger:debug("[sdlan_network] network_id: ~p, query_info, src_mac: ~p, dst_mac: ~p",
[NetworkId, sdlan_util:format_mac(SrcMac), sdlan_util:format_mac(DstMac)]),
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 )
@ -354,7 +357,7 @@ handle_cast({stun_request, Sock, Peer = {ClientIp, ClientPort}, #sdl_stun_reques
case maps:find(Mac, Endpoints) of
%% ClientId =:= ClientId0, SessionToken =:= SessionToken0
{ok, Endpoint0 = #endpoint{ip = Ip, client_id = ClientId, hole = OldHole, session_token = ST}} when 1 == 2 ->
{ok, Endpoint0 = #endpoint{ip = Ip, client_id = ClientId, hole = OldHole, session_token = ST}} ->
NHole = #hole{peer = Peer, nat_type = NatType},
maybe
%% hole changed -> notify peers

View File

@ -39,24 +39,22 @@ do_register(Sock, ClientIp, ClientPort, #sdl_register_super{
%% Mac地址不能是广播地址
true = not (sdlan_util:is_multicast_mac(Mac) orelse sdlan_util:is_broadcast_mac(Mac)),
MacBinStr = sdlan_util:format_mac(Mac),
IpAddr = sdlan_ipaddr:int_to_ipv4(Ip),
Params = #{
<<"network_id">> => NetworkId,
<<"client_id">> => ClientId,
<<"mac">> => Mac,
<<"ip">> => Ip,
<<"mac">> => MacBinStr,
<<"ip">> => IpAddr,
<<"mask_len">> => MaskLen,
<<"hostname">> => HostName,
<<"access_token">> => AccessToken
},
%%
logger:debug("[sdlan_register_worker] xyz client_id: ~p, ip: ~p, mac: ~p, host_name: ~p, access_token: ~p, network_id: ~p",
logger:debug("[sdlan_register_worker] client_id: ~p, ip: ~p, mac: ~p, host_name: ~p, access_token: ~p, network_id: ~p",
[ClientId, Ip, Mac, HostName, AccessToken, NetworkId]),
%% TODO
%AuthResult = sdlan_api:auth_access_token(Params),
AuthResult = {ok, #{<<"result">> => <<"ok">>}},
case AuthResult of
case sdlan_api:auth_access_token(Params) of
{ok, #{<<"result">> := <<"ok">>}} ->
%% network的对应关系
case sdlan_network:get_pid(NetworkId) of

View File

@ -155,7 +155,18 @@ handle_info({udp, _Socket, _ServerIp, _ServerPort, <<?PACKET_EVENT, ?PACKET_EVEN
logger:debug("[stun_client] get a refresh_auth_event: ~p", [Event]),
{stop, refresh_auth, State};
handle_info({timeout, _, stun_request_ticker}, State = #state{tun_socket = TunSocket, client_id = ClientId, mac = Mac, ip = Ip, session_token = SessionToken}) ->
handle_info({udp, _Socket, _ServerIp, _ServerPort, <<?PACKET_PEER_INFO, Data/binary>>}, State) ->
PeerInfo = #sdl_peer_info{} = sdlan_pb:decode_msg(Data, sdl_peer_info),
logger:debug("[stun_client] get peer info: ~p", [PeerInfo]),
{noreply, State};
handle_info({udp, _Socket, _ServerIp, _ServerPort, <<?PACKET_EVENT, EventType:8, Event/binary>>}, State) ->
logger:debug("[stun_client] get event_type: ~p, event: ~p", [EventType, Event]),
{noreply, State};
handle_info({timeout, _, stun_request_ticker},
State = #state{tun_socket = TunSocket, network_id = NetworkId, client_id = ClientId, mac = Mac, ip = Ip, session_token = SessionToken}) ->
Packet = sdlan_pb:encode_msg(#sdl_stun_request{
client_id = ClientId,
network_id = 8,
@ -169,6 +180,16 @@ handle_info({timeout, _, stun_request_ticker}, State = #state{tun_socket = TunSo
gen_udp:send(TunSocket, ?SUPER_HOST, ?SUPER_PORT, <<?PACKET_STUN_REQUEST, Packet/binary>>),
erlang:start_timer(5000, self(), stun_request_ticker),
QueryPacket = sdlan_pb:encode_msg(#sdl_query_info{
pkt_id = 10,
network_id = NetworkId,
src_mac = Mac,
dst_mac = Mac,
session_token = SessionToken
}),
gen_udp:send(TunSocket, ?SUPER_HOST, ?SUPER_PORT, <<?PACKET_QUERY_INFO, QueryPacket/binary>>),
logger:debug("[stun_client] will send query packet: ~p", [QueryPacket]),
{noreply, State}.
%% @private