networks.go 935 B

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