diff --git a/apps/sdlan/src/sdlan_network.erl b/apps/sdlan/src/sdlan_network.erl index 206b8b2..9803176 100644 --- a/apps/sdlan/src/sdlan_network.erl +++ b/apps/sdlan/src/sdlan_network.erl @@ -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 diff --git a/apps/sdlan/src/sdlan_register_worker.erl b/apps/sdlan/src/sdlan_register_worker.erl index 4c39f44..dfad3d5 100644 --- a/apps/sdlan/src/sdlan_register_worker.erl +++ b/apps/sdlan/src/sdlan_register_worker.erl @@ -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 diff --git a/apps/sdlan/src/test/stun_client.erl b/apps/sdlan/src/test/stun_client.erl index 7529209..ae73afa 100644 --- a/apps/sdlan/src/test/stun_client.erl +++ b/apps/sdlan/src/test/stun_client.erl @@ -155,7 +155,18 @@ handle_info({udp, _Socket, _ServerIp, _ServerPort, < +handle_info({udp, _Socket, _ServerIp, _ServerPort, <>}, 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, <>}, 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, <>), 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, <>), + logger:debug("[stun_client] will send query packet: ~p", [QueryPacket]), + {noreply, State}. %% @private