| 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) // nolint: errcheck
- d.DNSClient = client
- }
|