Parcourir la source

fix lint errors

Darien Raymond il y a 7 ans
Parent
commit
9d7f43a299

+ 3 - 4
common/buf/writer.go

@@ -3,6 +3,7 @@ package buf
 import (
 	"io"
 
+	"v2ray.com/core/common"
 	"v2ray.com/core/common/errors"
 )
 
@@ -23,8 +24,7 @@ func (w *BufferToBytesWriter) WriteMultiBuffer(mb MultiBuffer) error {
 	defer mb.Release()
 
 	bs := mb.ToNetBuffers()
-	_, err := bs.WriteTo(w.Writer)
-	return err
+	return common.Error2(bs.WriteTo(w.Writer))
 }
 
 // ReadFrom implements io.ReaderFrom.
@@ -52,8 +52,7 @@ func NewBufferedWriter(writer Writer) *BufferedWriter {
 
 // WriteByte implements io.ByteWriter.
 func (w *BufferedWriter) WriteByte(c byte) error {
-	_, err := w.Write([]byte{c})
-	return err
+	return common.Error2(w.Write([]byte{c}))
 }
 
 // Write implements io.Writer.

+ 5 - 0
common/common.go

@@ -16,3 +16,8 @@ func Must2(v interface{}, err error) interface{} {
 	Must(err)
 	return v
 }
+
+// Error2 returns the err from the 2nd parameter.
+func Error2(v interface{}, err error) error {
+	return err
+}

+ 1 - 2
common/crypto/auth.go

@@ -113,8 +113,7 @@ func (r *AuthenticationReader) readSize() (int32, error) {
 		return s, nil
 	}
 	sizeBytes := make([]byte, r.sizeParser.SizeBytes())
-	_, err := io.ReadFull(r.reader, sizeBytes)
-	if err != nil {
+	if _, err := io.ReadFull(r.reader, sizeBytes); err != nil {
 		return 0, err
 	}
 	size, err := r.sizeParser.Decode(sizeBytes)

+ 3 - 2
common/crypto/io.go

@@ -4,6 +4,7 @@ import (
 	"crypto/cipher"
 	"io"
 
+	"v2ray.com/core/common"
 	"v2ray.com/core/common/buf"
 )
 
@@ -50,6 +51,7 @@ func (w *CryptionWriter) Write(data []byte) (int, error) {
 	return w.writer.Write(data)
 }
 
+// WriteMultiBuffer implements buf.Writer.
 func (w *CryptionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
 	defer mb.Release()
 
@@ -57,6 +59,5 @@ func (w *CryptionWriter) WriteMultiBuffer(mb buf.MultiBuffer) error {
 	for _, b := range bs {
 		w.stream.XORKeyStream(b, b)
 	}
-	_, err := bs.WriteTo(w.writer)
-	return err
+	return common.Error2(bs.WriteTo(w.writer))
 }

+ 49 - 39
common/protocol/address.go

@@ -3,8 +3,10 @@ package protocol
 import (
 	"io"
 
+	"v2ray.com/core/common"
 	"v2ray.com/core/common/buf"
 	"v2ray.com/core/common/net"
+	"v2ray.com/core/common/signal"
 )
 
 type AddressOption func(*AddressParser)
@@ -30,6 +32,7 @@ func WithAddressTypeParser(atp AddressTypeParser) AddressOption {
 	}
 }
 
+// AddressParser is a utility for reading and writer addresses.
 type AddressParser struct {
 	addrTypeMap map[byte]net.AddressFamily
 	addrByteMap map[net.AddressFamily]byte
@@ -37,6 +40,7 @@ type AddressParser struct {
 	typeParser  AddressTypeParser
 }
 
+// NewAddressParser creates a new AddressParser
 func NewAddressParser(options ...AddressOption) *AddressParser {
 	p := &AddressParser{
 		addrTypeMap: make(map[byte]net.AddressFamily, 8),
@@ -118,30 +122,42 @@ func (p *AddressParser) readAddress(b *buf.Buffer, reader io.Reader) (net.Addres
 	}
 }
 
+// ReadAddressPort reads address and port from the given input.
 func (p *AddressParser) ReadAddressPort(buffer *buf.Buffer, input io.Reader) (net.Address, net.Port, error) {
 	if buffer == nil {
 		buffer = buf.New()
 		defer buffer.Release()
 	}
 
-	if p.portFirst {
-		port, err := p.readPort(buffer, input)
+	var addr net.Address
+	var port net.Port
+
+	pTask := func() error {
+		lp, err := p.readPort(buffer, input)
 		if err != nil {
-			return nil, 0, err
+			return err
 		}
-		addr, err := p.readAddress(buffer, input)
+		port = lp
+		return nil
+	}
+
+	aTask := func() error {
+		a, err := p.readAddress(buffer, input)
 		if err != nil {
-			return nil, 0, err
+			return err
 		}
-		return addr, port, nil
+		addr = a
+		return nil
 	}
 
-	addr, err := p.readAddress(buffer, input)
-	if err != nil {
-		return nil, 0, err
+	var err error
+
+	if p.portFirst {
+		err = signal.Execute(pTask, aTask)
+	} else {
+		err = signal.Execute(aTask, pTask)
 	}
 
-	port, err := p.readPort(buffer, input)
 	if err != nil {
 		return nil, 0, err
 	}
@@ -150,8 +166,7 @@ func (p *AddressParser) ReadAddressPort(buffer *buf.Buffer, input io.Reader) (ne
 }
 
 func (p *AddressParser) writePort(writer io.Writer, port net.Port) error {
-	_, err := writer.Write(port.Bytes(nil))
-	return err
+	return common.Error2(writer.Write(port.Bytes(nil)))
 }
 
 func (p *AddressParser) writeAddress(writer io.Writer, address net.Address) error {
@@ -162,43 +177,38 @@ func (p *AddressParser) writeAddress(writer io.Writer, address net.Address) erro
 
 	switch address.Family() {
 	case net.AddressFamilyIPv4, net.AddressFamilyIPv6:
-		if _, err := writer.Write([]byte{tb}); err != nil {
-			return err
-		}
-		if _, err := writer.Write(address.IP()); err != nil {
-			return err
-		}
+		return signal.Execute(func() error {
+			return common.Error2(writer.Write([]byte{tb}))
+		}, func() error {
+			return common.Error2(writer.Write(address.IP()))
+		})
 	case net.AddressFamilyDomain:
 		domain := address.Domain()
 		if isDomainTooLong(domain) {
 			return newError("Super long domain is not supported: ", domain)
 		}
-		if _, err := writer.Write([]byte{tb, byte(len(domain))}); err != nil {
-			return err
-		}
-		if _, err := writer.Write([]byte(domain)); err != nil {
-			return err
-		}
+		return signal.Execute(func() error {
+			return common.Error2(writer.Write([]byte{tb, byte(len(domain))}))
+		}, func() error {
+			return common.Error2(writer.Write([]byte(domain)))
+		})
+	default:
+		panic("Unknown family type.")
 	}
-	return nil
 }
 
+// WriteAddressPort writes address and port into the given writer.
 func (p *AddressParser) WriteAddressPort(writer io.Writer, addr net.Address, port net.Port) error {
-	if p.portFirst {
-		if err := p.writePort(writer, port); err != nil {
-			return err
-		}
-		if err := p.writeAddress(writer, addr); err != nil {
-			return err
-		}
-		return nil
+	pTask := func() error {
+		return p.writePort(writer, port)
 	}
-
-	if err := p.writeAddress(writer, addr); err != nil {
-		return err
+	aTask := func() error {
+		return p.writeAddress(writer, addr)
 	}
-	if err := p.writePort(writer, port); err != nil {
-		return err
+
+	if p.portFirst {
+		return signal.Execute(pTask, aTask)
 	}
-	return nil
+
+	return signal.Execute(aTask, pTask)
 }

+ 10 - 0
common/signal/exec.go

@@ -12,6 +12,16 @@ func executeAndFulfill(f func() error, done chan<- error) {
 	close(done)
 }
 
+// Execute runs a list of tasks sequentially, returns the first error encountered or nil if all tasks pass.
+func Execute(tasks ...func() error) error {
+	for _, task := range tasks {
+		if err := task(); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
 // ExecuteAsync executes a function asynchronously and return its result.
 func ExecuteAsync(f func() error) <-chan error {
 	done := make(chan error, 1)

+ 5 - 1
common/signal/task.go

@@ -11,6 +11,8 @@ type PeriodicTask struct {
 	Interval time.Duration
 	// Execute is the task function
 	Execute func() error
+	// OnFailure will be called when Execute returns non-nil error
+	OnError func(error)
 
 	access sync.Mutex
 	timer  *time.Timer
@@ -30,7 +32,9 @@ func (t *PeriodicTask) checkedExecute() error {
 	}
 
 	t.timer = time.AfterFunc(t.Interval, func() {
-		t.checkedExecute()
+		if err := t.checkedExecute(); err != nil && t.OnError != nil {
+			t.OnError(err)
+		}
 	})
 
 	return nil

+ 1 - 3
common/uuid/uuid.go

@@ -94,9 +94,7 @@ func ParseString(str string) (UUID, error) {
 			text = text[1:]
 		}
 
-		_, err := hex.Decode(b[:byteGroup/2], text[:byteGroup])
-
-		if err != nil {
+		if _, err := hex.Decode(b[:byteGroup/2], text[:byteGroup]); err != nil {
 			return uuid, err
 		}
 

+ 1 - 2
proxy/http/server.go

@@ -116,8 +116,7 @@ Start:
 	if len(s.config.Accounts) > 0 {
 		user, pass, ok := parseBasicAuth(request.Header.Get("Proxy-Authorization"))
 		if !ok || !s.config.HasAccount(user, pass) {
-			_, err := conn.Write([]byte("HTTP/1.1 407 Proxy Authentication Required\r\nProxy-Authenticate: Basic realm=\"proxy\"\r\n\r\n"))
-			return err
+			return common.Error2(conn.Write([]byte("HTTP/1.1 407 Proxy Authentication Required\r\nProxy-Authenticate: Basic realm=\"proxy\"\r\n\r\n")))
 		}
 	}
 

+ 3 - 6
proxy/shadowsocks/protocol.go

@@ -138,8 +138,7 @@ func WriteTCPRequest(request *protocol.RequestHeader, writer io.Writer) (buf.Wri
 	if account.Cipher.IVSize() > 0 {
 		iv = make([]byte, account.Cipher.IVSize())
 		common.Must2(rand.Read(iv))
-		_, err = writer.Write(iv)
-		if err != nil {
+		if _, err = writer.Write(iv); err != nil {
 			return nil, newError("failed to write IV")
 		}
 	}
@@ -186,8 +185,7 @@ func ReadTCPResponse(user *protocol.User, reader io.Reader) (buf.Reader, error)
 	var iv []byte
 	if account.Cipher.IVSize() > 0 {
 		iv = make([]byte, account.Cipher.IVSize())
-		_, err = io.ReadFull(reader, iv)
-		if err != nil {
+		if _, err = io.ReadFull(reader, iv); err != nil {
 			return nil, newError("failed to read IV").Base(err)
 		}
 	}
@@ -207,8 +205,7 @@ func WriteTCPResponse(request *protocol.RequestHeader, writer io.Writer) (buf.Wr
 	if account.Cipher.IVSize() > 0 {
 		iv = make([]byte, account.Cipher.IVSize())
 		common.Must2(rand.Read(iv))
-		_, err = writer.Write(iv)
-		if err != nil {
+		if _, err = writer.Write(iv); err != nil {
 			return nil, newError("failed to write IV.").Base(err)
 		}
 	}

+ 1 - 2
proxy/socks/server.go

@@ -122,8 +122,7 @@ func (s *Server) processTCP(ctx context.Context, conn internet.Connection, dispa
 func (*Server) handleUDP(c io.Reader) error {
 	// The TCP connection closes after this method returns. We need to wait until
 	// the client closes it.
-	_, err := io.Copy(buf.DiscardBytes, c)
-	return err
+	return common.Error2(io.Copy(buf.DiscardBytes, c))
 }
 
 func (s *Server) transport(ctx context.Context, reader io.Reader, writer io.Writer, dest net.Destination, dispatcher core.Dispatcher) error {