github.com/anacrolix/torrent@v1.61.0/networks.go (about) 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 }