This commit is contained in:
anlicheng 2026-02-18 23:45:55 +08:00
parent a6ebd84272
commit 9c81a7c2be

View File

@ -104,7 +104,7 @@ handle_event(internal, do_init, initializing, State=#state{conn = Conn, max_pack
max_packet_size = MaxPacketSize, max_packet_size = MaxPacketSize,
heartbeat_sec = HeartbeatSec heartbeat_sec = HeartbeatSec
}), }),
{ok, _} = quicer:send(Stream, <<?PACKET_WELCOME, WelcomePkt/binary>>), quic_send(Stream, <<?PACKET_WELCOME, WelcomePkt/binary>>),
logger:debug("[sdlan_quic_channel] get stream: ~p, send welcome", [Stream]), logger:debug("[sdlan_quic_channel] get stream: ~p, send welcome", [Stream]),
{next_state, initialized, State#state{stream = Stream}}; {next_state, initialized, State#state{stream = Stream}};
@ -151,23 +151,23 @@ handle_event(info, {frame, <<?PACKET_REGISTER_SUPER, Body/binary>>}, initialized
}), }),
%% %%
{ok, _} = quicer:send(Stream, <<?PACKET_REGISTER_SUPER_ACK, RegisterSuperAck/binary>>), quic_send(Stream, <<?PACKET_REGISTER_SUPER_ACK, RegisterSuperAck/binary>>),
%% 线 %% 线
Result = sdlan_api:node_online(ClientId, NetworkId, sdlan_ipaddr:int_to_ipv4(Ip)), Result = sdlan_api:node_online(ClientId, NetworkId, sdlan_ipaddr:int_to_ipv4(Ip)),
logger:debug("[sdlan_register_worker] client_id: ~p, set none online result is: ~p", [ClientId, Result]), logger:debug("[sdlan_register_worker] client_id: ~p, set none online result is: ~p", [ClientId, Result]),
{next_state, registered, State#state{network_id = NetworkId, network_pid = NetworkPid, client_id = ClientId, mac = Mac, ip = Ip}}; {next_state, registered, State#state{network_id = NetworkId, network_pid = NetworkPid, client_id = ClientId, mac = Mac, ip = Ip}};
undefined -> undefined ->
logger:warning("[sdlan_register_worker] client_id: ~p, register get error: network not found", [ClientId]), logger:warning("[sdlan_register_worker] client_id: ~p, register get error: network not found", [ClientId]),
{ok, _} = quicer:send(Stream, register_nak_reply(PktId, ?NAK_INTERNAL_FAULT, <<"Internal Error">>)), quic_send(Stream, register_nak_reply(PktId, ?NAK_INTERNAL_FAULT, <<"Internal Error">>)),
{stop, normal, State} {stop, normal, State}
end; end;
{ok, #{<<"error">> := #{<<"code">> := Code, <<"message">> := Message}}} -> {ok, #{<<"error">> := #{<<"code">> := Code, <<"message">> := Message}}} ->
logger:warning("[sdlan_register_worker] network_id: ~p, client_id: ~p, register get error: ~ts, error_code: ~p", [NetworkId, ClientId, Message, Code]), logger:warning("[sdlan_register_worker] network_id: ~p, client_id: ~p, register get error: ~ts, error_code: ~p", [NetworkId, ClientId, Message, Code]),
{ok, _} = quicer:send(Stream, register_nak_reply(PktId, Code, Message)), quic_send(Stream, register_nak_reply(PktId, Code, Message)),
{stop, normal, State}; {stop, normal, State};
{error, Reason} -> {error, Reason} ->
logger:warning("[sdlan_register_worker] network_id: ~p, client_id: ~p, register get error: ~p", [NetworkId, ClientId, Reason]), logger:warning("[sdlan_register_worker] network_id: ~p, client_id: ~p, register get error: ~p", [NetworkId, ClientId, Reason]),
{ok, _} = quicer:send(Stream, register_nak_reply(PktId, ?NAK_NETWORK_FAULT, <<"Network Error">>)), quic_send(Stream, register_nak_reply(PktId, ?NAK_NETWORK_FAULT, <<"Network Error">>)),
{stop, normal, State} {stop, normal, State}
end; end;
@ -181,7 +181,7 @@ handle_event(info, {frame, <<?PACKET_QUERY_INFO, Body/binary>>}, registered, #st
EmptyResponse = sdlan_pb:encode_msg(#sdl_empty{ EmptyResponse = sdlan_pb:encode_msg(#sdl_empty{
pkt_id = PktId pkt_id = PktId
}), }),
{ok, _} = quicer:send(Stream, <<?PACKET_PEER_INFO, EmptyResponse/binary>>), quic_send(Stream, <<?PACKET_PEER_INFO, EmptyResponse/binary>>),
keep_state_and_data; keep_state_and_data;
{ok, {NatPeer = {{Ip0, Ip1, Ip2, Ip3}, NatPort}, NatType}, V6Info} -> {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", logger:debug("[sdlan_channel] query_info src_mac is: ~p, dst_mac: ~p, nat_peer: ~p",
@ -197,12 +197,12 @@ handle_event(info, {frame, <<?PACKET_QUERY_INFO, Body/binary>>}, registered, #st
}, },
v6_info = V6Info v6_info = V6Info
}), }),
{ok, _} = quicer:send(Stream, <<?PACKET_PEER_INFO, PeerInfo/binary>>), quic_send(Stream, <<?PACKET_PEER_INFO, PeerInfo/binary>>),
keep_state_and_data keep_state_and_data
end; end;
handle_event(info, {frame, <<?PACKET_PING>>}, registered, State = #state{stream = Stream, ping_counter = PingCounter}) -> handle_event(info, {frame, <<?PACKET_PING>>}, registered, State = #state{stream = Stream, ping_counter = PingCounter}) ->
{ok, _} = quicer:send(Stream, <<?PACKET_PONG>>), quic_send(Stream, <<?PACKET_PONG>>),
{keep_state, State#state{ping_counter = PingCounter + 1}}; {keep_state, State#state{ping_counter = PingCounter + 1}};
handle_event(info, {timeout, _, ping_ticker}, _, State = #state{client_id = ClientId, ping_counter = PingCounter}) -> handle_event(info, {timeout, _, ping_ticker}, _, State = #state{client_id = ClientId, ping_counter = PingCounter}) ->
@ -219,7 +219,7 @@ handle_event(info, {timeout, _, ping_ticker}, _, State = #state{client_id = Clie
%% %%
handle_event(info, {send_event, EventType, Event}, registered, #state{stream = Stream, client_id = ClientId}) -> handle_event(info, {send_event, EventType, Event}, registered, #state{stream = Stream, client_id = ClientId}) ->
logger:debug("[sdlan_channel] client_id: ~p, will send eventType: ~p, event: ~p", [ClientId, EventType, Event]), logger:debug("[sdlan_channel] client_id: ~p, will send eventType: ~p, event: ~p", [ClientId, EventType, Event]),
{ok, _} = quicer:send(Stream, <<?PACKET_EVENT, EventType, Event/binary>>), quic_send(Stream, <<?PACKET_EVENT, EventType, Event/binary>>),
keep_state_and_data; keep_state_and_data;
%% %%
@ -292,3 +292,8 @@ register_nak_reply(PacketId, ErrorCode, ErrorMsg) when is_integer(PacketId), is_
rsa_encode(PlainText, RsaPubKey) when is_binary(PlainText) -> rsa_encode(PlainText, RsaPubKey) when is_binary(PlainText) ->
iolist_to_binary(sdlan_cipher:rsa_encrypt(PlainText, RsaPubKey)). iolist_to_binary(sdlan_cipher:rsa_encrypt(PlainText, RsaPubKey)).
-spec quic_send(Stream :: quicer:stream_handle(), Packet :: binary()) -> no_return().
quic_send(Stream, Packet) when is_binary(Packet) ->
Len = byte_size(Packet),
{ok, _} = quicer:send(Stream, <<Len:16, Packet/binary>>).