1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-11-17 18:06:15 -05:00
v2fly/common/net/dns.go

45 lines
872 B
Go
Raw Normal View History

2017-12-19 17:55:09 -05:00
package net
import (
"net"
"sync/atomic"
"unsafe"
)
// IPResolver is the interface to resolve host name to IPs.
type IPResolver interface {
LookupIP(host string) ([]net.IP, error)
}
type systemIPResolver int
func (s systemIPResolver) LookupIP(host string) ([]net.IP, error) {
return net.LookupIP(host)
}
const (
systemIPResolverInstance = systemIPResolver(0)
)
// SystemIPResolver returns an IPResolver that resolves IP through underlying system.
func SystemIPResolver() IPResolver {
return systemIPResolverInstance
}
var (
ipResolver unsafe.Pointer
)
func LookupIP(host string) ([]net.IP, error) {
r := (*IPResolver)(atomic.LoadPointer(&ipResolver))
return (*r).LookupIP(host)
}
func RegisterIPResolver(resolver IPResolver) {
atomic.StorePointer(&ipResolver, unsafe.Pointer(&resolver))
}
func init() {
RegisterIPResolver(systemIPResolverInstance)
}