| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package cli
-
- import (
- "fmt"
- "net"
- "net/url"
- "os"
-
- "github.com/9seconds/mtg/v2/internal/config2"
- "github.com/9seconds/mtg/v2/mtglib"
- "github.com/9seconds/mtg/v2/network"
- )
-
- func readTOMLConfig(path string) (*config2.Config, error) {
- content, err := os.ReadFile(path)
- if err != nil {
- return nil, fmt.Errorf("cannot read config file: %w", err)
- }
-
- conf, err := config2.Parse(content)
- if err != nil {
- return nil, fmt.Errorf("cannot parse config: %w", err)
- }
-
- return conf, nil
- }
-
- func makeNetwork(conf *config2.Config, version string) (mtglib.Network, error) {
- tcpTimeout := conf.Network.Timeout.TCP.Get(network.DefaultTimeout)
- httpTimeout := conf.Network.Timeout.HTTP.Get(network.DefaultHTTPTimeout)
- dohIP := conf.Network.DOHIP.Get(net.ParseIP(network.DefaultDOHHostname)).String()
- bufferSize := conf.TCPBuffer.Get(network.DefaultBufferSize)
- userAgent := "mtg/" + version
-
- baseDialer, err := network.NewDefaultDialer(tcpTimeout, int(bufferSize))
- if err != nil {
- return nil, fmt.Errorf("cannot build a default dialer: %w", err)
- }
-
- if len(conf.Network.Proxies) == 0 {
- return network.NewNetwork(baseDialer, userAgent, dohIP, httpTimeout) // nolint: wrapcheck
- }
-
- proxyURLs := make([]*url.URL, 0, len(conf.Network.Proxies))
- for _, v := range conf.Network.Proxies {
- if value := v.Get(nil); value != nil {
- proxyURLs = append(proxyURLs, value)
- }
- }
-
- if len(proxyURLs) == 1 {
- socksDialer, err := network.NewSocks5Dialer(baseDialer, proxyURLs[0])
- if err != nil {
- return nil, fmt.Errorf("cannot build socks5 dialer: %w", err)
- }
-
- return network.NewNetwork(socksDialer, userAgent, dohIP, httpTimeout) // nolint: wrapcheck
- }
-
- socksDialer, err := network.NewLoadBalancedSocks5Dialer(baseDialer, proxyURLs)
- if err != nil {
- return nil, fmt.Errorf("cannot build socks5 dialer: %w", err)
- }
-
- return network.NewNetwork(socksDialer, userAgent, dohIP, httpTimeout) // nolint: wrapcheck
- }
|