From d5147f19358c35ae6b136cb03120f2a3b22de98e Mon Sep 17 00:00:00 2001 From: 9seconds Date: Fri, 5 Mar 2021 14:12:38 +0300 Subject: [PATCH] Rename dialers into network --- main.go | 6 ++-- mtglib/dialers/socks5.go | 23 -------------- mtglib/{dialers => network}/consts.go | 2 +- mtglib/{dialers => network}/default.go | 12 ++++---- mtglib/{dialers => network}/interfaces.go | 5 ++-- .../{dialers/dialer.go => network/network.go} | 28 ++++++++--------- mtglib/{dialers => network}/shadowsocks.go | 30 +++++++------------ mtglib/network/socks5.go | 23 ++++++++++++++ 8 files changed, 60 insertions(+), 69 deletions(-) delete mode 100644 mtglib/dialers/socks5.go rename mtglib/{dialers => network}/consts.go (88%) rename mtglib/{dialers => network}/default.go (81%) rename mtglib/{dialers => network}/interfaces.go (54%) rename mtglib/{dialers/dialer.go => network/network.go} (72%) rename mtglib/{dialers => network}/shadowsocks.go (59%) create mode 100644 mtglib/network/socks5.go diff --git a/main.go b/main.go index 3281a3f..5f8b319 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,7 @@ import ( "os" "time" - "github.com/9seconds/mtg/v2/mtglib/dialers" + "github.com/9seconds/mtg/v2/mtglib/network" ) var version = "dev" // has to be set by ldflags @@ -19,8 +19,8 @@ func main() { fmt.Println(parseRawConfig(f)) - bd, _ := dialers.NewDefaultBaseDialer(0, 0) - d, _ := dialers.MakeDialer(bd, "9.9.9.9", 0) + bd, _ := network.NewDefaultDialer(0, 0) + d, _ := network.NewNetwork(bd, "9.9.9.9", 0) r, err := d.HTTP.Get("https://ifconfig.co") diff --git a/mtglib/dialers/socks5.go b/mtglib/dialers/socks5.go deleted file mode 100644 index f5f93ca..0000000 --- a/mtglib/dialers/socks5.go +++ /dev/null @@ -1,23 +0,0 @@ -package dialers - -import ( - "fmt" - "net/url" - "time" - - "golang.org/x/net/proxy" -) - -func NewSocks5BaseDialer(proxyUrl *url.URL, timeout time.Duration, bufferSize int) (BaseDialer, error) { - baseDialer, err := NewDefaultBaseDialer(timeout, bufferSize) - if err != nil { - return nil, fmt.Errorf("cannot initialize base dialer: %w", err) - } - - rv, err := proxy.FromURL(proxyUrl, baseDialer.(*defaultBaseDialer)) - if err != nil { - return nil, fmt.Errorf("cannot initialize socks5 proxy dialer: %w", err) - } - - return rv.(BaseDialer), nil -} diff --git a/mtglib/dialers/consts.go b/mtglib/network/consts.go similarity index 88% rename from mtglib/dialers/consts.go rename to mtglib/network/consts.go index 40a022d..68f00fc 100644 --- a/mtglib/dialers/consts.go +++ b/mtglib/network/consts.go @@ -1,4 +1,4 @@ -package dialers +package network import "time" diff --git a/mtglib/dialers/default.go b/mtglib/network/default.go similarity index 81% rename from mtglib/dialers/default.go rename to mtglib/network/default.go index feeda9d..67804a8 100644 --- a/mtglib/dialers/default.go +++ b/mtglib/network/default.go @@ -1,4 +1,4 @@ -package dialers +package network import ( "context" @@ -9,17 +9,17 @@ import ( "github.com/libp2p/go-reuseport" ) -type defaultBaseDialer struct { +type defaultDialer struct { net.Dialer bufferSize int } -func (d *defaultBaseDialer) Dial(network, address string) (net.Conn, error) { +func (d *defaultDialer) Dial(network, address string) (net.Conn, error) { return d.DialContext(context.Background(), network, address) } -func (d *defaultBaseDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) { +func (d *defaultDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) { switch network { case "tcp", "tcp4", "tcp6": default: @@ -56,7 +56,7 @@ func (d *defaultBaseDialer) DialContext(ctx context.Context, network, address st return tcpConn, nil } -func NewDefaultBaseDialer(timeout time.Duration, bufferSize int) (BaseDialer, error) { +func NewDefaultDialer(timeout time.Duration, bufferSize int) (Dialer, error) { switch { case timeout < 0: return nil, fmt.Errorf("timeout %v should be positive number", timeout) @@ -72,7 +72,7 @@ func NewDefaultBaseDialer(timeout time.Duration, bufferSize int) (BaseDialer, er bufferSize = DefaultBufferSize } - return &defaultBaseDialer{ + return &defaultDialer{ Dialer: net.Dialer{ Timeout: timeout, Control: reuseport.Control, diff --git a/mtglib/dialers/interfaces.go b/mtglib/network/interfaces.go similarity index 54% rename from mtglib/dialers/interfaces.go rename to mtglib/network/interfaces.go index 774aa77..4c7f972 100644 --- a/mtglib/dialers/interfaces.go +++ b/mtglib/network/interfaces.go @@ -1,11 +1,10 @@ -package dialers +package network import ( "context" "net" ) -type BaseDialer interface { - Dial(network, address string) (net.Conn, error) +type Dialer interface { DialContext(ctx context.Context, network, address string) (net.Conn, error) } diff --git a/mtglib/dialers/dialer.go b/mtglib/network/network.go similarity index 72% rename from mtglib/dialers/dialer.go rename to mtglib/network/network.go index 3f8d1be..83cb4f7 100644 --- a/mtglib/dialers/dialer.go +++ b/mtglib/network/network.go @@ -1,4 +1,4 @@ -package dialers +package network import ( "context" @@ -11,18 +11,18 @@ import ( doh "github.com/babolivier/go-doh-client" ) -type Dialer struct { +type Network struct { HTTP http.Client DNS doh.Resolver - baseDialer BaseDialer + dialer Dialer } -func (d *Dialer) Dial(network, address string) (net.Conn, error) { +func (d *Network) Dial(network, address string) (net.Conn, error) { return d.DialContext(context.Background(), network, address) } -func (d *Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) { +func (d *Network) DialContext(ctx context.Context, network, address string) (net.Conn, error) { host, port, _ := net.SplitHostPort(address) ips, err := d.resolveIPs(network, host) @@ -35,7 +35,7 @@ func (d *Dialer) DialContext(ctx context.Context, network, address string) (net. }) for _, v := range ips { - if conn, err := d.baseDialer.DialContext(ctx, network, net.JoinHostPort(v, port)); err == nil { + if conn, err := d.dialer.DialContext(ctx, network, net.JoinHostPort(v, port)); err == nil { return conn, nil } } @@ -43,7 +43,7 @@ func (d *Dialer) DialContext(ctx context.Context, network, address string) (net. return nil, fmt.Errorf("cannot dial to %s:%s", network, address) } -func (d *Dialer) resolveIPs(network, address string) ([]string, error) { +func (d *Network) resolveIPs(network, address string) ([]string, error) { if net.ParseIP(address) != nil { return []string{address}, nil } @@ -75,7 +75,7 @@ func (d *Dialer) resolveIPs(network, address string) ([]string, error) { return ips, nil } -func MakeDialer(base BaseDialer, dohHostname string, httpTimeout time.Duration) (*Dialer, error) { +func NewNetwork(dialer Dialer, dohHostname string, httpTimeout time.Duration) (*Network, error) { switch { case httpTimeout < 0: return nil, fmt.Errorf("timeout should be positive number %v", httpTimeout) @@ -90,23 +90,23 @@ func MakeDialer(base BaseDialer, dohHostname string, httpTimeout time.Duration) dohHTTPClient := &http.Client{ Timeout: httpTimeout, Transport: &http.Transport{ - DialContext: base.DialContext, + DialContext: dialer.DialContext, }, } - rv := &Dialer{ - baseDialer: base, + network := &Network{ + dialer: dialer, DNS: doh.Resolver{ Host: dohHostname, Class: doh.IN, HTTPClient: dohHTTPClient, }, } - rv.HTTP = http.Client{ + network.HTTP = http.Client{ Timeout: httpTimeout, Transport: &http.Transport{ - DialContext: rv.DialContext, + DialContext: network.DialContext, }, } - return rv, nil + return network, nil } diff --git a/mtglib/dialers/shadowsocks.go b/mtglib/network/shadowsocks.go similarity index 59% rename from mtglib/dialers/shadowsocks.go rename to mtglib/network/shadowsocks.go index 1929fa2..5fff10a 100644 --- a/mtglib/dialers/shadowsocks.go +++ b/mtglib/network/shadowsocks.go @@ -1,4 +1,4 @@ -package dialers +package network import ( "context" @@ -12,23 +12,15 @@ import ( shadowsocks "github.com/shadowsocks/go-shadowsocks2/core" ) -type shadowsocksBaseDialer struct { - base BaseDialer +type shadowsocksDialer struct { + Dialer + cipher shadowsocks.StreamConnCipher } -func (s *shadowsocksBaseDialer) Dial(network, address string) (net.Conn, error) { - conn, err := s.base.Dial(network, address) - if err != nil { - return nil, err - } - - return s.cipher.StreamConn(conn), nil -} - -func (s *shadowsocksBaseDialer) DialContext(ctx context.Context, +func (s *shadowsocksDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) { - conn, err := s.base.DialContext(ctx, network, address) + conn, err := s.Dialer.DialContext(ctx, network, address) if err != nil { return nil, err } @@ -36,8 +28,8 @@ func (s *shadowsocksBaseDialer) DialContext(ctx context.Context, return s.cipher.StreamConn(conn), nil } -func NewShadowsocksBaseDialer(proxyUrl *url.URL, - timeout time.Duration, bufferSize int) (BaseDialer, error) { +func NewShadowsocksDialer(proxyUrl *url.URL, + timeout time.Duration, bufferSize int) (Dialer, error) { username := proxyUrl.User.Username() decoded, err := base64.RawURLEncoding.DecodeString(username) @@ -55,14 +47,14 @@ func NewShadowsocksBaseDialer(proxyUrl *url.URL, return nil, fmt.Errorf("cannot initialize shadowsocks cipher: %w", err) } - baseDialer, err := NewDefaultBaseDialer(timeout, bufferSize) + dialer, err := NewDefaultDialer(timeout, bufferSize) if err != nil { return nil, fmt.Errorf("cannot initialize a base dialer: %w", err) } - return &shadowsocksBaseDialer{ - base: baseDialer, + return &shadowsocksDialer{ + Dialer: dialer, cipher: cipher, }, nil } diff --git a/mtglib/network/socks5.go b/mtglib/network/socks5.go new file mode 100644 index 0000000..ddb1be3 --- /dev/null +++ b/mtglib/network/socks5.go @@ -0,0 +1,23 @@ +package network + +import ( + "fmt" + "net/url" + "time" + + "golang.org/x/net/proxy" +) + +func NewSocks5Dialer(proxyUrl *url.URL, timeout time.Duration, bufferSize int) (Dialer, error) { + dialer, err := NewDefaultDialer(timeout, bufferSize) + if err != nil { + return nil, fmt.Errorf("cannot initialize base dialer: %w", err) + } + + rv, err := proxy.FromURL(proxyUrl, dialer.(*defaultDialer)) + if err != nil { + return nil, fmt.Errorf("cannot initialize socks5 proxy dialer: %w", err) + } + + return rv.(Dialer), nil +}