From 682b4330fcf721fe1a421c284e152caad6fc093b Mon Sep 17 00:00:00 2001 From: yusing Date: Wed, 7 Jan 2026 14:34:14 +0800 Subject: [PATCH] feat(agent/stream): log UDP server errors --- agent/pkg/agent/stream/udp_server.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/agent/pkg/agent/stream/udp_server.go b/agent/pkg/agent/stream/udp_server.go index 894496de..3e36e2d2 100644 --- a/agent/pkg/agent/stream/udp_server.go +++ b/agent/pkg/agent/stream/udp_server.go @@ -9,6 +9,8 @@ import ( "time" "github.com/pion/dtls/v3" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" ) type UDPServer struct { @@ -76,25 +78,32 @@ func (s *UDPServer) Close() error { return nil } +func (s *UDPServer) logger(clientConn net.Conn) *zerolog.Logger { + l := log.With().Str("protocol", "udp"). + Str("addr", s.laddr.String()). + Str("remote", clientConn.RemoteAddr().String()).Logger() + return &l +} + func (s *UDPServer) handleDTLSConnection(clientConn net.Conn) { defer clientConn.Close() // Read the stream header once as a handshake. var headerBuf [headerSize]byte if _, err := io.ReadFull(clientConn, headerBuf[:]); err != nil { - // TODO: log error + s.logger(clientConn).Err(err).Msg("failed to read stream header") return } header := ToHeader(headerBuf) if !header.Validate() { - // TODO: log error + s.logger(clientConn).Error().Bytes("header", headerBuf[:]).Msg("invalid stream header received") return } host, port := header.GetHostPort() dstConn, err := s.connMgr.GetOrCreateDestConnection(clientConn, host, port) if err != nil { - // TODO: log error + s.logger(clientConn).Err(err).Msg("failed to get or create destination connection") return } defer s.connMgr.DeleteDestConnection(clientConn) @@ -111,11 +120,11 @@ func (s *UDPServer) handleDTLSConnection(clientConn net.Conn) { default: n, err := clientConn.Read(buf) if err != nil { - // TODO: log error + s.logger(clientConn).Err(err).Msg("failed to read from client") return } if _, err := dstConn.Write(buf[:n]); err != nil { - // TODO: log error + s.logger(clientConn).Err(err).Msgf("failed to write %d bytes to destination", n) return } } @@ -152,11 +161,11 @@ func (s *UDPServer) forwardFromDestination(dstConn *net.UDPConn, clientConn net. if netErr, ok := err.(net.Error); ok && netErr.Timeout() { return } - // TODO: log error + s.logger(dstConn).Err(err).Msg("failed to read from destination") return } if _, err := clientConn.Write(buffer[:n]); err != nil { - // TODO: log error + s.logger(dstConn).Err(err).Msgf("failed to write %d bytes to client", n) return } }