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}},
|
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}) ->
|
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
|
case maps:find(DstMac, Endpoints) of
|
||||||
{ok, #endpoint{hole = #hole{peer = DstNatPeer = {{Ip0, Ip1, Ip2, Ip3}, DstNatPort}, nat_type = DstNatType}, v6_info = DstV6Info}} ->
|
{ok, #endpoint{hole = #hole{peer = DstNatPeer = {{Ip0, Ip1, Ip2, Ip3}, DstNatPort}, nat_type = DstNatType}, v6_info = DstV6Info}} ->
|
||||||
%% 让目标服务器发送sendRegister事件(2024-06-25 新增,提高打洞的成功率)
|
%% 让目标服务器发送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
|
case maps:find(Mac, Endpoints) of
|
||||||
%% ClientId =:= ClientId0, SessionToken =:= SessionToken0
|
%% 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},
|
NHole = #hole{peer = Peer, nat_type = NatType},
|
||||||
maybe
|
maybe
|
||||||
%% hole changed -> notify peers
|
%% hole changed -> notify peers
|
||||||
|
|||||||
@ -39,24 +39,22 @@ do_register(Sock, ClientIp, ClientPort, #sdl_register_super{
|
|||||||
%% Mac地址不能是广播地址
|
%% Mac地址不能是广播地址
|
||||||
true = not (sdlan_util:is_multicast_mac(Mac) orelse sdlan_util:is_broadcast_mac(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 = #{
|
Params = #{
|
||||||
<<"network_id">> => NetworkId,
|
<<"network_id">> => NetworkId,
|
||||||
<<"client_id">> => ClientId,
|
<<"client_id">> => ClientId,
|
||||||
<<"mac">> => Mac,
|
<<"mac">> => MacBinStr,
|
||||||
<<"ip">> => Ip,
|
<<"ip">> => IpAddr,
|
||||||
<<"mask_len">> => MaskLen,
|
<<"mask_len">> => MaskLen,
|
||||||
<<"hostname">> => HostName,
|
<<"hostname">> => HostName,
|
||||||
<<"access_token">> => AccessToken
|
<<"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]),
|
[ClientId, Ip, Mac, HostName, AccessToken, NetworkId]),
|
||||||
|
|
||||||
%% TODO
|
case sdlan_api:auth_access_token(Params) of
|
||||||
%AuthResult = sdlan_api:auth_access_token(Params),
|
|
||||||
AuthResult = {ok, #{<<"result">> => <<"ok">>}},
|
|
||||||
case AuthResult of
|
|
||||||
{ok, #{<<"result">> := <<"ok">>}} ->
|
{ok, #{<<"result">> := <<"ok">>}} ->
|
||||||
%% 建立到network的对应关系
|
%% 建立到network的对应关系
|
||||||
case sdlan_network:get_pid(NetworkId) of
|
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]),
|
logger:debug("[stun_client] get a refresh_auth_event: ~p", [Event]),
|
||||||
{stop, refresh_auth, State};
|
{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{
|
Packet = sdlan_pb:encode_msg(#sdl_stun_request{
|
||||||
client_id = ClientId,
|
client_id = ClientId,
|
||||||
network_id = 8,
|
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>>),
|
gen_udp:send(TunSocket, ?SUPER_HOST, ?SUPER_PORT, <<?PACKET_STUN_REQUEST, Packet/binary>>),
|
||||||
erlang:start_timer(5000, self(), stun_request_ticker),
|
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}.
|
{noreply, State}.
|
||||||
|
|
||||||
%% @private
|
%% @private
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user