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  }