mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-21 11:44:16 +08:00
namesys/dns: Pluggable lookupTXT field
So we can attach a mock lookup function for testing.
This commit is contained in:
@ -56,7 +56,7 @@ The resolver will give:
|
|||||||
|
|
||||||
recursive, _, _ := req.Option("recursive").Bool()
|
recursive, _, _ := req.Option("recursive").Bool()
|
||||||
name := req.Arguments()[0]
|
name := req.Arguments()[0]
|
||||||
var resolver namesys.DNSResolver
|
resolver := namesys.NewDNSResolver()
|
||||||
|
|
||||||
depth := 1
|
depth := 1
|
||||||
if recursive {
|
if recursive {
|
||||||
|
@ -11,12 +11,26 @@ import (
|
|||||||
path "github.com/ipfs/go-ipfs/path"
|
path "github.com/ipfs/go-ipfs/path"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type LookupTXTFunc func(name string) (txt []string, err error)
|
||||||
|
|
||||||
// DNSResolver implements a Resolver on DNS domains
|
// DNSResolver implements a Resolver on DNS domains
|
||||||
type DNSResolver struct {
|
type DNSResolver struct {
|
||||||
|
lookupTXT LookupTXTFunc
|
||||||
// TODO: maybe some sort of caching?
|
// TODO: maybe some sort of caching?
|
||||||
// cache would need a timeout
|
// cache would need a timeout
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewDNSResolver constructs a name resolver using DNS TXT records.
|
||||||
|
func NewDNSResolver() Resolver {
|
||||||
|
return &DNSResolver{lookupTXT: net.LookupTXT}
|
||||||
|
}
|
||||||
|
|
||||||
|
// newDNSResolver constructs a name resolver using DNS TXT records,
|
||||||
|
// returning a resolver instead of NewDNSResolver's Resolver.
|
||||||
|
func newDNSResolver() resolver {
|
||||||
|
return &DNSResolver{lookupTXT: net.LookupTXT}
|
||||||
|
}
|
||||||
|
|
||||||
// Resolve implements Resolver.
|
// Resolve implements Resolver.
|
||||||
func (r *DNSResolver) Resolve(ctx context.Context, name string) (path.Path, error) {
|
func (r *DNSResolver) Resolve(ctx context.Context, name string) (path.Path, error) {
|
||||||
return r.ResolveN(ctx, name, DefaultDepthLimit)
|
return r.ResolveN(ctx, name, DefaultDepthLimit)
|
||||||
@ -36,7 +50,7 @@ func (r *DNSResolver) resolveOnce(ctx context.Context, name string) (path.Path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("DNSResolver resolving %s", name)
|
log.Infof("DNSResolver resolving %s", name)
|
||||||
txt, err := net.LookupTXT(name)
|
txt, err := r.lookupTXT(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ type mpns struct {
|
|||||||
func NewNameSystem(r routing.IpfsRouting) NameSystem {
|
func NewNameSystem(r routing.IpfsRouting) NameSystem {
|
||||||
return &mpns{
|
return &mpns{
|
||||||
resolvers: map[string]resolver{
|
resolvers: map[string]resolver{
|
||||||
"dns": new(DNSResolver),
|
"dns": newDNSResolver(),
|
||||||
"proquint": new(ProquintResolver),
|
"proquint": new(ProquintResolver),
|
||||||
"dht": newRoutingResolver(r),
|
"dht": newRoutingResolver(r),
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user