mirror of
https://github.com/muun/recovery.git
synced 2025-11-12 06:50:18 -05:00
Release v0.1.0
This commit is contained in:
48
vendor/github.com/lightninglabs/neutrino/banman/util.go
generated
vendored
Normal file
48
vendor/github.com/lightninglabs/neutrino/banman/util.go
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
package banman
|
||||
|
||||
import (
|
||||
"net"
|
||||
)
|
||||
|
||||
var (
|
||||
// defaultIPv4Mask is the default IPv4 mask used when parsing IP
|
||||
// networks from an address. This ensures that the IP network only
|
||||
// contains *one* IP address -- the one specified.
|
||||
defaultIPv4Mask = net.CIDRMask(32, 32)
|
||||
|
||||
// defaultIPv6Mask is the default IPv6 mask used when parsing IP
|
||||
// networks from an address. This ensures that the IP network only
|
||||
// contains *one* IP address -- the one specified.
|
||||
defaultIPv6Mask = net.CIDRMask(128, 128)
|
||||
)
|
||||
|
||||
// ParseIPNet parses the IP network that contains the given address. An optional
|
||||
// mask can be provided, to expand the scope of the IP network, otherwise the
|
||||
// IP's default is used.
|
||||
//
|
||||
// NOTE: This assumes that the address has already been resolved.
|
||||
func ParseIPNet(addr string, mask net.IPMask) (*net.IPNet, error) {
|
||||
// If the address includes a port, we'll remove it.
|
||||
host, _, err := net.SplitHostPort(addr)
|
||||
if err != nil {
|
||||
// Address doesn't include a port.
|
||||
host = addr
|
||||
}
|
||||
|
||||
// Parse the IP from the host to ensure it is supported.
|
||||
ip := net.ParseIP(host)
|
||||
switch {
|
||||
case ip.To4() != nil:
|
||||
if mask == nil {
|
||||
mask = defaultIPv4Mask
|
||||
}
|
||||
case ip.To16() != nil:
|
||||
if mask == nil {
|
||||
mask = defaultIPv6Mask
|
||||
}
|
||||
default:
|
||||
return nil, ErrUnsupportedIP
|
||||
}
|
||||
|
||||
return &net.IPNet{IP: ip.Mask(mask), Mask: mask}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user