Skip to content

Commit 7d8a22a

Browse files
committed
Further refactoring
1 parent e37f3e3 commit 7d8a22a

21 files changed

+90
-248
lines changed

cmd/gluetun/main.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -367,18 +367,18 @@ func _main(ctx context.Context, buildInfo models.BuildInformation,
367367
"port forwarding", goroutine.OptionTimeout(time.Second))
368368
go portForwardLooper.Run(portForwardCtx, portForwardDone)
369369

370-
unboundLogger := logger.New(log.SetComponent("dns"))
371-
unboundLooper := dns.NewLoop(allSettings.DNS, httpClient,
372-
unboundLogger)
370+
dnsLogger := logger.New(log.SetComponent("dns"))
371+
dnsLooper := dns.NewLoop(allSettings.DNS, httpClient,
372+
dnsLogger)
373373
dnsHandler, dnsCtx, dnsDone := goshutdown.NewGoRoutineHandler(
374374
"dns", goroutine.OptionTimeout(defaultShutdownTimeout))
375-
// wait for unboundLooper.Restart or its ticker launched with RunRestartTicker
376-
go unboundLooper.Run(dnsCtx, dnsDone)
375+
// wait for dnsLooper.Restart or its ticker launched with RunRestartTicker
376+
go dnsLooper.Run(dnsCtx, dnsDone)
377377
otherGroupHandler.Add(dnsHandler)
378378

379379
dnsTickerHandler, dnsTickerCtx, dnsTickerDone := goshutdown.NewGoRoutineHandler(
380380
"dns ticker", goroutine.OptionTimeout(defaultShutdownTimeout))
381-
go unboundLooper.RunRestartTicker(dnsTickerCtx, dnsTickerDone)
381+
go dnsLooper.RunRestartTicker(dnsTickerCtx, dnsTickerDone)
382382
controlGroupHandler.Add(dnsTickerHandler)
383383

384384
ipFetcher := ipinfo.New(httpClient)
@@ -406,7 +406,7 @@ func _main(ctx context.Context, buildInfo models.BuildInformation,
406406
vpnLogger := logger.New(log.SetComponent("vpn"))
407407
vpnLooper := vpn.NewLoop(allSettings.VPN, ipv6Supported, allSettings.Firewall.VPNInputPorts,
408408
providers, storage, ovpnConf, netLinker, firewallConf, routingConf, portForwardLooper,
409-
cmder, publicIPLooper, unboundLooper, vpnLogger, httpClient,
409+
cmder, publicIPLooper, dnsLooper, vpnLogger, httpClient,
410410
buildInfo, *allSettings.Version.Enabled)
411411
vpnHandler, vpnCtx, vpnDone := goshutdown.NewGoRoutineHandler(
412412
"vpn", goroutine.OptionTimeout(time.Second))
@@ -446,7 +446,7 @@ func _main(ctx context.Context, buildInfo models.BuildInformation,
446446
"http server", goroutine.OptionTimeout(defaultShutdownTimeout))
447447
httpServer, err := server.New(httpServerCtx, controlServerAddress, controlServerLogging,
448448
logger.New(log.SetComponent("http server")),
449-
buildInfo, vpnLooper, portForwardLooper, unboundLooper, updaterLooper, publicIPLooper,
449+
buildInfo, vpnLooper, portForwardLooper, dnsLooper, updaterLooper, publicIPLooper,
450450
storage, ipv6Supported)
451451
if err != nil {
452452
return fmt.Errorf("setting up control server: %w", err)

go.mod

-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ require (
2727
golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b
2828
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230215201556-9c5414ab4bde
2929
gopkg.in/ini.v1 v1.67.0
30-
inet.af/netaddr v0.0.0-20220811202034-502d2d690317
3130
)
3231

3332
require (
@@ -52,8 +51,6 @@ require (
5251
github.com/prometheus/procfs v0.6.0 // indirect
5352
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
5453
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae // indirect
55-
go4.org/intern v0.0.0-20211027215823-ae77deb06f29 // indirect
56-
go4.org/unsafe/assume-no-moving-gc v0.0.0-20230221090011-e4bae7ad2296 // indirect
5754
golang.org/x/crypto v0.11.0 // indirect
5855
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect
5956
golang.org/x/mod v0.8.0 // indirect

go.sum

-16
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
4646
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4747
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
4848
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
49-
github.com/dvyukov/go-fuzz v0.0.0-20210103155950-6a8e9d1f2415/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
5049
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
5150
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
5251
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
@@ -332,7 +331,6 @@ github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1
332331
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
333332
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk=
334333
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4=
335-
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
336334
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
337335
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
338336
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
@@ -346,12 +344,6 @@ go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+
346344
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
347345
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
348346
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
349-
go4.org/intern v0.0.0-20211027215823-ae77deb06f29 h1:UXLjNohABv4S58tHmeuIZDO6e3mHpW2Dx33gaNt03LE=
350-
go4.org/intern v0.0.0-20211027215823-ae77deb06f29/go.mod h1:cS2ma+47FKrLPdXFpr7CuxiTW3eyJbWew4qx0qtQWDA=
351-
go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
352-
go4.org/unsafe/assume-no-moving-gc v0.0.0-20220617031537-928513b29760/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
353-
go4.org/unsafe/assume-no-moving-gc v0.0.0-20230221090011-e4bae7ad2296 h1:QJ/xcIANMLApehfgPCHnfK1hZiaMmbaTVmPv7DAoTbo=
354-
go4.org/unsafe/assume-no-moving-gc v0.0.0-20230221090011-e4bae7ad2296/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
355347
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
356348
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
357349
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -373,7 +365,6 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl
373365
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
374366
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
375367
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
376-
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
377368
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
378369
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
379370
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
@@ -395,7 +386,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
395386
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
396387
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
397388
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
398-
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
399389
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
400390
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
401391
golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
@@ -411,7 +401,6 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
411401
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
412402
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
413403
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
414-
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
415404
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
416405
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
417406
golang.org/x/sync v0.0.0-20220923202941-7f9b1623fab7/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -440,9 +429,7 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
440429
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
441430
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
442431
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
443-
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
444432
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
445-
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
446433
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
447434
golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
448435
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -483,7 +470,6 @@ golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtn
483470
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
484471
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
485472
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
486-
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
487473
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
488474
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
489475
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
@@ -550,7 +536,5 @@ honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWh
550536
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
551537
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
552538
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
553-
inet.af/netaddr v0.0.0-20220811202034-502d2d690317 h1:U2fwK6P2EqmopP/hFLTOAjWTki0qgd4GMJn5X8wOleU=
554-
inet.af/netaddr v0.0.0-20220811202034-502d2d690317/go.mod h1:OIezDfdzOgFhuw4HuWapWq2e9l0H9tK4F1j+ETRtF3k=
555539
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
556540
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=

internal/configuration/settings/dnsblacklist.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package settings
33
import (
44
"errors"
55
"fmt"
6-
"net/http"
76
"net/netip"
87
"regexp"
98

@@ -84,7 +83,7 @@ func (b *DNSBlacklist) overrideWith(other DNSBlacklist) {
8483
b.AddBlockedIPPrefixes = gosettings.OverrideWithSlice(b.AddBlockedIPPrefixes, other.AddBlockedIPPrefixes)
8584
}
8685

87-
func (b DNSBlacklist) ToBlockBuilderSettings(client *http.Client) (
86+
func (b DNSBlacklist) ToBlockBuilderSettings() (
8887
settings blockbuilder.Settings) {
8988
return blockbuilder.Settings{
9089
BlockMalicious: b.BlockMalicious,

internal/configuration/settings/dot.go

+49-12
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package settings
33
import (
44
"errors"
55
"fmt"
6+
"net/netip"
67
"time"
78

9+
"github.com/qdm12/dns/v2/pkg/provider"
810
"github.com/qdm12/gosettings"
911
"github.com/qdm12/gotree"
1012
)
@@ -15,14 +17,18 @@ type DoT struct {
1517
// and used. It defaults to true, and cannot be nil
1618
// in the internal state.
1719
Enabled *bool
18-
// UpdatePeriod is the period to update DNS block
19-
// lists and cryptographic files for DNSSEC validation.
20+
// UpdatePeriod is the period to update DNS block lists.
2021
// It can be set to 0 to disable the update.
2122
// It defaults to 24h and cannot be nil in
2223
// the internal state.
2324
UpdatePeriod *time.Duration
24-
// Unbound contains settings to configure Unbound.
25-
Unbound Unbound
25+
// Providers is a list of DNS over TLS providers
26+
Providers []string `json:"providers"`
27+
// Caching is true if the DoT server should cache
28+
// DNS responses.
29+
Caching *bool `json:"caching"`
30+
// IPv6 is true if the DoT server should connect over IPv6.
31+
IPv6 *bool `json:"ipv6"`
2632
// Blacklist contains settings to configure the filter
2733
// block lists.
2834
Blacklist DNSBlacklist
@@ -39,9 +45,11 @@ func (d DoT) validate() (err error) {
3945
ErrDoTUpdatePeriodTooShort, *d.UpdatePeriod, minUpdatePeriod)
4046
}
4147

42-
err = d.Unbound.validate()
43-
if err != nil {
44-
return err
48+
for _, s := range d.Providers {
49+
_, err := provider.Parse(s)
50+
if err != nil {
51+
return err
52+
}
4553
}
4654

4755
err = d.Blacklist.validate()
@@ -56,7 +64,9 @@ func (d *DoT) copy() (copied DoT) {
5664
return DoT{
5765
Enabled: gosettings.CopyPointer(d.Enabled),
5866
UpdatePeriod: gosettings.CopyPointer(d.UpdatePeriod),
59-
Unbound: d.Unbound.copy(),
67+
Providers: gosettings.CopySlice(d.Providers),
68+
Caching: gosettings.CopyPointer(d.Caching),
69+
IPv6: gosettings.CopyPointer(d.IPv6),
6070
Blacklist: d.Blacklist.copy(),
6171
}
6272
}
@@ -66,7 +76,9 @@ func (d *DoT) copy() (copied DoT) {
6676
func (d *DoT) mergeWith(other DoT) {
6777
d.Enabled = gosettings.MergeWithPointer(d.Enabled, other.Enabled)
6878
d.UpdatePeriod = gosettings.MergeWithPointer(d.UpdatePeriod, other.UpdatePeriod)
69-
d.Unbound.mergeWith(other.Unbound)
79+
d.Providers = gosettings.MergeWithSlice(d.Providers, other.Providers)
80+
d.Caching = gosettings.MergeWithPointer(d.Caching, other.Caching)
81+
d.IPv6 = gosettings.MergeWithPointer(d.IPv6, other.IPv6)
7082
d.Blacklist.mergeWith(other.Blacklist)
7183
}
7284

@@ -76,18 +88,36 @@ func (d *DoT) mergeWith(other DoT) {
7688
func (d *DoT) overrideWith(other DoT) {
7789
d.Enabled = gosettings.OverrideWithPointer(d.Enabled, other.Enabled)
7890
d.UpdatePeriod = gosettings.OverrideWithPointer(d.UpdatePeriod, other.UpdatePeriod)
79-
d.Unbound.overrideWith(other.Unbound)
91+
d.Providers = gosettings.OverrideWithSlice(d.Providers, other.Providers)
92+
d.Caching = gosettings.OverrideWithPointer(d.Caching, other.Caching)
93+
d.IPv6 = gosettings.OverrideWithPointer(d.IPv6, other.IPv6)
8094
d.Blacklist.overrideWith(other.Blacklist)
8195
}
8296

8397
func (d *DoT) setDefaults() {
8498
d.Enabled = gosettings.DefaultPointer(d.Enabled, true)
8599
const defaultUpdatePeriod = 24 * time.Hour
86100
d.UpdatePeriod = gosettings.DefaultPointer(d.UpdatePeriod, defaultUpdatePeriod)
87-
d.Unbound.setDefaults()
101+
d.Providers = gosettings.DefaultSlice(d.Providers, []string{
102+
provider.Cloudflare().Name,
103+
})
104+
d.Caching = gosettings.DefaultPointer(d.Caching, true)
105+
d.IPv6 = gosettings.DefaultPointer(d.IPv6, false)
88106
d.Blacklist.setDefaults()
89107
}
90108

109+
func (d DoT) GetFirstPlaintextIPv4() (ipv4 netip.Addr) {
110+
s := d.Providers[0]
111+
provider, err := provider.Parse(s)
112+
if err != nil {
113+
// Settings should be validated before calling this function,
114+
// so an error happening here is a programming error.
115+
panic(err)
116+
}
117+
118+
return provider.DNS.IPv4[0]
119+
}
120+
91121
func (d DoT) String() string {
92122
return d.toLinesNode().String()
93123
}
@@ -106,7 +136,14 @@ func (d DoT) toLinesNode() (node *gotree.Node) {
106136
}
107137
node.Appendf("Update period: %s", update)
108138

109-
node.AppendNode(d.Unbound.toLinesNode())
139+
authServers := node.Appendf("Authoritative servers:")
140+
for _, provider := range d.Providers {
141+
authServers.Appendf(provider)
142+
}
143+
144+
node.Appendf("Caching: %s", gosettings.BoolToYesNo(d.Caching))
145+
node.Appendf("IPv6: %s", gosettings.BoolToYesNo(d.IPv6))
146+
110147
node.AppendNode(d.Blacklist.toLinesNode())
111148

112149
return node
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
package settings
22

3-
func boolPtr(b bool) *bool { return &b }
4-
func uint8Ptr(n uint8) *uint8 { return &n }
3+
func boolPtr(b bool) *bool { return &b }

internal/configuration/settings/netaddr.go

-36
This file was deleted.

internal/configuration/settings/settings_test.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,10 @@ func Test_Settings_String(t *testing.T) {
4343
| └── DNS over TLS settings:
4444
| ├── Enabled: yes
4545
| ├── Update period: every 24h0m0s
46-
| ├── DNS over TLS settings:
47-
| | ├── Authoritative servers:
48-
| | | └── Cloudflare
49-
| | ├── Caching: yes
50-
| | └── IPv6: no
46+
| ├── Authoritative servers:
47+
| | └── Cloudflare
48+
| ├── Caching: yes
49+
| ├── IPv6: no
5150
| └── DNS filtering settings:
5251
| ├── Block malicious: yes
5352
| ├── Block ads: no

0 commit comments

Comments
 (0)