diff --git a/core/commands/dns.go b/core/commands/dns.go index 900f0ee1e0fd572d3958d63cd5ed663db7d0a711..e24b6a483d5afc9741bb7b5bcba95adc2d43ac8e 100644 --- a/core/commands/dns.go +++ b/core/commands/dns.go @@ -56,7 +56,7 @@ The resolver will give: recursive, _, _ := req.Option("recursive").Bool() name := req.Arguments()[0] - var resolver namesys.DNSResolver + resolver := namesys.NewDNSResolver() depth := 1 if recursive { diff --git a/namesys/dns.go b/namesys/dns.go index f57ddce590183bf289a0d22e2eba900abdd4d0d0..3703bd8d01decfb0276b596028baf58492311ddc 100644 --- a/namesys/dns.go +++ b/namesys/dns.go @@ -11,12 +11,26 @@ import ( path "github.com/ipfs/go-ipfs/path" ) +type LookupTXTFunc func(name string) (txt []string, err error) + // DNSResolver implements a Resolver on DNS domains type DNSResolver struct { + lookupTXT LookupTXTFunc // TODO: maybe some sort of caching? // 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. func (r *DNSResolver) Resolve(ctx context.Context, name string) (path.Path, error) { 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) - txt, err := net.LookupTXT(name) + txt, err := r.lookupTXT(name) if err != nil { return "", err } diff --git a/namesys/namesys.go b/namesys/namesys.go index 0f5b853bea724d8f3833485815ddfdae480e7480..7fe317b66958766e2f15749ceb1568ff06bff91f 100644 --- a/namesys/namesys.go +++ b/namesys/namesys.go @@ -27,7 +27,7 @@ type mpns struct { func NewNameSystem(r routing.IpfsRouting) NameSystem { return &mpns{ resolvers: map[string]resolver{ - "dns": new(DNSResolver), + "dns": newDNSResolver(), "proquint": new(ProquintResolver), "dht": newRoutingResolver(r), },