]> Sergey Matveev's repositories - btrtrc.git/blob - netip-addrport.go
Include count of peer conns in status
[btrtrc.git] / netip-addrport.go
1 package torrent
2
3 import (
4         "fmt"
5         "net"
6         "net/netip"
7
8         "github.com/anacrolix/dht/v2/krpc"
9 )
10
11 func ipv4AddrPortFromKrpcNodeAddr(na krpc.NodeAddr) (_ netip.AddrPort, err error) {
12         ip4 := na.IP.To4()
13         if ip4 == nil {
14                 err = fmt.Errorf("not an ipv4 address: %v", na.IP)
15                 return
16         }
17         addr := netip.AddrFrom4([4]byte(ip4))
18         addrPort := netip.AddrPortFrom(addr, uint16(na.Port))
19         return addrPort, nil
20 }
21
22 func ipv6AddrPortFromKrpcNodeAddr(na krpc.NodeAddr) (_ netip.AddrPort, err error) {
23         ip6 := na.IP.To16()
24         if ip6 == nil {
25                 err = fmt.Errorf("not an ipv4 address: %v", na.IP)
26                 return
27         }
28         addr := netip.AddrFrom16([16]byte(ip6))
29         addrPort := netip.AddrPortFrom(addr, uint16(na.Port))
30         return addrPort, nil
31 }
32
33 func addrPortFromPeerRemoteAddr(pra PeerRemoteAddr) (netip.AddrPort, error) {
34         switch v := pra.(type) {
35         case *net.TCPAddr:
36                 return v.AddrPort(), nil
37         case *net.UDPAddr:
38                 return v.AddrPort(), nil
39         case netip.AddrPort:
40                 return v, nil
41         default:
42                 return netip.ParseAddrPort(pra.String())
43         }
44 }