in lib/config.go [275:326]
func newConfig(spec *configSpec, overrides map[string]Override, provider ConfigProvider) (*Config, error) {
if spec.Version != 4 && spec.Version != 6 {
return nil, fmt.Errorf("Supported version: 4, 6 - not %d", spec.Version)
}
targetIP := net.ParseIP(spec.ListenAddr)
if targetIP == nil {
return nil, fmt.Errorf("Unable to parse IP %s", targetIP)
}
addr := &net.UDPAddr{
IP: targetIP,
Port: spec.Port,
Zone: "",
}
algo, err := spec.algorithm(provider)
if err != nil {
return nil, err
}
sourcer, err := spec.sourcer(provider)
if err != nil {
return nil, err
}
// extras
extras, err := provider.ParseExtras(spec.Extras)
if err != nil {
return nil, err
}
handler, err := provider.NewHandler(extras, spec.Version)
if err != nil {
return nil, err
}
return &Config{
Version: spec.Version,
Addr: addr,
Algorithm: algo,
ServerUpdateInterval: time.Duration(
spec.UpdateServerInterval) * time.Second,
PacketBufSize: spec.PacketBufSize,
Handler: handler,
HostSourcer: sourcer,
RCRatio: spec.RCRatio,
Overrides: overrides,
Extras: extras,
CacheSize: spec.CacheSize,
CacheRate: spec.CacheRate,
Rate: spec.Rate,
ReplyAddr: &net.UDPAddr{IP: net.ParseIP(spec.ReplyAddr)},
}, nil
}