]> Sergey Matveev's repositories - btrtrc.git/blobdiff - netip-addrport.go
Drop support for go 1.20
[btrtrc.git] / netip-addrport.go
index cf9edfd5ed753e001e9f9d4713753be35c5d9e8e..e438db7085f446c473a31c74f75dbd167fba6f67 100644 (file)
@@ -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()),
+       }
+}