From 4f08b7c795b1ebcfe9714a2bc65337ac2505bba4 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Thu, 7 Feb 2019 16:36:54 +0100 Subject: [PATCH] fix reading udp packets --- proxy/dokodemo/dokodemo.go | 9 +++++++-- proxy/shadowsocks/server.go | 2 +- proxy/socks/server.go | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/proxy/dokodemo/dokodemo.go b/proxy/dokodemo/dokodemo.go index 02f7b6fc5..350c0e179 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 c2d6c1187..cbafb0f94 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 4e5f46fd8..de111b180 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 {