| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | package coreimport (	"net"	"sync"	"v2ray.com/core/common")// DNSClient is a V2Ray feature for querying DNS information.type DNSClient interface {	Feature	LookupIP(host string) ([]net.IP, error)}type syncDNSClient struct {	sync.RWMutex	DNSClient}func (d *syncDNSClient) LookupIP(host string) ([]net.IP, error) {	d.RLock()	defer d.RUnlock()	if d.DNSClient == nil {		return net.LookupIP(host)	}	return d.DNSClient.LookupIP(host)}func (d *syncDNSClient) Start() error {	d.RLock()	defer d.RUnlock()	if d.DNSClient == nil {		return nil	}	return d.DNSClient.Start()}func (d *syncDNSClient) Close() error {	d.RLock()	defer d.RUnlock()	return common.Close(d.DNSClient)}func (d *syncDNSClient) Set(client DNSClient) {	if client == nil {		return	}	d.Lock()	defer d.Unlock()	d.DNSClient = client}
 |