@@ -18,14 +18,31 @@ type LookupTXTFunc func(name string) (txt []string, err error)
18
18
19
19
// DNSResolver implements a Resolver on DNS domains
20
20
type DNSResolver struct {
21
- lookupTXT LookupTXTFunc
21
+ lookupTXT LookupTXTFunc
22
+ DNSAddress string
22
23
// TODO: maybe some sort of caching?
23
24
// cache would need a timeout
24
25
}
25
26
26
27
// NewDNSResolver constructs a name resolver using DNS TXT records.
27
- func NewDNSResolver () * DNSResolver {
28
- return & DNSResolver {lookupTXT : net .LookupTXT }
28
+ func NewDNSResolver (dnsaddress string ) * DNSResolver {
29
+ var lookupTXTDNS func (ctx context.Context , name string ) ([]string , error )
30
+ if dnsaddress == "" {
31
+ lookupTXTDNS = (& net.Resolver {}).LookupTXT
32
+ } else {
33
+ lookupTXTDNS = (& net.Resolver {
34
+ PreferGo : true ,
35
+ Dial : func (ctx context.Context , network , address string ) (net.Conn , error ) {
36
+ var d net.Dialer
37
+ return d .DialContext (ctx , "udp" , dnsaddress )
38
+ },
39
+ }).LookupTXT
40
+ }
41
+ return & DNSResolver {lookupTXT : func (name string ) (txt []string , err error ) {
42
+ return lookupTXTDNS (context .Background (), name )
43
+ },
44
+ DNSAddress : dnsaddress ,
45
+ }
29
46
}
30
47
31
48
// Resolve implements Resolver.
0 commit comments