Skip to content

Commit bcfbdb6

Browse files
authored
add dns server option to DNSResolver
This commit is for ipfs#6915. This enables dns resolver to select server.
1 parent f58665c commit bcfbdb6

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

namesys/dns.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,31 @@ type LookupTXTFunc func(name string) (txt []string, err error)
1818

1919
// DNSResolver implements a Resolver on DNS domains
2020
type DNSResolver struct {
21-
lookupTXT LookupTXTFunc
21+
lookupTXT LookupTXTFunc
22+
DNSAddress string
2223
// TODO: maybe some sort of caching?
2324
// cache would need a timeout
2425
}
2526

2627
// 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+
}
2946
}
3047

3148
// Resolve implements Resolver.

0 commit comments

Comments
 (0)