Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Commit ec9e1df

Browse files
committed
make DNS resolver pluggable, use new madns.BasicResolver interface
1 parent 3d90782 commit ec9e1df

File tree

6 files changed

+19
-69
lines changed

6 files changed

+19
-69
lines changed

dns.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
"net"
87
"strings"
98

109
path "github.com/ipfs/go-path"
1110
opts "github.com/ipfs/interface-go-ipfs-core/options/namesys"
1211
isd "github.com/jbenet/go-is-domain"
12+
madns "github.com/multiformats/go-multiaddr-dns"
1313
)
1414

1515
const ethTLD = "eth"
1616
const linkTLD = "domains"
1717

1818
// LookupTXTFunc is a generic type for a function that lookups TXT record values.
19-
type LookupTXTFunc func(name string) (txt []string, err error)
19+
type LookupTXTFunc func(ctx context.Context, name string) (txt []string, err error)
2020

2121
// DNSResolver implements a Resolver on DNS domains
2222
type DNSResolver struct {
@@ -26,8 +26,8 @@ type DNSResolver struct {
2626
}
2727

2828
// NewDNSResolver constructs a name resolver using DNS TXT records.
29-
func NewDNSResolver() *DNSResolver {
30-
return &DNSResolver{lookupTXT: net.LookupTXT}
29+
func NewDNSResolver(rslv madns.BasicResolver) *DNSResolver {
30+
return &DNSResolver{lookupTXT: rslv.LookupTXT}
3131
}
3232

3333
// Resolve implements Resolver.
@@ -74,10 +74,10 @@ func (r *DNSResolver) resolveOnceAsync(ctx context.Context, name string, options
7474
}
7575

7676
rootChan := make(chan lookupRes, 1)
77-
go workDomain(r, fqdn, rootChan)
77+
go workDomain(ctx, r, fqdn, rootChan)
7878

7979
subChan := make(chan lookupRes, 1)
80-
go workDomain(r, "_dnslink."+fqdn, subChan)
80+
go workDomain(ctx, r, "_dnslink."+fqdn, subChan)
8181

8282
appendPath := func(p path.Path) (path.Path, error) {
8383
if len(segments) > 1 {
@@ -121,10 +121,10 @@ func (r *DNSResolver) resolveOnceAsync(ctx context.Context, name string, options
121121
return out
122122
}
123123

124-
func workDomain(r *DNSResolver, name string, res chan lookupRes) {
124+
func workDomain(ctx context.Context, r *DNSResolver, name string, res chan lookupRes) {
125125
defer close(res)
126126

127-
txt, err := r.lookupTXT(name)
127+
txt, err := r.lookupTXT(ctx, name)
128128
if err != nil {
129129
// Error is != nil
130130
res <- lookupRes{"", err}

dns_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package namesys
22

33
import (
4+
"context"
45
"fmt"
56
"testing"
67

@@ -11,7 +12,7 @@ type mockDNS struct {
1112
entries map[string][]string
1213
}
1314

14-
func (m *mockDNS) lookupTXT(name string) (txt []string, err error) {
15+
func (m *mockDNS) lookupTXT(ctx context.Context, name string) (txt []string, err error) {
1516
txt, ok := m.entries[name]
1617
if !ok {
1718
return nil, fmt.Errorf("no TXT entry for %s", name)

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ require (
2222
github.com/libp2p/go-libp2p-record v0.1.3
2323
github.com/libp2p/go-libp2p-testing v0.4.0
2424
github.com/multiformats/go-multiaddr v0.3.1
25+
github.com/multiformats/go-multiaddr-dns v0.3.0
2526
github.com/multiformats/go-multihash v0.0.14
2627
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc
2728
)

0 commit comments

Comments
 (0)