From 77df81f8c35ca86348d7bb94e9cd8ecf6ff934ee Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Sun, 28 Jun 2026 21:30:35 +0800 Subject: [PATCH] fix udp_handler --- .../src/relay_server_udp_handler.erl | 17 ++++++----------- config/sys.config | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/apps/relay_server/src/relay_server_udp_handler.erl b/apps/relay_server/src/relay_server_udp_handler.erl index 6b0a8a2..88324ff 100644 --- a/apps/relay_server/src/relay_server_udp_handler.erl +++ b/apps/relay_server/src/relay_server_udp_handler.erl @@ -98,13 +98,14 @@ handle_encrypted_datagram(Packet, State = #state{idle_timeout = IdleTimeout, cip {ok, PlainPacket} -> handle_datagram(PlainPacket, State); {error, Reason} -> - logger:debug("UDP relay ignored undecryptable datagram: ~p", [Reason]), + logger:error("UDP relay ignored undecryptable datagram: ~p", [Reason]), {noreply, State, IdleTimeout} end. handle_datagram(Packet, State = #state{idle_timeout = IdleTimeout}) -> case relay_server_udp_protocol:decode(Packet) of {ok, {open, StreamId, Payload}} -> + logger:debug("UDP handler open stream: ~p", [StreamId]), {noreply, handle_open(StreamId, Payload, State), IdleTimeout}; {ok, {data, StreamId, Payload}} -> {noreply, handle_data(StreamId, Payload, State), IdleTimeout}; @@ -118,7 +119,7 @@ handle_datagram(Packet, State = #state{idle_timeout = IdleTimeout}) -> {noreply, State, IdleTimeout} end. -handle_open(StreamId, Payload, State = #state{streams = Streams}) -> +handle_open(StreamId, Payload, State = #state{streams = Streams, users = Users}) -> case maps:is_key(StreamId, Streams) of true -> send_error(StreamId, <<"stream already open">>, State), @@ -126,7 +127,7 @@ handle_open(StreamId, Payload, State = #state{streams = Streams}) -> false -> case relay_server_udp_protocol:decode_open_request(Payload) of {ok, Request} -> - case authenticate(Request, State#state.users) of + case authenticate(Request, Users) of ok -> open_stream(StreamId, Request, State); error -> @@ -141,7 +142,7 @@ handle_open(StreamId, Payload, State = #state{streams = Streams}) -> end end. -open_stream(StreamId, #{host := Host, port := Port}, State) -> +open_stream(StreamId, #{host := Host, port := Port}, State = #state{streams = Streams, sockets = Sockets}) -> case connect_remote(Host, Port, State#state.connect_timeout) of {ok, Socket} -> Stream = #stream{ @@ -151,7 +152,7 @@ open_stream(StreamId, #{host := Host, port := Port}, State) -> port = Port }, logger:debug("UDP relay stream ~p opened to ~ts:~p", [StreamId, Host, Port]), - put_stream(Stream, State); + State#state{streams = maps:put(StreamId, Stream, Streams), sockets = maps:put(Socket, StreamId, Sockets)}; {error, Reason} -> Message = iolist_to_binary(io_lib:format("connect failed: ~p", [Reason])), send_error(StreamId, Message, State), @@ -223,12 +224,6 @@ send_remote(#stream{socket = Socket}, Payload) -> set_active_once(#stream{socket = Socket}) -> inet:setopts(Socket, [{active, once}]). -put_stream(Stream = #stream{id = StreamId, socket = Socket}, State) -> - State#state{ - streams = maps:put(StreamId, Stream, State#state.streams), - sockets = maps:put(Socket, StreamId, State#state.sockets) - }. - close_stream(StreamId, State = #state{streams = Streams}) -> case maps:get(StreamId, Streams, undefined) of undefined -> diff --git a/config/sys.config b/config/sys.config index 1340700..0e99d3e 100644 --- a/config/sys.config +++ b/config/sys.config @@ -3,7 +3,7 @@ {udp_server, [ {enabled, true}, {listener, 'relay_server/udp'}, - {listen_on, 16380}, + {listen_on, 1443}, {idle_timeout, 30000}, {connect_timeout, 5000}, {max_connections, 1024},