| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | package internetimport (	"v2ray.com/core/common/errors"	"v2ray.com/core/common/log"	v2net "v2ray.com/core/common/net"	"v2ray.com/core/common/serial")type ConfigCreator func() interface{}var (	globalNetworkConfigCreatorCache = make(map[v2net.Network]ConfigCreator)	globalNetworkSettings []*NetworkSettings	ErrUnconfiguredNetwork = errors.New("Network config creator not set."))func RegisterNetworkConfigCreator(network v2net.Network, creator ConfigCreator) error {	// TODO: check duplicate	globalNetworkConfigCreatorCache[network] = creator	return nil}func CreateNetworkConfig(network v2net.Network) (interface{}, error) {	creator, ok := globalNetworkConfigCreatorCache[network]	if !ok {		log.Warning("Internet: Network config creator not found: ", network)		return nil, ErrUnconfiguredNetwork	}	return creator(), nil}func (v *NetworkSettings) GetTypedSettings() (interface{}, error) {	return v.Settings.GetInstance()}func (v *StreamConfig) GetEffectiveNetworkSettings() (interface{}, error) {	for _, settings := range v.NetworkSettings {		if settings.Network == v.Network {			return settings.GetTypedSettings()		}	}	for _, settings := range globalNetworkSettings {		if settings.Network == v.Network {			return settings.GetTypedSettings()		}	}	return CreateNetworkConfig(v.Network)}func (v *StreamConfig) GetEffectiveSecuritySettings() (interface{}, error) {	for _, settings := range v.SecuritySettings {		if settings.Type == v.SecurityType {			return settings.GetInstance()		}	}	return serial.GetInstance(v.SecurityType)}func (v *StreamConfig) HasSecuritySettings() bool {	return len(v.SecurityType) > 0}func ApplyGlobalNetworkSettings(settings []*NetworkSettings) error {	globalNetworkSettings = settings	return nil}func (v *ProxyConfig) HasTag() bool {	return v != nil && len(v.Tag) > 0}
 |