| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | 
							- package core
 
- import "net"
 
- import "sync"
 
- // 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() {
 
- 	d.RLock()
 
- 	defer d.RUnlock()
 
- 	if d.DNSClient != nil {
 
- 		d.DNSClient.Close()
 
- 	}
 
- }
 
- func (d *syncDNSClient) Set(client DNSClient) {
 
- 	if client == nil {
 
- 		return
 
- 	}
 
- 	d.Lock()
 
- 	defer d.Unlock()
 
- 	d.DNSClient = client
 
- }
 
 
  |