dht/announce.go | 2 +- dht/dht.go | 20 ++++++++++++++------ diff --git a/dht/announce.go b/dht/announce.go index 4aadd454aba23b1f5ba409211976a6b90595a819..a179263b11e54d4f8271d815c22295e0d172df9e 100644 --- a/dht/announce.go +++ b/dht/announce.go @@ -51,7 +51,7 @@ return }() s.mu.Unlock() if len(startAddrs) == 0 { - addrs, err := bootstrapAddrs() + addrs, err := bootstrapAddrs(s.bootstrapNodes) if err != nil { return nil, err } diff --git a/dht/dht.go b/dht/dht.go index 1fb3803423385e0ed52b215ddea7d6933602317e..b9ea3ee7be07b5b76761707a31f7e3f2d0240d44 100644 --- a/dht/dht.go +++ b/dht/dht.go @@ -50,6 +50,7 @@ passive bool // Don't respond to queries. ipBlockList *iplist.IPList numConfirmedAnnounces int + bootstrapNodes []string } type dHTAddr interface { @@ -83,6 +84,8 @@ Addr string // Listen address. Used if Conn is nil. Conn net.PacketConn // Don't respond to queries from other nodes. Passive bool + // DHT Bootstrap nodes + BootstrapNodes []string } type ServerStats struct { @@ -142,6 +145,7 @@ return } } s.passive = c.Passive + s.bootstrapNodes = c.BootstrapNodes err = s.init() if err != nil { return @@ -967,11 +971,15 @@ }) return } -func bootstrapAddrs() (addrs []*net.UDPAddr, err error) { - for _, addrStr := range []string{ - "router.utorrent.com:6881", - "router.bittorrent.com:6881", - } { +func bootstrapAddrs(nodeAddrs []string) (addrs []*net.UDPAddr, err error) { + bootstrapNodes := nodeAddrs + if len(bootstrapNodes) == 0 { + bootstrapNodes = []string{ + "router.utorrent.com:6881", + "router.bittorrent.com:6881", + } + } + for _, addrStr := range bootstrapNodes { udpAddr, err := net.ResolveUDPAddr("udp4", addrStr) if err != nil { continue @@ -985,7 +993,7 @@ return } func (s *Server) addRootNodes() error { - addrs, err := bootstrapAddrs() + addrs, err := bootstrapAddrs(s.bootstrapNodes) if err != nil { return err }