65 lines
2.1 KiB
Go
65 lines
2.1 KiB
Go
type Config struct {
|
|
Address string
|
|
Upstream string
|
|
Fallback string
|
|
Bootstrap string
|
|
DNSSEC bool
|
|
KeepAlive bool
|
|
Timeout time.Duration
|
|
Verbose bool
|
|
}
|
|
|
|
// Update the initClients method:
|
|
func (s *Server) initClients() error {
|
|
logger.Debug("Initializing DNS clients")
|
|
|
|
// Initialize upstream client
|
|
resolvedUpstream, err := s.resolveServerAddress(s.config.Upstream)
|
|
if err != nil {
|
|
logger.Error("Failed to resolve upstream %s: %v", s.config.Upstream, err)
|
|
return fmt.Errorf("failed to resolve upstream %s: %w", s.config.Upstream, err)
|
|
}
|
|
|
|
logger.Debug("Creating upstream client for %s (resolved: %s)", s.config.Upstream, resolvedUpstream)
|
|
upstreamClient, err := client.New(resolvedUpstream, client.Options{
|
|
DNSSEC: s.config.DNSSEC,
|
|
KeepAlive: s.config.KeepAlive,
|
|
})
|
|
if err != nil {
|
|
logger.Error("Failed to create upstream client: %v", err)
|
|
return fmt.Errorf("failed to create upstream client: %w", err)
|
|
}
|
|
s.upstreamClient = upstreamClient
|
|
|
|
if s.config.Verbose {
|
|
logger.Info("Initialized upstream client: %s -> %s (KeepAlive: %v)", s.config.Upstream, resolvedUpstream, s.config.KeepAlive)
|
|
}
|
|
|
|
// Initialize fallback client if specified
|
|
if s.config.Fallback != "" {
|
|
resolvedFallback, err := s.resolveServerAddress(s.config.Fallback)
|
|
if err != nil {
|
|
logger.Error("Failed to resolve fallback %s: %v", s.config.Fallback, err)
|
|
return fmt.Errorf("failed to resolve fallback %s: %w", s.config.Fallback, err)
|
|
}
|
|
|
|
logger.Debug("Creating fallback client for %s (resolved: %s)", s.config.Fallback, resolvedFallback)
|
|
fallbackClient, err := client.New(resolvedFallback, client.Options{
|
|
DNSSEC: s.config.DNSSEC,
|
|
KeepAlive: s.config.KeepAlive,
|
|
})
|
|
if err != nil {
|
|
logger.Error("Failed to create fallback client: %v", err)
|
|
return fmt.Errorf("failed to create fallback client: %w", err)
|
|
}
|
|
s.fallbackClient = fallbackClient
|
|
|
|
if s.config.Verbose {
|
|
logger.Info("Initialized fallback client: %s -> %s (KeepAlive: %v)", s.config.Fallback, resolvedFallback, s.config.KeepAlive)
|
|
}
|
|
}
|
|
|
|
logger.Debug("All DNS clients initialized successfully")
|
|
return nil
|
|
}
|