| 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
- }
|