feat: try h3 connect DOH, failed will fall back h2; turn on with dns.prefer-h3: true

This commit is contained in:
Skyxim
2022-07-03 21:59:47 +08:00
parent 8eec86232c
commit 59ab2083aa
7 changed files with 82 additions and 16 deletions

View File

@@ -365,6 +365,7 @@ type FallbackFilter struct {
}
type Config struct {
PreferH3 bool
Main, Fallback []NameServer
Default []NameServer
ProxyServer []NameServer
@@ -378,29 +379,29 @@ type Config struct {
func NewResolver(config Config) *Resolver {
defaultResolver := &Resolver{
main: transform(config.Default, nil),
main: transform(config.Default, nil, config.PreferH3),
lruCache: cache.NewLRUCache[string, *D.Msg](cache.WithSize[string, *D.Msg](4096), cache.WithStale[string, *D.Msg](true)),
}
r := &Resolver{
ipv6: config.IPv6,
main: transform(config.Main, defaultResolver),
main: transform(config.Main, defaultResolver, config.PreferH3),
lruCache: cache.NewLRUCache[string, *D.Msg](cache.WithSize[string, *D.Msg](4096), cache.WithStale[string, *D.Msg](true)),
hosts: config.Hosts,
}
if len(config.Fallback) != 0 {
r.fallback = transform(config.Fallback, defaultResolver)
r.fallback = transform(config.Fallback, defaultResolver, config.PreferH3)
}
if len(config.ProxyServer) != 0 {
r.proxyServer = transform(config.ProxyServer, defaultResolver)
r.proxyServer = transform(config.ProxyServer, defaultResolver, config.PreferH3)
}
if len(config.Policy) != 0 {
r.policy = trie.New[*Policy]()
for domain, nameserver := range config.Policy {
_ = r.policy.Insert(domain, NewPolicy(transform([]NameServer{nameserver}, defaultResolver)))
_ = r.policy.Insert(domain, NewPolicy(transform([]NameServer{nameserver}, defaultResolver, config.PreferH3)))
}
}