misc.go 792 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package dht
  2. import (
  3. "net"
  4. "github.com/anacrolix/missinggo/v2/iter"
  5. "github.com/anacrolix/dht/v2/int160"
  6. "github.com/anacrolix/dht/v2/krpc"
  7. "github.com/anacrolix/dht/v2/types"
  8. )
  9. func mustListen(addr string) net.PacketConn {
  10. ret, err := net.ListenPacket("udp", addr)
  11. if err != nil {
  12. panic(err)
  13. }
  14. return ret
  15. }
  16. func addrResolver(addr string) func() ([]Addr, error) {
  17. return func() ([]Addr, error) {
  18. ua, err := net.ResolveUDPAddr("udp", addr)
  19. return []Addr{NewAddr(ua)}, err
  20. }
  21. }
  22. type addrMaybeId = types.AddrMaybeId
  23. func randomIdInBucket(rootId int160.T, bucketIndex int) int160.T {
  24. id := int160.FromByteArray(krpc.RandomNodeID())
  25. for i := range iter.N(bucketIndex) {
  26. id.SetBit(i, rootId.GetBit(i))
  27. }
  28. id.SetBit(bucketIndex, !rootId.GetBit(bucketIndex))
  29. return id
  30. }