fix
This commit is contained in:
parent
672da8d7b1
commit
160fb4d92b
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user