Skip to content

Commit 3687f66

Browse files
committed
dnsx,tunnel: m refactor dns info
1 parent 471d035 commit 3687f66

7 files changed

Lines changed: 51 additions & 18 deletions

File tree

intra/backend/dnsx.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ type DNSTransportMultProvider interface {
155155
}
156156

157157
type DNSResolver interface {
158+
DNSTransportProvider
158159
DNSTransportMult
159160
DNSTransportMultProvider
160161
RDNSResolver

intra/dns.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,27 @@ func csv2ssv(csv string) string {
291291

292292
func fetchDNSInfo(r dnsx.Resolver, id string) string {
293293
if tr, rerr := r.GetInternal(id); rerr == nil {
294+
if tr.ID() != id {
295+
// replace tr with the actual transport, if it is TransportMult
296+
// with one or more internal/hidden away transports.
297+
var mtr dnsx.TransportMult
298+
var err error
299+
if mtr, err = r.GetMultInternal(id); err == nil {
300+
tr, err = mtr.GetInternal(id)
301+
}
302+
if tr == nil {
303+
return id + " <x?x> " + err.Error()
304+
}
305+
}
306+
294307
var sb strings.Builder
308+
tid := tr.ID()
309+
if tid != id {
310+
sb.WriteString(id + " <<?>> " + tr.ID())
311+
} else {
312+
sb.WriteString(id)
313+
}
314+
sb.WriteString(":")
295315
sb.WriteString(tr.GetAddr())
296316
sb.WriteString("[")
297317
sb.WriteString(tr.Type())
@@ -308,6 +328,6 @@ func fetchDNSInfo(r dnsx.Resolver, id string) string {
308328
}
309329
return sb.String()
310330
} else {
311-
return rerr.Error()
331+
return id + " <<?>> " + rerr.Error()
312332
}
313333
}

intra/dns53/dot_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,12 @@ var (
123123
autoNsOpts = &x.DNSOpts{PIDCSV: x.RpnWin, IPCSV: "", TIDCSV: x.CT + "test0"}
124124
)
125125

126-
func (*fakeBdg) OnQuery(_, _, _ string, _ int) *x.DNSOpts { return autoNsOpts }
127-
func (*fakeBdg) OnUpstreamAnswer(_ *x.DNSSummary, _ string) *x.DNSOpts { return nil }
128-
func (*fakeBdg) OnResponse(*x.DNSSummary) {}
129-
func (*fakeBdg) OnDNSAdded(string) {}
130-
func (*fakeBdg) OnDNSRemoved(string) {}
131-
func (*fakeBdg) OnDNSStopped() {}
126+
func (*fakeBdg) OnQuery(_, _, _ string, _ int) *x.DNSOpts { return autoNsOpts }
127+
func (*fakeBdg) OnUpstreamAnswer(_ *x.DNSSummary, _ *x.DNSOpts, _ string) *x.DNSOpts { return nil }
128+
func (*fakeBdg) OnResponse(*x.DNSSummary) {}
129+
func (*fakeBdg) OnDNSAdded(string) {}
130+
func (*fakeBdg) OnDNSRemoved(string) {}
131+
func (*fakeBdg) OnDNSStopped() {}
132132

133133
func (*fakeBdg) Route(a, b, c, d, e string) *x.Tab { return baseTab }
134134
func (*fakeBdg) OnComplete(*x.ServerSummary) {}

intra/dnscrypt/multiserver.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,11 @@ func (proxy *DcMulti) Add(t x.DNSTransport) bool {
614614

615615
// Get implements dnsx.TransportMult
616616
func (proxy *DcMulti) Get(id string) (x.DNSTransport, error) {
617+
return proxy.GetInternal(id)
618+
}
619+
620+
// GetInternal implements dnsx.TransportMult
621+
func (proxy *DcMulti) GetInternal(id string) (dnsx.Transport, error) {
617622
if t := proxy.serversInfo.get(id); t != nil {
618623
return t, nil
619624
}

intra/dnsx/plus.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,11 @@ func (t *plus) Remove(id string) (y bool) {
391391

392392
// Get implements TransportMult.
393393
func (t *plus) Get(id string) (x.DNSTransport, error) {
394+
return t.GetInternal(id)
395+
}
396+
397+
// GetInternal implements TransportMult.
398+
func (t *plus) GetInternal(id string) (Transport, error) {
394399
t.mu.RLock()
395400
defer t.mu.RUnlock()
396401

intra/dnsx/transport.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,13 @@ type Transport interface {
141141

142142
// TransportMult is a hybrid: transport and a multi-transport.
143143
type TransportMult interface {
144-
x.DNSTransportMult
144+
TransportMultInternal
145145
Transport
146146
}
147147

148148
type TransportMultInternal interface {
149149
x.DNSTransportMult
150+
TransportProviderInternal
150151
}
151152

152153
type TransportMultProviderInternal interface {
@@ -159,13 +160,6 @@ type TransportProviderInternal interface {
159160
x.DNSTransportProvider
160161
// GetInternal returns the internal transport interface for the given ID.
161162
GetInternal(id string) (Transport, error)
162-
163-
// special purpose pre-defined transports:
164-
165-
// Gateway implements a DNS ALG transport
166-
Gateway() Gateway
167-
// MDNS returns the mdns transport, if available; error otherwise.
168-
MDNS() (MDNSTransport, error)
169163
}
170164

171165
type Resolver interface {
@@ -181,6 +175,13 @@ type Resolver interface {
181175
// Serve reads DNS query from conn and writes DNS answer to conn
182176
Serve(proto string, conn protect.Conn, uid string) (rx, tx int64, errs []error)
183177

178+
// special purpose pre-defined transports:
179+
180+
// Gateway implements a DNS ALG transport
181+
Gateway() Gateway
182+
// MDNS returns the mdns transport, if available; error otherwise.
183+
MDNS() (MDNSTransport, error)
184+
184185
// StopAll stops all transports.
185186
StopAll()
186187

@@ -839,9 +840,10 @@ func (r *resolver) determineTransport(id string) Transport {
839840
if t0 != nil && (t1 == nil || !mayusedefault || activeTransport(t0)) {
840841
return t0
841842
} else if t1 != nil && (!mayusedefault || activeTransport(t1)) {
843+
log.W("dns: fwd: %s missing or inactive; using %s instead", id0, id1)
842844
return t1
843845
} else if tf != nil && mayusedefault {
844-
log.W("dns: fwd: %s is missing; using default", id0)
846+
log.W("dns: fwd: %s & %s missing or inactive; using default", id0, id1)
845847
return tf // todo: assert tf != nil?
846848
}
847849

intra/tunnel.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,13 +542,13 @@ func (t *rtunnel) stat() (*x.NetStat, error) {
542542
out.RDNSIn.DNSPreferred = fetchDNSInfo(r, x.Preferred)
543543
out.RDNSIn.DNSDefault = fetchDNSInfo(r, x.Default)
544544
out.RDNSIn.DNSSystem = fetchDNSInfo(r, x.System)
545-
dns := make([]string, 0, 3)
545+
dns := make([]string, 0, 8)
546546
if csv := r.LiveTransports(); len(csv) > 0 {
547547
for tr := range strings.SplitSeq(csv, ",") {
548548
dns = append(dns, fetchDNSInfo(r, tr))
549549
}
550550
}
551-
out.RDNSIn.DNS = strconv.Itoa(len(dns)) + "\n" + strings.Join(dns, ";")
551+
out.RDNSIn.DNS = strconv.Itoa(len(dns)) + "\n" + strings.Join(dns, "\n")
552552
out.RDNSIn.ALG = t.resolver.S()
553553
}
554554
if p := t.proxies; p != nil {

0 commit comments

Comments
 (0)