1
0
mirror of https://github.com/fumiama/terasu.git synced 2026-06-05 01:00:23 +08:00
Files
terasu/dns/cache.go
2025-10-03 14:47:40 +08:00

32 lines
673 B
Go

package dns
import (
"context"
"time"
"github.com/FloatTech/ttl"
"github.com/fumiama/terasu/ip"
)
var lookupTable = ttl.NewCache[string, []string](time.Hour)
// LookupHost use default resolver with its fallback
func LookupHost(ctx context.Context, host string) (addrs []string, err error) {
addrs = lookupTable.Get(host)
if len(addrs) == 0 {
addrs, err = DefaultResolver.LookupHost(ctx, host)
if err != nil {
if ip.IsIPv6Available.Get() {
addrs, err = IPv6Servers.lookupHostDoH(ctx, host)
} else {
addrs, err = IPv4Servers.lookupHostDoH(ctx, host)
}
if err != nil {
return nil, err
}
}
lookupTable.Set(host, addrs)
}
return
}