8 "github.com/anacrolix/dht/v2/krpc"
11 // TODO: Use netip.Addr and Option[[20]byte].
13 IP net.IP `bencode:"ip"`
14 Port int `bencode:"port"`
15 ID []byte `bencode:"peer id"`
18 func (p Peer) ToNetipAddrPort() (addrPort netip.AddrPort, ok bool) {
19 addr, ok := netip.AddrFromSlice(p.IP)
20 addrPort = netip.AddrPortFrom(addr, uint16(p.Port))
24 func (p Peer) String() string {
25 loc := net.JoinHostPort(p.IP.String(), fmt.Sprintf("%d", p.Port))
27 return fmt.Sprintf("%x at %s", p.ID, loc)
33 // Set from the non-compact form in BEP 3.
34 func (p *Peer) FromDictInterface(d map[string]interface{}) {
35 p.IP = net.ParseIP(d["ip"].(string))
36 if _, ok := d["peer id"]; ok {
37 p.ID = []byte(d["peer id"].(string))
39 p.Port = int(d["port"].(int64))
42 func (p Peer) FromNodeAddr(na krpc.NodeAddr) Peer {