diff --git a/dialer/sockopt_darwin.go b/dialer/sockopt_darwin.go index 16b1f5e..1f41f5c 100644 --- a/dialer/sockopt_darwin.go +++ b/dialer/sockopt_darwin.go @@ -9,7 +9,7 @@ import ( func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) (err error) { if opts == nil || !isTCPSocket(network) && !isUDPSocket(network) { - return + return err } var innerErr error @@ -41,5 +41,5 @@ func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) if innerErr != nil { err = innerErr } - return + return err } diff --git a/dialer/sockopt_freebsd.go b/dialer/sockopt_freebsd.go index 02d0f4b..0cd4ba3 100644 --- a/dialer/sockopt_freebsd.go +++ b/dialer/sockopt_freebsd.go @@ -9,7 +9,7 @@ import ( func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) (err error) { if opts == nil || !isTCPSocket(network) && !isUDPSocket(network) { - return + return err } var innerErr error @@ -29,5 +29,5 @@ func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) if innerErr != nil { err = innerErr } - return + return err } diff --git a/dialer/sockopt_linux.go b/dialer/sockopt_linux.go index b932ac6..bbb4c30 100644 --- a/dialer/sockopt_linux.go +++ b/dialer/sockopt_linux.go @@ -9,7 +9,7 @@ import ( func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) (err error) { if opts == nil || !isTCPSocket(network) && !isUDPSocket(network) { - return + return err } var innerErr error @@ -40,5 +40,5 @@ func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) if innerErr != nil { err = innerErr } - return + return err } diff --git a/dialer/sockopt_openbsd.go b/dialer/sockopt_openbsd.go index 361ee80..6d0ab36 100644 --- a/dialer/sockopt_openbsd.go +++ b/dialer/sockopt_openbsd.go @@ -9,7 +9,7 @@ import ( func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) (err error) { if opts == nil || !isTCPSocket(network) && !isUDPSocket(network) { - return + return err } var innerErr error @@ -29,5 +29,5 @@ func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) if innerErr != nil { err = innerErr } - return + return err } diff --git a/dialer/sockopt_windows.go b/dialer/sockopt_windows.go index d52b2f5..1fdf2d5 100644 --- a/dialer/sockopt_windows.go +++ b/dialer/sockopt_windows.go @@ -16,7 +16,7 @@ const ( func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) (err error) { if opts == nil || !isTCPSocket(network) && !isUDPSocket(network) { - return + return err } var innerErr error @@ -51,7 +51,7 @@ func setSocketOptions(network, address string, c syscall.RawConn, opts *Options) if innerErr != nil { err = innerErr } - return + return err } func bindSocketToInterface4(handle windows.Handle, index uint32) error { diff --git a/engine/engine.go b/engine/engine.go index 3843ead..17ce555 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -191,12 +191,12 @@ func netstack(k *Key) (err error) { }() if _defaultProxy, err = parseProxy(k.Proxy); err != nil { - return + return err } tunnel.T().SetDialer(_defaultProxy) if _defaultDevice, err = parseDevice(k.Device, uint32(k.MTU)); err != nil { - return + return err } var multicastGroups []netip.Addr @@ -231,7 +231,7 @@ func netstack(k *Key) (err error) { MulticastGroups: multicastGroups, Options: opts, }); err != nil { - return + return err } log.Infof( diff --git a/proxy/http.go b/proxy/http.go index b0dec31..04e30ba 100644 --- a/proxy/http.go +++ b/proxy/http.go @@ -46,7 +46,7 @@ func (h *HTTP) DialContext(ctx context.Context, metadata *M.Metadata) (c net.Con }(c) err = h.shakeHand(metadata, c) - return + return c, err } func (h *HTTP) shakeHand(metadata *M.Metadata, rw io.ReadWriter) error { diff --git a/proxy/relay.go b/proxy/relay.go index 7dadc97..6bf10fd 100644 --- a/proxy/relay.go +++ b/proxy/relay.go @@ -89,10 +89,10 @@ func (rl *Relay) dialContext(ctx context.Context, metadata *M.Metadata) (rc *rel if rl.noDelay { if _, err = req.WriteTo(c); err != nil { - return + return rc, err } if err = readRelayResponse(c); err != nil { - return + return rc, err } } @@ -101,22 +101,22 @@ func (rl *Relay) dialContext(ctx context.Context, metadata *M.Metadata) (rc *rel rc = newRelayConn(c, metadata.Addr(), rl.noDelay, false) if !rl.noDelay { if _, err = req.WriteTo(rc.wbuf); err != nil { - return + return rc, err } } case M.UDP: rc = newRelayConn(c, metadata.Addr(), rl.noDelay, true) if !rl.noDelay { if _, err = req.WriteTo(rc.wbuf); err != nil { - return + return rc, err } } default: err = fmt.Errorf("network %s is unsupported", metadata.Network) - return + return rc, err } - return + return rc, err } type relayConn struct { @@ -151,7 +151,7 @@ func (rc *relayConn) Read(b []byte) (n int, err error) { } }) if err != nil { - return + return n, err } if !rc.udp { @@ -161,7 +161,7 @@ func (rc *relayConn) Read(b []byte) (n int, err error) { var bb [2]byte _, err = io.ReadFull(rc.Conn, bb[:]) if err != nil { - return + return n, err } dLen := int(binary.BigEndian.Uint16(bb[:])) @@ -174,7 +174,7 @@ func (rc *relayConn) Read(b []byte) (n int, err error) { _, err = io.ReadFull(rc.Conn, buf) n = copy(b, buf) - return + return n, err } func (rc *relayConn) WriteTo(b []byte, _ net.Addr) (int, error) { @@ -194,7 +194,7 @@ func (rc *relayConn) tcpWrite(b []byte) (n int, err error) { rc.wbuf.Write(b) _, err = rc.Conn.Write(rc.wbuf.Bytes()) rc.wbuf.Reset() - return + return n, err } return rc.Conn.Write(b) } @@ -202,7 +202,7 @@ func (rc *relayConn) tcpWrite(b []byte) (n int, err error) { func (rc *relayConn) udpWrite(b []byte) (n int, err error) { if len(b) > math.MaxUint16 { err = errors.New("write: data maximum exceeded") - return + return n, err } n = len(b) @@ -212,14 +212,14 @@ func (rc *relayConn) udpWrite(b []byte) (n int, err error) { rc.wbuf.Write(bb[:]) rc.wbuf.Write(b) _, err = rc.wbuf.WriteTo(rc.Conn) - return + return n, err } var bb [2]byte binary.BigEndian.PutUint16(bb[:], uint16(len(b))) _, err = rc.Conn.Write(bb[:]) if err != nil { - return + return n, err } return rc.Conn.Write(b) } diff --git a/proxy/shadowsocks.go b/proxy/shadowsocks.go index a64b276..fb32cb9 100644 --- a/proxy/shadowsocks.go +++ b/proxy/shadowsocks.go @@ -63,7 +63,7 @@ func (ss *Shadowsocks) DialContext(ctx context.Context, metadata *M.Metadata) (c c = ss.cipher.StreamConn(c) _, err = c.Write(serializeSocksAddr(metadata)) - return + return c, err } func (ss *Shadowsocks) DialUDP(*M.Metadata) (net.PacketConn, error) { @@ -96,7 +96,7 @@ func (pc *ssPacketConn) WriteTo(b []byte, addr net.Addr) (n int, err error) { } if err != nil { - return + return n, err } return pc.PacketConn.WriteTo(packet[3:], pc.rAddr) } diff --git a/proxy/socks4.go b/proxy/socks4.go index d850117..40ae3ef 100644 --- a/proxy/socks4.go +++ b/proxy/socks4.go @@ -41,5 +41,5 @@ func (ss *Socks4) DialContext(ctx context.Context, metadata *M.Metadata) (c net. }(c) err = socks4.ClientHandshake(c, metadata.DestinationAddress(), socks4.CmdConnect, ss.userID) - return + return c, err } diff --git a/proxy/socks5.go b/proxy/socks5.go index 19dd4ea..c109d0e 100644 --- a/proxy/socks5.go +++ b/proxy/socks5.go @@ -69,7 +69,7 @@ func (ss *Socks5) DialContext(ctx context.Context, metadata *M.Metadata) (c net. } _, err = socks5.ClientHandshake(c, serializeSocksAddr(metadata), socks5.CmdConnect, user) - return + return c, err } func (ss *Socks5) DialUDP(*M.Metadata) (_ net.PacketConn, err error) { @@ -161,7 +161,7 @@ func (pc *socksPacketConn) WriteTo(b []byte, addr net.Addr) (n int, err error) { } if err != nil { - return + return n, err } return pc.PacketConn.WriteTo(packet, pc.rAddr) } diff --git a/transport/shadowsocks/shadowaead/stream.go b/transport/shadowsocks/shadowaead/stream.go index 3a13ba5..c564f68 100755 --- a/transport/shadowsocks/shadowaead/stream.go +++ b/transport/shadowsocks/shadowaead/stream.go @@ -42,7 +42,7 @@ func (w *Writer) Write(p []byte) (n int, err error) { w.Seal(buf[:0], nonce, buf[:2], nil) increment(nonce) _, err = w.Writer.Write(buf) - return + return n, err } for nr := 0; n < len(p) && err == nil; n += nr { @@ -58,7 +58,7 @@ func (w *Writer) Write(p []byte) (n int, err error) { increment(nonce) _, err = w.Writer.Write(buf) } - return + return n, err } // ReadFrom reads from the given io.Reader until EOF or error, encrypts and @@ -80,13 +80,13 @@ func (w *Writer) ReadFrom(r io.Reader) (n int64, err error) { increment(nonce) if _, ew := w.Writer.Write(buf[:off+nr+tag]); ew != nil { err = ew - return + return n, err } if er != nil { if er != io.EOF { // ignore EOF as per io.ReaderFrom contract err = er } - return + return n, err } } } @@ -180,7 +180,7 @@ func (r *Reader) WriteTo(w io.Writer) (n int64, err error) { r.buf = nil } err = ew - return + return n, err } } @@ -189,7 +189,7 @@ func (r *Reader) WriteTo(w io.Writer) (n int64, err error) { if er != io.EOF { err = er } - return + return n, err } r.buf = r.buf[:nr] r.off = 0 diff --git a/transport/shadowsocks/shadowstream/stream.go b/transport/shadowsocks/shadowstream/stream.go index 6c4b0f6..894cb1d 100755 --- a/transport/shadowsocks/shadowstream/stream.go +++ b/transport/shadowsocks/shadowstream/stream.go @@ -28,7 +28,7 @@ func (w *Writer) Write(p []byte) (n int, err error) { w.XORKeyStream(buf, p[n:end]) nw, err = w.Writer.Write(buf[:end-n]) } - return + return n, err } func (w *Writer) ReadFrom(r io.Reader) (n int64, err error) { @@ -39,13 +39,13 @@ func (w *Writer) ReadFrom(r io.Reader) (n int64, err error) { b := buf[:nr] w.XORKeyStream(b, b) if _, err = w.Writer.Write(b); err != nil { - return + return n, err } if er != nil { if er != io.EOF { // ignore EOF as per io.ReaderFrom contract err = er } - return + return n, err } } } @@ -65,7 +65,7 @@ func (r *Reader) Read(p []byte) (n int, err error) { return 0, err } r.XORKeyStream(p, p[:n]) - return + return n, err } func (r *Reader) WriteTo(w io.Writer) (n int64, err error) { @@ -78,14 +78,14 @@ func (r *Reader) WriteTo(w io.Writer) (n int64, err error) { n += int64(nw) if ew != nil { err = ew - return + return n, err } } if er != nil { if er != io.EOF { // ignore EOF as per io.Copy contract (using src.WriteTo shortcut) err = er } - return + return n, err } } } diff --git a/transport/socks5/socks5.go b/transport/socks5/socks5.go index f8acbf6..da3236a 100644 --- a/transport/socks5/socks5.go +++ b/transport/socks5/socks5.go @@ -370,13 +370,13 @@ func ParseAddrString(s string) Addr { func DecodeUDPPacket(packet []byte) (addr Addr, payload []byte, err error) { if len(packet) < 5 { err = errors.New("insufficient length of packet") - return + return addr, payload, err } // packet[0] and packet[1] are reserved if !bytes.Equal(packet[:2], []byte{0x00, 0x00}) { err = errors.New("reserved fields should be zero") - return + return addr, payload, err } // The FRAG field indicates whether or not this datagram is one of a @@ -396,7 +396,7 @@ func DecodeUDPPacket(packet []byte) (addr Addr, payload []byte, err error) { // Ref: https://datatracker.ietf.org/doc/html/rfc1928#section-7 if packet[2] != 0x00 /* fragments */ { err = errors.New("discarding fragmented payload") - return + return addr, payload, err } addr = SplitAddr(packet[3:]) @@ -405,7 +405,7 @@ func DecodeUDPPacket(packet []byte) (addr Addr, payload []byte, err error) { } payload = packet[3+len(addr):] - return + return addr, payload, err } func EncodeUDPPacket(addr Addr, payload []byte) (packet []byte, err error) { @@ -413,5 +413,5 @@ func EncodeUDPPacket(addr Addr, payload []byte) (packet []byte, err error) { return nil, errors.New("address is invalid") } packet = bytes.Join([][]byte{{0x00, 0x00, 0x00}, addr, payload}, nil) - return + return packet, err }