feat(netxlite): add dialer factory, simplify resolver factory (#459)
See https://github.com/ooni/probe/issues/1591
This commit is contained in:
parent
b52d784f00
commit
6a1e92cace
7 changed files with 107 additions and 19 deletions
|
|
@ -2,6 +2,7 @@ package netxlite
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
|
|
@ -23,20 +24,15 @@ type Resolver interface {
|
|||
CloseIdleConnections()
|
||||
}
|
||||
|
||||
// ResolverConfig contains config for creating a resolver.
|
||||
type ResolverConfig struct {
|
||||
// Logger is the MANDATORY logger to use.
|
||||
Logger Logger
|
||||
}
|
||||
|
||||
// NewResolver creates a new resolver.
|
||||
func NewResolver(config *ResolverConfig) Resolver {
|
||||
// NewResolverSystem creates a new resolver using system
|
||||
// facilities for resolving domain names (e.g., getaddrinfo).
|
||||
func NewResolverSystem(logger Logger) Resolver {
|
||||
return &resolverIDNA{
|
||||
Resolver: &resolverLogger{
|
||||
Resolver: &resolverShortCircuitIPAddr{
|
||||
Resolver: &resolverSystem{},
|
||||
},
|
||||
Logger: config.Logger,
|
||||
Logger: logger,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -159,3 +155,30 @@ func (r *resolverShortCircuitIPAddr) LookupHost(ctx context.Context, hostname st
|
|||
}
|
||||
return r.Resolver.LookupHost(ctx, hostname)
|
||||
}
|
||||
|
||||
// ErrNoResolver indicates you are using a dialer without a resolver.
|
||||
var ErrNoResolver = errors.New("no configured resolver")
|
||||
|
||||
// nullResolver is a resolver that is not capable of resolving
|
||||
// domain names to IP addresses and always returns ErrNoResolver.
|
||||
type nullResolver struct{}
|
||||
|
||||
// LookupHost implements Resolver.LookupHost.
|
||||
func (r *nullResolver) LookupHost(ctx context.Context, hostname string) (addrs []string, err error) {
|
||||
return nil, ErrNoResolver
|
||||
}
|
||||
|
||||
// Network implements Resolver.Network.
|
||||
func (r *nullResolver) Network() string {
|
||||
return "null"
|
||||
}
|
||||
|
||||
// Address implements Resolver.Address.
|
||||
func (r *nullResolver) Address() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// CloseIdleConnections implements Resolver.CloseIdleConnections.
|
||||
func (r *nullResolver) CloseIdleConnections() {
|
||||
// nothing
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue