func newConfig()

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
}