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

Commit 2b85ea5

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

File tree

7 files changed

+23
-71
lines changed

7 files changed

+23
-71
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
)

go.sum

Lines changed: 2 additions & 56 deletions
Large diffs are not rendered by default.

namesys.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
ci "github.com/libp2p/go-libp2p-core/crypto"
3030
peer "github.com/libp2p/go-libp2p-core/peer"
3131
routing "github.com/libp2p/go-libp2p-core/routing"
32+
madns "github.com/multiformats/go-multiaddr-dns"
3233
)
3334

3435
// mpns (a multi-protocol NameSystem) implements generic IPFS naming.
@@ -49,7 +50,7 @@ type mpns struct {
4950
}
5051

5152
// NewNameSystem will construct the IPFS naming system based on Routing
52-
func NewNameSystem(r routing.ValueStore, ds ds.Datastore, cachesize int) NameSystem {
53+
func NewNameSystem(r routing.ValueStore, ds ds.Datastore, rslv madns.BasicResolver, cachesize int) NameSystem {
5354
var (
5455
cache *lru.Cache
5556
staticMap map[string]path.Path
@@ -73,7 +74,7 @@ func NewNameSystem(r routing.ValueStore, ds ds.Datastore, cachesize int) NameSys
7374
}
7475

7576
return &mpns{
76-
dnsResolver: NewDNSResolver(),
77+
dnsResolver: NewDNSResolver(rslv),
7778
proquintResolver: new(ProquintResolver),
7879
ipnsResolver: NewIpnsResolver(r),
7980
ipnsPublisher: NewIpnsPublisher(r, ds),

namesys_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
peer "github.com/libp2p/go-libp2p-core/peer"
1818
pstoremem "github.com/libp2p/go-libp2p-peerstore/pstoremem"
1919
record "github.com/libp2p/go-libp2p-record"
20+
madns "github.com/multiformats/go-multiaddr-dns"
2021
)
2122

2223
type mockResolver struct {
@@ -109,7 +110,7 @@ func TestPublishWithCache0(t *testing.T) {
109110
"pk": record.PublicKeyValidator{},
110111
})
111112

112-
nsys := NewNameSystem(routing, dst, 0)
113+
nsys := NewNameSystem(routing, dst, madns.DefaultResolver, 0)
113114
// CID is arbitrary.
114115
p, err := path.ParsePath("QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn")
115116
if err != nil {
@@ -142,7 +143,7 @@ func TestPublishWithTTL(t *testing.T) {
142143
"pk": record.PublicKeyValidator{},
143144
})
144145

145-
nsys := NewNameSystem(routing, dst, 128)
146+
nsys := NewNameSystem(routing, dst, madns.DefaultResolver, 128)
146147
// CID is arbitrary.
147148
p, err := path.ParsePath("QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn")
148149
if err != nil {

republisher/repub_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222
ipns_pb "github.com/ipfs/go-ipns/pb"
2323
path "github.com/ipfs/go-path"
2424

25+
madns "github.com/multiformats/go-multiaddr-dns"
26+
2527
keystore "github.com/ipfs/go-ipfs-keystore"
2628
namesys "github.com/ipfs/go-namesys"
2729
. "github.com/ipfs/go-namesys/republisher"
@@ -74,7 +76,7 @@ func TestRepublish(t *testing.T) {
7476
var nodes []*mockNode
7577
for i := 0; i < 10; i++ {
7678
n := getMockNode(t, ctx)
77-
ns := namesys.NewNameSystem(n.dht, n.store, 0)
79+
ns := namesys.NewNameSystem(n.dht, n.store, madns.DefaultResolver, 0)
7880

7981
nsystems = append(nsystems, ns)
8082
nodes = append(nodes, n)
@@ -153,7 +155,7 @@ func TestLongEOLRepublish(t *testing.T) {
153155
var nodes []*mockNode
154156
for i := 0; i < 10; i++ {
155157
n := getMockNode(t, ctx)
156-
ns := namesys.NewNameSystem(n.dht, n.store, 0)
158+
ns := namesys.NewNameSystem(n.dht, n.store, madns.DefaultResolver, 0)
157159

158160
nsystems = append(nsystems, ns)
159161
nodes = append(nodes, n)

0 commit comments

Comments
 (0)