| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | 
							- package core
 
- import (
 
- 	"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()
 
- 	common.Close(d.DNSClient)
 
- 	d.DNSClient = client
 
- }
 
 
  |