]> Sergey Matveev's repositories - btrtrc.git/blob - networks.go
Drop support for go 1.20
[btrtrc.git] / networks.go
1 package torrent
2
3 import "strings"
4
5 var allPeerNetworks = func() (ret []network) {
6         for _, s := range []string{"tcp4", "tcp6", "udp4", "udp6"} {
7                 ret = append(ret, parseNetworkString(s))
8         }
9         return
10 }()
11
12 type network struct {
13         Ipv4 bool
14         Ipv6 bool
15         Udp  bool
16         Tcp  bool
17 }
18
19 func (n network) String() (ret string) {
20         a := func(b bool, s string) {
21                 if b {
22                         ret += s
23                 }
24         }
25         a(n.Udp, "udp")
26         a(n.Tcp, "tcp")
27         a(n.Ipv4, "4")
28         a(n.Ipv6, "6")
29         return
30 }
31
32 func parseNetworkString(network string) (ret network) {
33         c := func(s string) bool {
34                 return strings.Contains(network, s)
35         }
36         ret.Ipv4 = c("4")
37         ret.Ipv6 = c("6")
38         ret.Udp = c("udp")
39         ret.Tcp = c("tcp")
40         return
41 }
42
43 func peerNetworkEnabled(n network, cfg *ClientConfig) bool {
44         if cfg.DisableUTP && n.Udp {
45                 return false
46         }
47         if cfg.DisableTCP && n.Tcp {
48                 return false
49         }
50         if cfg.DisableIPv6 && n.Ipv6 {
51                 return false
52         }
53         if cfg.DisableIPv4 && n.Ipv4 {
54                 return false
55         }
56         return true
57 }