-var compactIpv4NodeAddrElemSize = krpc.CompactIPv4NodeAddrs{}.ElemSize()
-var compactIpv6NodeAddrElemSize = krpc.CompactIPv6NodeAddrs{}.ElemSize()
-
-func (me *pexMsgFactory) PexMsg() (ret pp.PexMsg) {
- for key, added := range me.added {
- switch len(key) {
- case compactIpv4NodeAddrElemSize:
- ret.Added = append(ret.Added, added.NodeAddr)
- ret.AddedFlags = append(ret.AddedFlags, added.PexPeerFlags)
- case compactIpv6NodeAddrElemSize:
- ret.Added6 = append(ret.Added6, added.NodeAddr)
- ret.Added6Flags = append(ret.Added6Flags, added.PexPeerFlags)
- default:
- panic(key)
- }
- }
- for key, addr := range me.dropped {
- switch len(key) {
- case compactIpv4NodeAddrElemSize:
- ret.Dropped = append(ret.Dropped, addr)
- case compactIpv6NodeAddrElemSize:
- ret.Dropped6 = append(ret.Dropped6, addr)
- default:
- panic(key)
- }
- }
- return
-}
-
-func mustNodeAddr(addr net.Addr) krpc.NodeAddr {
- ret, ok := nodeAddr(addr)
- if !ok {
- panic(addr)
- }
- return ret
-}
-
-// Convert an arbitrary torrent peer Addr into one that can be represented by the compact addr
-// format.
-func nodeAddr(addr net.Addr) (_ krpc.NodeAddr, ok bool) {
- ipport, ok := tryIpPortFromNetAddr(addr)
- if !ok {
- return
- }
- return krpc.NodeAddr{IP: shortestIP(ipport.IP), Port: ipport.Port}, true
-}
-
-// mainly for the krpc marshallers
-func shortestIP(ip net.IP) net.IP {
- if ip4 := ip.To4(); ip4 != nil {
- return ip4
- }
- return ip