func (v *InboundDetourConfig) Build() (*core.InboundConnectionConfig, error) { config := new(core.InboundConnectionConfig) if v.PortRange == nil { return nil, errors.New("Port range not specified in InboundDetour.") } config.PortRange = v.PortRange.Build() if v.ListenOn != nil { if v.ListenOn.Family().IsDomain() { return nil, errors.New("Unable to listen on domain address: ", v.ListenOn.Domain()) } config.ListenOn = v.ListenOn.Build() } config.Tag = v.Tag if v.Allocation != nil { as, err := v.Allocation.Build() if err != nil { return nil, err } config.AllocationStrategy = as } if v.StreamSetting != nil { ss, err := v.StreamSetting.Build() if err != nil { return nil, err } config.StreamSettings = ss } config.AllowPassiveConnection = v.AllowPassive rawConfig, err := inboundConfigLoader.LoadWithID(v.Settings, v.Protocol) if err != nil { return nil, errors.Base(err).Message("Failed to load inbound detour config.") } ts, err := rawConfig.(Buildable).Build() if err != nil { return nil, err } config.Settings = ts return config, nil }