diff --git a/proxy/dokodemo/dokodemo.go b/proxy/dokodemo/dokodemo.go index 02f7b6fc..350c0e17 100644 --- a/proxy/dokodemo/dokodemo.go +++ b/proxy/dokodemo/dokodemo.go @@ -117,7 +117,12 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn in } }() - reader := buf.NewReader(conn) + var reader buf.Reader + if dest.Network == net.Network_UDP { + reader = &buf.PacketReader{Reader: conn} + } else { + reader = buf.NewReader(conn) + } if err := buf.Copy(reader, link.Writer, buf.UpdateActivity(timer)); err != nil { return newError("failed to transport request").Base(err) } @@ -151,7 +156,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn in defer tConn.Close() writer = &buf.SequentialWriter{Writer: tConn} - tReader := buf.NewReader(tConn) + tReader := &buf.PacketReader{Reader: tConn} requestCount++ tproxyRequest = func() error { defer func() { diff --git a/proxy/shadowsocks/server.go b/proxy/shadowsocks/server.go index c2d6c118..cbafb0f9 100644 --- a/proxy/shadowsocks/server.go +++ b/proxy/shadowsocks/server.go @@ -97,7 +97,7 @@ func (s *Server) handlerUDPPayload(ctx context.Context, conn internet.Connection } inbound.User = s.user - reader := buf.NewReader(conn) + reader := &buf.PacketReader{Reader: conn} for { mpayload, err := reader.ReadMultiBuffer() if err != nil { diff --git a/proxy/socks/server.go b/proxy/socks/server.go index 4e5f46fd..de111b18 100644 --- a/proxy/socks/server.go +++ b/proxy/socks/server.go @@ -200,7 +200,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn internet.Connection, newError("client UDP connection from ", inbound.Source).WriteToLog(session.ExportIDToError(ctx)) } - reader := buf.NewReader(conn) + reader := &buf.PacketReader{Reader: conn} for { mpayload, err := reader.ReadMultiBuffer() if err != nil {