This commit is contained in:
anlicheng 2026-06-28 23:55:13 +08:00
parent df3696cd50
commit 94dc39805e

View File

@ -246,15 +246,27 @@ remove_stream(StreamId, State = #state{streams = Streams, sockets = Sockets}) ->
close_remote(#stream{socket = Socket}) ->
gen_tcp:close(Socket).
send_frame(Type, StreamId, Payload, #state{server = Server, peer = Peer, cipher_key = Key}) ->
PlainPacket = relay_server_udp_protocol:encode(Type, StreamId, Payload),
send_frame(_Type, _StreamId, <<>>, _State) ->
ok;
send_frame(Type, StreamId, <<Part:1200/binary, Rest/binary>>, State) ->
case send_frame0(Type, StreamId, Part, State) of
ok ->
send_frame(Type, StreamId, Rest, State);
Error ->
Error
end;
send_frame(Type, StreamId, Rest, State) ->
send_frame0(Type, StreamId, Rest, State).
send_frame0(Type, StreamId, Part, #state{server = Server, peer = Peer, cipher_key = Key}) ->
PlainPacket = relay_server_udp_protocol:encode(Type, StreamId, Part),
case chacha20_cipher:encrypt(PlainPacket, Key) of
{ok, Packet} ->
logger:error("UDP relay encrypt packet size: ~p", [byte_size(Packet)]),
Server ! {datagram, Peer, Packet},
ok;
{error, Reason} ->
logger:error("UDP relay failed to encrypt ~p frame for stream ~p: ~p",
[Type, StreamId, Reason]),
logger:error("UDP relay failed to encrypt ~p frame for stream ~p: ~p", [Type, StreamId, Reason]),
{error, Reason}
end.