X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=netip-addrport.go;h=e438db7085f446c473a31c74f75dbd167fba6f67;hb=HEAD;hp=cf9edfd5ed753e001e9f9d4713753be35c5d9e8e;hpb=1e13625c7398094de923257f5855ef9af8d20681;p=btrtrc.git diff --git a/netip-addrport.go b/netip-addrport.go index cf9edfd5..e438db70 100644 --- a/netip-addrport.go +++ b/netip-addrport.go @@ -2,19 +2,22 @@ package torrent import ( "fmt" - "net" "net/netip" "github.com/anacrolix/dht/v2/krpc" ) +type addrPorter interface { + AddrPort() netip.AddrPort +} + func ipv4AddrPortFromKrpcNodeAddr(na krpc.NodeAddr) (_ netip.AddrPort, err error) { ip4 := na.IP.To4() if ip4 == nil { err = fmt.Errorf("not an ipv4 address: %v", na.IP) return } - addr := netip.AddrFrom4([4]byte(ip4)) + addr := netip.AddrFrom4(*(*[4]byte)(ip4)) addrPort := netip.AddrPortFrom(addr, uint16(na.Port)) return addrPort, nil } @@ -25,16 +28,14 @@ func ipv6AddrPortFromKrpcNodeAddr(na krpc.NodeAddr) (_ netip.AddrPort, err error err = fmt.Errorf("not an ipv4 address: %v", na.IP) return } - addr := netip.AddrFrom16([16]byte(ip6)) + addr := netip.AddrFrom16(*(*[16]byte)(ip6)) addrPort := netip.AddrPortFrom(addr, uint16(na.Port)) return addrPort, nil } func addrPortFromPeerRemoteAddr(pra PeerRemoteAddr) (netip.AddrPort, error) { switch v := pra.(type) { - case *net.TCPAddr: - return v.AddrPort(), nil - case *net.UDPAddr: + case addrPorter: return v.AddrPort(), nil case netip.AddrPort: return v, nil @@ -42,3 +43,10 @@ func addrPortFromPeerRemoteAddr(pra PeerRemoteAddr) (netip.AddrPort, error) { return netip.ParseAddrPort(pra.String()) } } + +func krpcNodeAddrFromAddrPort(addrPort netip.AddrPort) krpc.NodeAddr { + return krpc.NodeAddr{ + IP: addrPort.Addr().AsSlice(), + Port: int(addrPort.Port()), + } +}