dns: Add preferred_by rule item

This commit is contained in:
世界
2026-08-30 17:41:40 +08:00
parent f8a623e0c6
commit 14b8f1bd4d
12 changed files with 208 additions and 4 deletions
+16 -1
View File
@@ -19,7 +19,10 @@ func RegisterTransport(registry *dns.TransportRegistry) {
dns.RegisterTransport[option.HostsDNSServerOptions](registry, C.DNSTypeHosts, NewTransport)
}
var _ adapter.DNSTransport = (*Transport)(nil)
var (
_ adapter.DNSTransport = (*Transport)(nil)
_ adapter.DNSTransportWithPreferredDomain = (*Transport)(nil)
)
type Transport struct {
dns.TransportAdapter
@@ -66,6 +69,18 @@ func (t *Transport) Close() error {
func (t *Transport) Reset() {
}
func (t *Transport) PreferredDomain(domain string) bool {
if _, loaded := t.predefined[domain]; loaded {
return true
}
for _, file := range t.files {
if len(file.Lookup(domain)) > 0 {
return true
}
}
return false
}
func (t *Transport) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, error) {
question := message.Question[0]
domain := mDNS.CanonicalName(question.Name)
+13 -1
View File
@@ -23,7 +23,10 @@ func RegisterTransport(registry *dns.TransportRegistry) {
dns.RegisterTransport[option.LocalDNSServerOptions](registry, C.DNSTypeLocal, NewTransport)
}
var _ adapter.DNSTransport = (*Transport)(nil)
var (
_ adapter.DNSTransport = (*Transport)(nil)
_ adapter.DNSTransportWithPreferredDomain = (*Transport)(nil)
)
type Transport struct {
dns.TransportAdapter
@@ -97,6 +100,15 @@ func (t *Transport) Close() error {
func (t *Transport) Reset() {
}
func (t *Transport) PreferredDomain(domain string) bool {
if t.hosts != nil && t.resolved == nil {
if len(t.hosts.Lookup(dns.FqdnToDomain(domain))) > 0 {
return true
}
}
return t.hasNeighborHost(domain)
}
func (t *Transport) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, error) {
if t.resolved != nil {
response := t.lookupNeighbor(message)
+13 -1
View File
@@ -24,7 +24,10 @@ func RegisterTransport(registry *dns.TransportRegistry) {
dns.RegisterTransport[option.LocalDNSServerOptions](registry, C.DNSTypeLocal, NewTransport)
}
var _ adapter.DNSTransport = (*Transport)(nil)
var (
_ adapter.DNSTransport = (*Transport)(nil)
_ adapter.DNSTransportWithPreferredDomain = (*Transport)(nil)
)
type Transport struct {
dns.TransportAdapter
@@ -106,3 +109,12 @@ func (t *Transport) Reset() {
t.dhcpTransport.Reset()
}
}
func (t *Transport) PreferredDomain(domain string) bool {
if t.hosts != nil {
if len(t.hosts.Lookup(dns.FqdnToDomain(domain))) > 0 {
return true
}
}
return t.hasNeighborHost(domain)
}
+11
View File
@@ -43,6 +43,17 @@ func (t *Transport) lookupNeighbor(message *mDNS.Msg) *mDNS.Msg {
return dns.FixedResponse(message.Id, question, addresses, C.DefaultDNSTTL)
}
func (t *Transport) hasNeighborHost(domain string) bool {
if t.neighborResolver == nil {
return false
}
host := extractNeighborHost(domain, t.neighborSuffixes)
if host == "" {
return false
}
return len(t.neighborResolver.LookupAddresses(host)) > 0
}
func extractNeighborHost(canonical string, suffixes []string) string {
for _, suffix := range suffixes {
if !strings.HasSuffix(canonical, suffix) || len(canonical) <= len(suffix) {