7 "github.com/anacrolix/dht/v2/krpc"
10 type addrPorter interface {
11 AddrPort() netip.AddrPort
14 func ipv4AddrPortFromKrpcNodeAddr(na krpc.NodeAddr) (_ netip.AddrPort, err error) {
17 err = fmt.Errorf("not an ipv4 address: %v", na.IP)
20 addr := netip.AddrFrom4(*(*[4]byte)(ip4))
21 addrPort := netip.AddrPortFrom(addr, uint16(na.Port))
25 func ipv6AddrPortFromKrpcNodeAddr(na krpc.NodeAddr) (_ netip.AddrPort, err error) {
28 err = fmt.Errorf("not an ipv4 address: %v", na.IP)
31 addr := netip.AddrFrom16(*(*[16]byte)(ip6))
32 addrPort := netip.AddrPortFrom(addr, uint16(na.Port))
36 func addrPortFromPeerRemoteAddr(pra PeerRemoteAddr) (netip.AddrPort, error) {
37 switch v := pra.(type) {
39 return v.AddrPort(), nil
43 return netip.ParseAddrPort(pra.String())
47 func krpcNodeAddrFromAddrPort(addrPort netip.AddrPort) krpc.NodeAddr {
49 IP: addrPort.Addr().AsSlice(),
50 Port: int(addrPort.Port()),