98 lines
2.0 KiB
Go
98 lines
2.0 KiB
Go
package app
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func defaultDNSAttemptPolicy(dnsCount int) dnsAttemptPolicy {
|
|
tryLimit := envInt("RESOLVE_DNS_TRY_LIMIT", 2)
|
|
if tryLimit < 1 {
|
|
tryLimit = 1
|
|
}
|
|
if dnsCount > 0 && tryLimit > dnsCount {
|
|
tryLimit = dnsCount
|
|
}
|
|
budgetMS := envInt("RESOLVE_DNS_DOMAIN_BUDGET_MS", 1200)
|
|
if budgetMS < 200 {
|
|
budgetMS = 200
|
|
}
|
|
if budgetMS > 15000 {
|
|
budgetMS = 15000
|
|
}
|
|
return dnsAttemptPolicy{
|
|
TryLimit: tryLimit,
|
|
DomainBudget: time.Duration(budgetMS) * time.Millisecond,
|
|
StopOnNX: resolveNXEarlyStopEnabled(),
|
|
}
|
|
}
|
|
|
|
func directDNSAttemptPolicy(dnsCount int) dnsAttemptPolicy {
|
|
tryLimit := envInt("RESOLVE_DIRECT_TRY_LIMIT", 2)
|
|
if tryLimit < 1 {
|
|
tryLimit = 1
|
|
}
|
|
if tryLimit > 3 {
|
|
tryLimit = 3
|
|
}
|
|
if dnsCount > 0 && tryLimit > dnsCount {
|
|
tryLimit = dnsCount
|
|
}
|
|
budgetMS := envInt("RESOLVE_DIRECT_BUDGET_MS", 1200)
|
|
if budgetMS < 200 {
|
|
budgetMS = 200
|
|
}
|
|
if budgetMS > 15000 {
|
|
budgetMS = 15000
|
|
}
|
|
return dnsAttemptPolicy{
|
|
TryLimit: tryLimit,
|
|
DomainBudget: time.Duration(budgetMS) * time.Millisecond,
|
|
StopOnNX: resolveNXEarlyStopEnabled(),
|
|
}
|
|
}
|
|
|
|
func wildcardDNSAttemptPolicy(dnsCount int) dnsAttemptPolicy {
|
|
tryLimit := envInt("RESOLVE_WILDCARD_TRY_LIMIT", 1)
|
|
if tryLimit < 1 {
|
|
tryLimit = 1
|
|
}
|
|
if tryLimit > 2 {
|
|
tryLimit = 2
|
|
}
|
|
if dnsCount > 0 && tryLimit > dnsCount {
|
|
tryLimit = dnsCount
|
|
}
|
|
budgetMS := envInt("RESOLVE_WILDCARD_BUDGET_MS", 1200)
|
|
if budgetMS < 200 {
|
|
budgetMS = 200
|
|
}
|
|
if budgetMS > 15000 {
|
|
budgetMS = 15000
|
|
}
|
|
return dnsAttemptPolicy{
|
|
TryLimit: tryLimit,
|
|
DomainBudget: time.Duration(budgetMS) * time.Millisecond,
|
|
StopOnNX: resolveNXEarlyStopEnabled(),
|
|
}
|
|
}
|
|
|
|
func resolveNXEarlyStopEnabled() bool {
|
|
switch strings.ToLower(strings.TrimSpace(os.Getenv("RESOLVE_NX_EARLY_STOP"))) {
|
|
case "0", "false", "no", "off":
|
|
return false
|
|
default:
|
|
return true
|
|
}
|
|
}
|
|
|
|
func resolveNXHardQuarantineEnabled() bool {
|
|
switch strings.ToLower(strings.TrimSpace(os.Getenv("RESOLVE_NX_HARD_QUARANTINE"))) {
|
|
case "1", "true", "yes", "on":
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|