This commit is contained in:
anlicheng 2026-02-24 15:50:43 +08:00
parent e8a1b15f8f
commit 3b83b7dfee
4 changed files with 21 additions and 35 deletions

View File

@ -13,8 +13,9 @@
-define(DEFAULT_PASS, <<"`encrypt!`">>). -define(DEFAULT_PASS, <<"`encrypt!`">>).
-define(PACKET_EMPTY, 16#00). %%
-define(PACKET_EMPTY, 16#00).
%% %%
-define(PACKET_REGISTER_SUPER, 16#01). -define(PACKET_REGISTER_SUPER, 16#01).
-define(PACKET_REGISTER_SUPER_ACK, 16#02). -define(PACKET_REGISTER_SUPER_ACK, 16#02).
@ -32,23 +33,6 @@
%% , %% ,
-define(PACKET_EVENT, 16#10). -define(PACKET_EVENT, 16#10).
%%
-define(PACKET_EVENT_KNOWN_IP, 16#01).
-define(PACKET_EVENT_DROP_IP, 16#02).
-define(PACKET_EVENT_NAT_CHANGED, 16#03).
-define(PACKET_EVENT_SEND_REGISTER, 16#04).
%%
-define(PACKET_EVENT_NETWORK_SHUTDOWN, 16#FF).
%% ,
-define(PACKET_COMMAND, 16#11).
-define(PACKET_COMMAND_ACK, 16#12).
%%
-define(PACKET_COMMAND_CHANGE_NETWORK, 16#01).
-define(PACKET_COMMAND_UPGRADE, 16#02).
%% %%
-define(PACKET_FLOW_TRACER, 16#15). -define(PACKET_FLOW_TRACER, 16#15).
@ -56,7 +40,6 @@
-define(PACKET_REGISTER_ACK, 16#21). -define(PACKET_REGISTER_ACK, 16#21).
%% stun相关的请求 %% stun相关的请求
%% %%
-define(PACKET_STUN_REQUEST, 16#30). -define(PACKET_STUN_REQUEST, 16#30).
%% %%
@ -74,18 +57,22 @@
-define(PACKET_POLICY_REQUEST, 16#b0). -define(PACKET_POLICY_REQUEST, 16#b0).
-define(PACKET_POLICY_REPLY, 16#b1). -define(PACKET_POLICY_REPLY, 16#b1).
%% stun请求的attr
-define(STUN_ATTR_CHANGE_NONE, 0).
-define(STUN_ATTR_CHANGE_PORT, 1).
-define(STUN_ATTR_CHANGE_PEER, 2).
%% %%
-define(PACKET_WELCOME, 16#4F). -define(PACKET_WELCOME, 16#4F).
%% %%
-define(PACKET_STUN_DATA, 16#FF). -define(PACKET_STUN_DATA, 16#FF).
-record(id_generator, { %%
tab :: atom(),
increment_id = 0 :: integer() %%
}). -define(EVENT_KNOWN_IP, 16#01).
-define(EVENT_DROP_IP, 16#02).
-define(EVENT_NAT_CHANGED, 16#03).
-define(EVENT_SEND_REGISTER, 16#04).
-define(EVENT_NETWORK_SHUTDOWN, 16#FF).
%% stun请求的attr
-define(STUN_ATTR_CHANGE_NONE, 0).
-define(STUN_ATTR_CHANGE_PORT, 1).
-define(STUN_ATTR_CHANGE_PEER, 2).

View File

@ -99,7 +99,7 @@ handle_event(internal, do_init, initializing, State=#state{conn = Conn}) ->
{ok, _} = quicer:async_accept_stream(Conn, #{active => true}), {ok, _} = quicer:async_accept_stream(Conn, #{active => true}),
{next_state, waiting_stream, State}; {next_state, waiting_stream, State};
handle_event(info, {quic, new_stream, Stream, Opts}, waiting_stream, State=#state{conn = Conn, max_packet_size = MaxPacketSize, heartbeat_sec = HeartbeatSec}) -> handle_event(info, {quic, new_stream, Stream, Opts}, waiting_stream, State=#state{max_packet_size = MaxPacketSize, heartbeat_sec = HeartbeatSec}) ->
logger:debug("[sdlan_quic_channel] call new_stream: ~p, opts: ~p", [Stream, Opts]), logger:debug("[sdlan_quic_channel] call new_stream: ~p, opts: ~p", [Stream, Opts]),
%% %%
WelcomePkt = sdlan_pb:encode_msg(#sdl_welcome{ WelcomePkt = sdlan_pb:encode_msg(#sdl_welcome{

View File

@ -197,7 +197,7 @@ handle_call({attach, ChannelPid, ClientId, Mac, Ip, Hostname}, _From,
ip = Ip ip = Ip
}), }),
broadcast(fun(#endpoint{channel_pid = ChannelPid0}) -> broadcast(fun(#endpoint{channel_pid = ChannelPid0}) ->
sdlan_quic_channel:send_event(ChannelPid0, ?PACKET_EVENT_NAT_CHANGED, NatChangedEvent) sdlan_quic_channel:send_event(ChannelPid0, ?EVENT_NAT_CHANGED, NatChangedEvent)
end, [Mac], Endpoints), end, [Mac], Endpoints),
%% %%
@ -251,7 +251,7 @@ handle_call({peer_info, SrcMac, DstMac}, _From, State = #state{endpoints = Endpo
nat_port = SrcNatPort, nat_port = SrcNatPort,
v6_info = SrcV6Info v6_info = SrcV6Info
}), }),
sdlan_quic_channel:send_event(DstChannelPid, ?PACKET_EVENT_SEND_REGISTER, RegisterEvent) sdlan_quic_channel:send_event(DstChannelPid, ?EVENT_SEND_REGISTER, RegisterEvent)
end, end,
{reply, {ok, {DstNatPeer, DstNatType}, DstV6Info}, State}; {reply, {ok, {DstNatPeer, DstNatType}, DstV6Info}, State};
_ -> _ ->
@ -350,7 +350,7 @@ handle_cast({update_hole, SessionToken, ClientId, Mac, Peer, NatType, V6Info}, S
}), }),
logger:debug("[sdlan_network] client_id: ~p(~p), hole changed", [ClientId, Ip]), logger:debug("[sdlan_network] client_id: ~p(~p), hole changed", [ClientId, Ip]),
broadcast(fun(#endpoint{channel_pid = ChannelPid}) -> broadcast(fun(#endpoint{channel_pid = ChannelPid}) ->
sdlan_quic_channel:send_event(ChannelPid, ?PACKET_EVENT_NAT_CHANGED, NatChangedEvent) sdlan_quic_channel:send_event(ChannelPid, ?EVENT_NAT_CHANGED, NatChangedEvent)
end, [Mac], Endpoints) end, [Mac], Endpoints)
end, end,
NEndpoint = Endpoint0#endpoint{hole = NHole, v6_info = V6Info, last_seen = erlang:monotonic_time(second)}, NEndpoint = Endpoint0#endpoint{hole = NHole, v6_info = V6Info, last_seen = erlang:monotonic_time(second)},
@ -392,7 +392,7 @@ terminate(Reason, #state{network_id = NetworkId, endpoints = Endpoints}) ->
NetworkShutdownEvent = sdlan_pb:encode_msg(#sdl_network_shutdown_event{ NetworkShutdownEvent = sdlan_pb:encode_msg(#sdl_network_shutdown_event{
message = <<"Network shutdown">> message = <<"Network shutdown">>
}), }),
sdlan_quic_channel:send_event(ChannelPid, ?PACKET_EVENT_NETWORK_SHUTDOWN, NetworkShutdownEvent), sdlan_quic_channel:send_event(ChannelPid, ?EVENT_NETWORK_SHUTDOWN, NetworkShutdownEvent),
sdlan_quic_channel:stop(ChannelPid, normal); sdlan_quic_channel:stop(ChannelPid, normal);
false -> false ->
ok ok

View File

@ -14,8 +14,7 @@ message SDLV6Info {
} }
// super之间采用了quic协议通讯 // super之间采用了quic协议通讯
// : <<Len:16, Data/binary>> // : <<Len:16, PacketType:8, Payload/binary>>
// : <<PacketType:8, Payload/binary>>
message SDLWelcome { message SDLWelcome {
uint32 version = 1; uint32 version = 1;