From 94dc39805e8692d740907a122a437e89ded4d914 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Sun, 28 Jun 2026 23:55:13 +0800 Subject: [PATCH] fix --- .../src/relay_server_udp_handler.erl | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/relay_server/src/relay_server_udp_handler.erl b/apps/relay_server/src/relay_server_udp_handler.erl index ade4d19..bef5261 100644 --- a/apps/relay_server/src/relay_server_udp_handler.erl +++ b/apps/relay_server/src/relay_server_udp_handler.erl @@ -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, <>, 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.