Просмотр исходного кода

Rename dialers into network

tags/v2.0.0-rc1
9seconds 5 лет назад
Родитель
Сommit
d5147f1935

+ 3
- 3
main.go Просмотреть файл

7
 	"os"
7
 	"os"
8
 	"time"
8
 	"time"
9
 
9
 
10
-	"github.com/9seconds/mtg/v2/mtglib/dialers"
10
+	"github.com/9seconds/mtg/v2/mtglib/network"
11
 )
11
 )
12
 
12
 
13
 var version = "dev" // has to be set by ldflags
13
 var version = "dev" // has to be set by ldflags
19
 
19
 
20
 	fmt.Println(parseRawConfig(f))
20
 	fmt.Println(parseRawConfig(f))
21
 
21
 
22
-	bd, _ := dialers.NewDefaultBaseDialer(0, 0)
23
-	d, _ := dialers.MakeDialer(bd, "9.9.9.9", 0)
22
+	bd, _ := network.NewDefaultDialer(0, 0)
23
+	d, _ := network.NewNetwork(bd, "9.9.9.9", 0)
24
 
24
 
25
 	r, err := d.HTTP.Get("https://ifconfig.co")
25
 	r, err := d.HTTP.Get("https://ifconfig.co")
26
 
26
 

+ 0
- 23
mtglib/dialers/socks5.go Просмотреть файл

1
-package dialers
2
-
3
-import (
4
-	"fmt"
5
-	"net/url"
6
-	"time"
7
-
8
-	"golang.org/x/net/proxy"
9
-)
10
-
11
-func NewSocks5BaseDialer(proxyUrl *url.URL, timeout time.Duration, bufferSize int) (BaseDialer, error) {
12
-	baseDialer, err := NewDefaultBaseDialer(timeout, bufferSize)
13
-	if err != nil {
14
-		return nil, fmt.Errorf("cannot initialize base dialer: %w", err)
15
-	}
16
-
17
-	rv, err := proxy.FromURL(proxyUrl, baseDialer.(*defaultBaseDialer))
18
-	if err != nil {
19
-		return nil, fmt.Errorf("cannot initialize socks5 proxy dialer: %w", err)
20
-	}
21
-
22
-	return rv.(BaseDialer), nil
23
-}

mtglib/dialers/consts.go → mtglib/network/consts.go Просмотреть файл

1
-package dialers
1
+package network
2
 
2
 
3
 import "time"
3
 import "time"
4
 
4
 

mtglib/dialers/default.go → mtglib/network/default.go Просмотреть файл

1
-package dialers
1
+package network
2
 
2
 
3
 import (
3
 import (
4
 	"context"
4
 	"context"
9
 	"github.com/libp2p/go-reuseport"
9
 	"github.com/libp2p/go-reuseport"
10
 )
10
 )
11
 
11
 
12
-type defaultBaseDialer struct {
12
+type defaultDialer struct {
13
 	net.Dialer
13
 	net.Dialer
14
 
14
 
15
 	bufferSize int
15
 	bufferSize int
16
 }
16
 }
17
 
17
 
18
-func (d *defaultBaseDialer) Dial(network, address string) (net.Conn, error) {
18
+func (d *defaultDialer) Dial(network, address string) (net.Conn, error) {
19
 	return d.DialContext(context.Background(), network, address)
19
 	return d.DialContext(context.Background(), network, address)
20
 }
20
 }
21
 
21
 
22
-func (d *defaultBaseDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
22
+func (d *defaultDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
23
 	switch network {
23
 	switch network {
24
 	case "tcp", "tcp4", "tcp6":
24
 	case "tcp", "tcp4", "tcp6":
25
 	default:
25
 	default:
56
 	return tcpConn, nil
56
 	return tcpConn, nil
57
 }
57
 }
58
 
58
 
59
-func NewDefaultBaseDialer(timeout time.Duration, bufferSize int) (BaseDialer, error) {
59
+func NewDefaultDialer(timeout time.Duration, bufferSize int) (Dialer, error) {
60
 	switch {
60
 	switch {
61
 	case timeout < 0:
61
 	case timeout < 0:
62
 		return nil, fmt.Errorf("timeout %v should be positive number", timeout)
62
 		return nil, fmt.Errorf("timeout %v should be positive number", timeout)
72
 		bufferSize = DefaultBufferSize
72
 		bufferSize = DefaultBufferSize
73
 	}
73
 	}
74
 
74
 
75
-	return &defaultBaseDialer{
75
+	return &defaultDialer{
76
 		Dialer: net.Dialer{
76
 		Dialer: net.Dialer{
77
 			Timeout: timeout,
77
 			Timeout: timeout,
78
 			Control: reuseport.Control,
78
 			Control: reuseport.Control,

mtglib/dialers/interfaces.go → mtglib/network/interfaces.go Просмотреть файл

1
-package dialers
1
+package network
2
 
2
 
3
 import (
3
 import (
4
 	"context"
4
 	"context"
5
 	"net"
5
 	"net"
6
 )
6
 )
7
 
7
 
8
-type BaseDialer interface {
9
-	Dial(network, address string) (net.Conn, error)
8
+type Dialer interface {
10
 	DialContext(ctx context.Context, network, address string) (net.Conn, error)
9
 	DialContext(ctx context.Context, network, address string) (net.Conn, error)
11
 }
10
 }

mtglib/dialers/dialer.go → mtglib/network/network.go Просмотреть файл

1
-package dialers
1
+package network
2
 
2
 
3
 import (
3
 import (
4
 	"context"
4
 	"context"
11
 	doh "github.com/babolivier/go-doh-client"
11
 	doh "github.com/babolivier/go-doh-client"
12
 )
12
 )
13
 
13
 
14
-type Dialer struct {
14
+type Network struct {
15
 	HTTP http.Client
15
 	HTTP http.Client
16
 	DNS  doh.Resolver
16
 	DNS  doh.Resolver
17
 
17
 
18
-	baseDialer BaseDialer
18
+	dialer Dialer
19
 }
19
 }
20
 
20
 
21
-func (d *Dialer) Dial(network, address string) (net.Conn, error) {
21
+func (d *Network) Dial(network, address string) (net.Conn, error) {
22
 	return d.DialContext(context.Background(), network, address)
22
 	return d.DialContext(context.Background(), network, address)
23
 }
23
 }
24
 
24
 
25
-func (d *Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
25
+func (d *Network) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
26
 	host, port, _ := net.SplitHostPort(address)
26
 	host, port, _ := net.SplitHostPort(address)
27
 
27
 
28
 	ips, err := d.resolveIPs(network, host)
28
 	ips, err := d.resolveIPs(network, host)
35
 	})
35
 	})
36
 
36
 
37
 	for _, v := range ips {
37
 	for _, v := range ips {
38
-		if conn, err := d.baseDialer.DialContext(ctx, network, net.JoinHostPort(v, port)); err == nil {
38
+		if conn, err := d.dialer.DialContext(ctx, network, net.JoinHostPort(v, port)); err == nil {
39
 			return conn, nil
39
 			return conn, nil
40
 		}
40
 		}
41
 	}
41
 	}
43
 	return nil, fmt.Errorf("cannot dial to %s:%s", network, address)
43
 	return nil, fmt.Errorf("cannot dial to %s:%s", network, address)
44
 }
44
 }
45
 
45
 
46
-func (d *Dialer) resolveIPs(network, address string) ([]string, error) {
46
+func (d *Network) resolveIPs(network, address string) ([]string, error) {
47
 	if net.ParseIP(address) != nil {
47
 	if net.ParseIP(address) != nil {
48
 		return []string{address}, nil
48
 		return []string{address}, nil
49
 	}
49
 	}
75
 	return ips, nil
75
 	return ips, nil
76
 }
76
 }
77
 
77
 
78
-func MakeDialer(base BaseDialer, dohHostname string, httpTimeout time.Duration) (*Dialer, error) {
78
+func NewNetwork(dialer Dialer, dohHostname string, httpTimeout time.Duration) (*Network, error) {
79
 	switch {
79
 	switch {
80
 	case httpTimeout < 0:
80
 	case httpTimeout < 0:
81
 		return nil, fmt.Errorf("timeout should be positive number %v", httpTimeout)
81
 		return nil, fmt.Errorf("timeout should be positive number %v", httpTimeout)
90
 	dohHTTPClient := &http.Client{
90
 	dohHTTPClient := &http.Client{
91
 		Timeout: httpTimeout,
91
 		Timeout: httpTimeout,
92
 		Transport: &http.Transport{
92
 		Transport: &http.Transport{
93
-			DialContext: base.DialContext,
93
+			DialContext: dialer.DialContext,
94
 		},
94
 		},
95
 	}
95
 	}
96
-	rv := &Dialer{
97
-		baseDialer: base,
96
+	network := &Network{
97
+		dialer: dialer,
98
 		DNS: doh.Resolver{
98
 		DNS: doh.Resolver{
99
 			Host:       dohHostname,
99
 			Host:       dohHostname,
100
 			Class:      doh.IN,
100
 			Class:      doh.IN,
101
 			HTTPClient: dohHTTPClient,
101
 			HTTPClient: dohHTTPClient,
102
 		},
102
 		},
103
 	}
103
 	}
104
-	rv.HTTP = http.Client{
104
+	network.HTTP = http.Client{
105
 		Timeout: httpTimeout,
105
 		Timeout: httpTimeout,
106
 		Transport: &http.Transport{
106
 		Transport: &http.Transport{
107
-			DialContext: rv.DialContext,
107
+			DialContext: network.DialContext,
108
 		},
108
 		},
109
 	}
109
 	}
110
 
110
 
111
-	return rv, nil
111
+	return network, nil
112
 }
112
 }

mtglib/dialers/shadowsocks.go → mtglib/network/shadowsocks.go Просмотреть файл

1
-package dialers
1
+package network
2
 
2
 
3
 import (
3
 import (
4
 	"context"
4
 	"context"
12
 	shadowsocks "github.com/shadowsocks/go-shadowsocks2/core"
12
 	shadowsocks "github.com/shadowsocks/go-shadowsocks2/core"
13
 )
13
 )
14
 
14
 
15
-type shadowsocksBaseDialer struct {
16
-	base   BaseDialer
17
-	cipher shadowsocks.StreamConnCipher
18
-}
19
-
20
-func (s *shadowsocksBaseDialer) Dial(network, address string) (net.Conn, error) {
21
-	conn, err := s.base.Dial(network, address)
22
-	if err != nil {
23
-		return nil, err
24
-	}
15
+type shadowsocksDialer struct {
16
+	Dialer
25
 
17
 
26
-	return s.cipher.StreamConn(conn), nil
18
+	cipher shadowsocks.StreamConnCipher
27
 }
19
 }
28
 
20
 
29
-func (s *shadowsocksBaseDialer) DialContext(ctx context.Context,
21
+func (s *shadowsocksDialer) DialContext(ctx context.Context,
30
 	network, address string) (net.Conn, error) {
22
 	network, address string) (net.Conn, error) {
31
-	conn, err := s.base.DialContext(ctx, network, address)
23
+	conn, err := s.Dialer.DialContext(ctx, network, address)
32
 	if err != nil {
24
 	if err != nil {
33
 		return nil, err
25
 		return nil, err
34
 	}
26
 	}
36
 	return s.cipher.StreamConn(conn), nil
28
 	return s.cipher.StreamConn(conn), nil
37
 }
29
 }
38
 
30
 
39
-func NewShadowsocksBaseDialer(proxyUrl *url.URL,
40
-	timeout time.Duration, bufferSize int) (BaseDialer, error) {
31
+func NewShadowsocksDialer(proxyUrl *url.URL,
32
+	timeout time.Duration, bufferSize int) (Dialer, error) {
41
 	username := proxyUrl.User.Username()
33
 	username := proxyUrl.User.Username()
42
 
34
 
43
 	decoded, err := base64.RawURLEncoding.DecodeString(username)
35
 	decoded, err := base64.RawURLEncoding.DecodeString(username)
55
 		return nil, fmt.Errorf("cannot initialize shadowsocks cipher: %w", err)
47
 		return nil, fmt.Errorf("cannot initialize shadowsocks cipher: %w", err)
56
 	}
48
 	}
57
 
49
 
58
-	baseDialer, err := NewDefaultBaseDialer(timeout, bufferSize)
50
+	dialer, err := NewDefaultDialer(timeout, bufferSize)
59
 	if err != nil {
51
 	if err != nil {
60
 		return nil, fmt.Errorf("cannot initialize a base dialer: %w", err)
52
 		return nil, fmt.Errorf("cannot initialize a base dialer: %w", err)
61
 
53
 
62
 	}
54
 	}
63
 
55
 
64
-	return &shadowsocksBaseDialer{
65
-		base:   baseDialer,
56
+	return &shadowsocksDialer{
57
+		Dialer: dialer,
66
 		cipher: cipher,
58
 		cipher: cipher,
67
 	}, nil
59
 	}, nil
68
 }
60
 }

+ 23
- 0
mtglib/network/socks5.go Просмотреть файл

1
+package network
2
+
3
+import (
4
+	"fmt"
5
+	"net/url"
6
+	"time"
7
+
8
+	"golang.org/x/net/proxy"
9
+)
10
+
11
+func NewSocks5Dialer(proxyUrl *url.URL, timeout time.Duration, bufferSize int) (Dialer, error) {
12
+	dialer, err := NewDefaultDialer(timeout, bufferSize)
13
+	if err != nil {
14
+		return nil, fmt.Errorf("cannot initialize base dialer: %w", err)
15
+	}
16
+
17
+	rv, err := proxy.FromURL(proxyUrl, dialer.(*defaultDialer))
18
+	if err != nil {
19
+		return nil, fmt.Errorf("cannot initialize socks5 proxy dialer: %w", err)
20
+	}
21
+
22
+	return rv.(Dialer), nil
23
+}

Загрузка…
Отмена
Сохранить