|
|
@@ -4,7 +4,6 @@ import (
|
|
4
|
4
|
"context"
|
|
5
|
5
|
"fmt"
|
|
6
|
6
|
"net"
|
|
7
|
|
- "net/url"
|
|
8
|
7
|
"os"
|
|
9
|
8
|
|
|
10
|
9
|
"github.com/9seconds/mtg/v2/antireplay"
|
|
|
@@ -16,7 +15,7 @@ import (
|
|
16
|
15
|
"github.com/9seconds/mtg/v2/ipblocklist/files"
|
|
17
|
16
|
"github.com/9seconds/mtg/v2/logger"
|
|
18
|
17
|
"github.com/9seconds/mtg/v2/mtglib"
|
|
19
|
|
- "github.com/9seconds/mtg/v2/network"
|
|
|
18
|
+ "github.com/9seconds/mtg/v2/network/v2"
|
|
20
|
19
|
"github.com/9seconds/mtg/v2/stats"
|
|
21
|
20
|
"github.com/pires/go-proxyproto"
|
|
22
|
21
|
"github.com/rs/zerolog"
|
|
|
@@ -40,43 +39,36 @@ func makeLogger(conf *config.Config) mtglib.Logger {
|
|
40
|
39
|
}
|
|
41
|
40
|
|
|
42
|
41
|
func makeNetwork(conf *config.Config, version string) (mtglib.Network, error) {
|
|
43
|
|
- tcpTimeout := conf.Network.Timeout.TCP.Get(network.DefaultTimeout)
|
|
44
|
|
- httpTimeout := conf.Network.Timeout.HTTP.Get(network.DefaultHTTPTimeout)
|
|
45
|
|
- dohIP := conf.Network.DOHIP.Get(net.ParseIP(network.DefaultDOHHostname)).String()
|
|
46
|
|
- userAgent := "mtg/" + version
|
|
47
|
|
-
|
|
48
|
|
- baseDialer, err := network.NewDefaultDialer(tcpTimeout, 0)
|
|
49
|
|
- if err != nil {
|
|
50
|
|
- return nil, fmt.Errorf("cannot build a default dialer: %w", err)
|
|
51
|
|
- }
|
|
52
|
|
-
|
|
53
|
|
- if len(conf.Network.Proxies) == 0 {
|
|
54
|
|
- return network.NewNetwork(baseDialer, userAgent, dohIP, httpTimeout) //nolint: wrapcheck
|
|
55
|
|
- }
|
|
56
|
|
-
|
|
57
|
|
- proxyURLs := make([]*url.URL, 0, len(conf.Network.Proxies))
|
|
58
|
|
-
|
|
59
|
|
- for _, v := range conf.Network.Proxies {
|
|
60
|
|
- if value := v.Get(nil); value != nil {
|
|
61
|
|
- proxyURLs = append(proxyURLs, value)
|
|
62
|
|
- }
|
|
63
|
|
- }
|
|
|
42
|
+ base := network.New(
|
|
|
43
|
+ nil,
|
|
|
44
|
+ "mtg/"+version,
|
|
|
45
|
+ conf.Network.Timeout.TCP.Get(0),
|
|
|
46
|
+ conf.Network.Timeout.HTTP.Get(0),
|
|
|
47
|
+ conf.Network.Timeout.Idle.Get(0),
|
|
|
48
|
+ )
|
|
64
|
49
|
|
|
65
|
|
- if len(proxyURLs) == 1 {
|
|
66
|
|
- socksDialer, err := network.NewSocks5Dialer(baseDialer, proxyURLs[0])
|
|
|
50
|
+ proxyDialers := make([]network.Network, len(conf.Network.Proxies))
|
|
|
51
|
+ for idx, v := range conf.Network.Proxies {
|
|
|
52
|
+ value, err := network.NewProxyNetwork(base, v.Get(nil))
|
|
67
|
53
|
if err != nil {
|
|
68
|
|
- return nil, fmt.Errorf("cannot build socks5 dialer: %w", err)
|
|
|
54
|
+ return nil, fmt.Errorf("cannot use %v for proxy url: %w", v.Get(nil), err)
|
|
69
|
55
|
}
|
|
|
56
|
+ proxyDialers[idx] = value
|
|
|
57
|
+ }
|
|
70
|
58
|
|
|
71
|
|
- return network.NewNetwork(socksDialer, userAgent, dohIP, httpTimeout) //nolint: wrapcheck
|
|
|
59
|
+ switch len(proxyDialers) {
|
|
|
60
|
+ case 0:
|
|
|
61
|
+ return base, nil
|
|
|
62
|
+ case 1:
|
|
|
63
|
+ return proxyDialers[0], nil
|
|
72
|
64
|
}
|
|
73
|
65
|
|
|
74
|
|
- socksDialer, err := network.NewLoadBalancedSocks5Dialer(baseDialer, proxyURLs)
|
|
|
66
|
+ value, err := network.Join(proxyDialers...)
|
|
75
|
67
|
if err != nil {
|
|
76
|
|
- return nil, fmt.Errorf("cannot build socks5 dialer: %w", err)
|
|
|
68
|
+ panic(err)
|
|
77
|
69
|
}
|
|
78
|
70
|
|
|
79
|
|
- return network.NewNetwork(socksDialer, userAgent, dohIP, httpTimeout) //nolint: wrapcheck
|
|
|
71
|
+ return value, nil
|
|
80
|
72
|
}
|
|
81
|
73
|
|
|
82
|
74
|
func makeAntiReplayCache(conf *config.Config) mtglib.AntiReplayCache {
|