Skip to content

Commit caf2514

Browse files
committed
refactor(netxlite): use *Netx for the system resolver
This code modifies how we construct netxlite's system resolver such that public functions use the *Netx equivalents. The general idea for which I am pushing here is to have additional clarity about dependencies, to better analyze the requirements of non measuring code for ooni/probe#2531.
1 parent 223e7c3 commit caf2514

File tree

3 files changed

+24
-16
lines changed

3 files changed

+24
-16
lines changed

internal/netxlite/dnsovergetaddrinfo.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,14 @@ type dnsOverGetaddrinfoTransport struct {
2727
provider *MaybeCustomUnderlyingNetwork
2828
}
2929

30+
func (netx *Netx) newDNSOverGetaddrinfoTransport() model.DNSTransport {
31+
return &dnsOverGetaddrinfoTransport{provider: netx.tproxyNilSafeProvider()}
32+
}
33+
3034
// NewDNSOverGetaddrinfoTransport creates a new dns-over-getaddrinfo transport.
3135
func NewDNSOverGetaddrinfoTransport() model.DNSTransport {
32-
return &dnsOverGetaddrinfoTransport{}
36+
netx := &Netx{Underlying: nil}
37+
return netx.newDNSOverGetaddrinfoTransport()
3338
}
3439

3540
var _ model.DNSTransport = &dnsOverGetaddrinfoTransport{}

internal/netxlite/netx.go

+2-11
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,8 @@ type Netx struct {
1818
}
1919

2020
// tproxyNilSafeProvider wraps the [model.UnderlyingNetwork] using a [tproxyNilSafeProvider].
21-
func (n *Netx) tproxyNilSafeProvider() *MaybeCustomUnderlyingNetwork {
22-
return &MaybeCustomUnderlyingNetwork{n.Underlying}
23-
}
24-
25-
// NewStdlibResolver is like [netxlite.NewStdlibResolver] but the constructed [model.Resolver]
26-
// uses the [model.UnderlyingNetwork] configured inside the [Netx] structure.
27-
func (n *Netx) NewStdlibResolver(logger model.DebugLogger, wrappers ...model.DNSTransportWrapper) model.Resolver {
28-
unwrapped := &resolverSystem{
29-
t: WrapDNSTransport(&dnsOverGetaddrinfoTransport{provider: n.tproxyNilSafeProvider()}, wrappers...),
30-
}
31-
return WrapResolver(logger, unwrapped)
21+
func (netx *Netx) tproxyNilSafeProvider() *MaybeCustomUnderlyingNetwork {
22+
return &MaybeCustomUnderlyingNetwork{netx.Underlying}
3223
}
3324

3425
// NewDialerWithResolver is like [netxlite.NewDialerWithResolver] but the constructed [model.Dialer]

internal/netxlite/resolvercore.go

+16-4
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,15 @@ var ErrNoDNSTransport = errors.New("operation requires a DNS transport")
2727
// with an internal "stdlib" resolver type. The list of optional wrappers
2828
// allow to wrap the underlying getaddrinfo transport. Any nil wrapper
2929
// will be silently ignored by the code that performs the wrapping.
30+
func (netx *Netx) NewStdlibResolver(logger model.DebugLogger, wrappers ...model.DNSTransportWrapper) model.Resolver {
31+
return WrapResolver(logger, netx.newUnwrappedStdlibResolver(wrappers...))
32+
}
33+
34+
// NewStdlibResolver is equivalent to creating an empty [*Netx]
35+
// and callings its NewStdlibResolver method.
3036
func NewStdlibResolver(logger model.DebugLogger, wrappers ...model.DNSTransportWrapper) model.Resolver {
31-
return WrapResolver(logger, NewUnwrappedStdlibResolver(wrappers...))
37+
netx := &Netx{Underlying: nil}
38+
return netx.NewStdlibResolver(logger, wrappers...)
3239
}
3340

3441
// NewParallelDNSOverHTTPSResolver creates a new DNS over HTTPS resolver
@@ -40,13 +47,18 @@ func NewParallelDNSOverHTTPSResolver(logger model.DebugLogger, URL string) model
4047
return WrapResolver(logger, NewUnwrappedParallelResolver(txp))
4148
}
4249

50+
func (netx *Netx) newUnwrappedStdlibResolver(wrappers ...model.DNSTransportWrapper) model.Resolver {
51+
return &resolverSystem{
52+
t: WrapDNSTransport(netx.newDNSOverGetaddrinfoTransport(), wrappers...),
53+
}
54+
}
55+
4356
// NewUnwrappedStdlibResolver returns a new, unwrapped resolver using the standard
4457
// library (i.e., getaddrinfo if possible and &net.Resolver{} otherwise). As the name
4558
// implies, this function returns an unwrapped resolver.
4659
func NewUnwrappedStdlibResolver(wrappers ...model.DNSTransportWrapper) model.Resolver {
47-
return &resolverSystem{
48-
t: WrapDNSTransport(NewDNSOverGetaddrinfoTransport(), wrappers...),
49-
}
60+
netx := &Netx{Underlying: nil}
61+
return netx.newUnwrappedStdlibResolver(wrappers...)
5062
}
5163

5264
// NewSerialUDPResolver creates a new Resolver using DNS-over-UDP

0 commit comments

Comments
 (0)