From 2c4bd83ae157b64900d844597dfb341e4d3a695b Mon Sep 17 00:00:00 2001 From: Toby Date: Wed, 8 Dec 2021 02:02:55 -0800 Subject: [PATCH] chore: code improvements --- cmd/client.go | 66 ++++++++------------------------------------------- cmd/config.go | 43 +++++++++++++++++++++++++-------- 2 files changed, 43 insertions(+), 66 deletions(-) diff --git a/cmd/client.go b/cmd/client.go index 782f637..dceef3d 100644 --- a/cmd/client.go +++ b/cmd/client.go @@ -245,35 +245,12 @@ func client(config *clientConfig) { }() } - //deprecated, but still support, compatibility if len(config.TCPRelay.Listen) > 0 { - go func() { - rl, err := relay.NewTCPRelay(client, transport.DefaultTransport, - config.TCPRelay.Listen, config.TCPRelay.Remote, - time.Duration(config.TCPRelay.Timeout)*time.Second, - func(addr net.Addr) { - logrus.WithFields(logrus.Fields{ - "src": addr.String(), - }).Debug("TCP relay request") - }, - func(addr net.Addr, err error) { - if err != io.EOF { - logrus.WithFields(logrus.Fields{ - "error": err, - "src": addr.String(), - }).Info("TCP relay error") - } else { - logrus.WithFields(logrus.Fields{ - "src": addr.String(), - }).Debug("TCP relay EOF") - } - }) - if err != nil { - logrus.WithField("error", err).Fatal("Failed to initialize TCP relay") - } - logrus.WithField("addr", config.TCPRelay.Listen).Info("TCP relay up and running") - errChan <- rl.ListenAndServe() - }() + config.TCPRelays = append(config.TCPRelays, Relay{ + Listen: config.TCPRelay.Listen, + Remote: config.TCPRelay.Remote, + Timeout: config.TCPRelay.Timeout, + }) } if len(config.TCPRelays) > 0 { @@ -308,35 +285,12 @@ func client(config *clientConfig) { } } - // deprecated, but still support, compatibility if len(config.UDPRelay.Listen) > 0 { - go func() { - rl, err := relay.NewUDPRelay(client, transport.DefaultTransport, - config.UDPRelay.Listen, config.UDPRelay.Remote, - time.Duration(config.UDPRelay.Timeout)*time.Second, - func(addr net.Addr) { - logrus.WithFields(logrus.Fields{ - "src": addr.String(), - }).Debug("UDP relay request") - }, - func(addr net.Addr, err error) { - if err != relay.ErrTimeout { - logrus.WithFields(logrus.Fields{ - "error": err, - "src": addr.String(), - }).Info("UDP relay error") - } else { - logrus.WithFields(logrus.Fields{ - "src": addr.String(), - }).Debug("UDP relay session closed") - } - }) - if err != nil { - logrus.WithField("error", err).Fatal("Failed to initialize UDP relay") - } - logrus.WithField("addr", config.UDPRelay.Listen).Info("UDP relay up and running") - errChan <- rl.ListenAndServe() - }() + config.UDPRelays = append(config.UDPRelays, Relay{ + Listen: config.UDPRelay.Listen, + Remote: config.UDPRelay.Remote, + Timeout: config.UDPRelay.Timeout, + }) } if len(config.UDPRelays) > 0 { diff --git a/cmd/config.go b/cmd/config.go index 019922b..ee7ac9a 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -78,6 +78,19 @@ type Relay struct { Timeout int `json:"timeout"` } +func (r *Relay) Check() error { + if len(r.Listen) == 0 { + return errors.New("no relay listen address") + } + if len(r.Remote) == 0 { + return errors.New("no relay remote address") + } + if r.Timeout != 0 && r.Timeout <= 4 { + return errors.New("invalid relay timeout") + } + return nil +} + type clientConfig struct { Server string `json:"server"` UpMbps int `json:"up_mbps"` @@ -108,9 +121,9 @@ type clientConfig struct { Persist bool `json:"persist"` } `json:"tun"` TCPRelays []Relay `json:"relay_tcps"` - TCPRelay Relay `json:"relay_tcp"` // deprecated, but still support, compatibility + TCPRelay Relay `json:"relay_tcp"` // deprecated, but we still support it for backward compatibility UDPRelays []Relay `json:"relay_udps"` - UDPRelay Relay `json:"relay_udp"` // deprecated, but still support, compatibility + UDPRelay Relay `json:"relay_udp"` // deprecated, but we still support it for backward compatibility TCPTProxy struct { Listen string `json:"listen"` Timeout int `json:"timeout"` @@ -139,12 +152,6 @@ func (c *clientConfig) Check() error { len(c.TCPTProxy.Listen) == 0 && len(c.UDPTProxy.Listen) == 0 { return errors.New("please enable at least one mode") } - if len(c.TCPRelay.Listen) > 0 && len(c.TCPRelay.Remote) == 0 { - return errors.New("no TCP relay remote address") - } - if len(c.UDPRelay.Listen) > 0 && len(c.UDPRelay.Remote) == 0 { - return errors.New("no UDP relay remote address") - } if c.SOCKS5.Timeout != 0 && c.SOCKS5.Timeout <= 4 { return errors.New("invalid SOCKS5 timeout") } @@ -154,12 +161,28 @@ func (c *clientConfig) Check() error { if c.TUN.Timeout != 0 && c.TUN.Timeout < 4 { return errors.New("invalid TUN timeout") } + if len(c.TCPRelay.Listen) > 0 && len(c.TCPRelay.Remote) == 0 { + return errors.New("no TCP relay remote address") + } + if len(c.UDPRelay.Listen) > 0 && len(c.UDPRelay.Remote) == 0 { + return errors.New("no UDP relay remote address") + } if c.TCPRelay.Timeout != 0 && c.TCPRelay.Timeout <= 4 { return errors.New("invalid TCP relay timeout") } if c.UDPRelay.Timeout != 0 && c.UDPRelay.Timeout <= 4 { return errors.New("invalid UDP relay timeout") } + for _, r := range c.TCPRelays { + if err := r.Check(); err != nil { + return err + } + } + for _, r := range c.UDPRelays { + if err := r.Check(); err != nil { + return err + } + } if c.TCPTProxy.Timeout != 0 && c.TCPTProxy.Timeout <= 4 { return errors.New("invalid TCP TProxy timeout") } @@ -177,10 +200,10 @@ func (c *clientConfig) Check() error { return errors.New("invalid receive window size") } if len(c.TCPRelay.Listen) > 0 { - logrus.Warn("config 'relay_tcp' is deprecated, please use 'relay_tcps' instead of it") + logrus.Warn("'relay_tcp' is deprecated, please use 'relay_tcps' instead") } if len(c.UDPRelay.Listen) > 0 { - logrus.Warn("config 'relay_udp' is deprecated, please use 'relay_udps' instead of it") + logrus.Warn("config 'relay_udp' is deprecated, please use 'relay_udps' instead") } return nil }