config.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package internet
  2. import (
  3. "v2ray.com/core/common/errors"
  4. "v2ray.com/core/common/loader"
  5. "v2ray.com/core/common/log"
  6. v2net "v2ray.com/core/common/net"
  7. )
  8. type ConfigCreator func() interface{}
  9. var (
  10. globalNetworkConfigCreatorCache = make(map[v2net.Network]ConfigCreator)
  11. globalNetworkSettings []*NetworkSettings
  12. ErrUnconfiguredNetwork = errors.New("Network config creator not set.")
  13. )
  14. func RegisterNetworkConfigCreator(network v2net.Network, creator ConfigCreator) error {
  15. // TODO: check duplicate
  16. globalNetworkConfigCreatorCache[network] = creator
  17. return nil
  18. }
  19. func CreateNetworkConfig(network v2net.Network) (interface{}, error) {
  20. creator, ok := globalNetworkConfigCreatorCache[network]
  21. if !ok {
  22. log.Warning("Internet: Network config creator not found: ", network)
  23. return nil, ErrUnconfiguredNetwork
  24. }
  25. return creator(), nil
  26. }
  27. func (v *NetworkSettings) GetTypedSettings() (interface{}, error) {
  28. return v.Settings.GetInstance()
  29. }
  30. func (v *StreamConfig) GetEffectiveNetworkSettings() (interface{}, error) {
  31. for _, settings := range v.NetworkSettings {
  32. if settings.Network == v.Network {
  33. return settings.GetTypedSettings()
  34. }
  35. }
  36. for _, settings := range globalNetworkSettings {
  37. if settings.Network == v.Network {
  38. return settings.GetTypedSettings()
  39. }
  40. }
  41. return CreateNetworkConfig(v.Network)
  42. }
  43. func (v *StreamConfig) GetEffectiveSecuritySettings() (interface{}, error) {
  44. for _, settings := range v.SecuritySettings {
  45. if settings.Type == v.SecurityType {
  46. return settings.GetInstance()
  47. }
  48. }
  49. return loader.GetInstance(v.SecurityType)
  50. }
  51. func (v *StreamConfig) HasSecuritySettings() bool {
  52. return len(v.SecurityType) > 0
  53. }
  54. func ApplyGlobalNetworkSettings(settings []*NetworkSettings) error {
  55. globalNetworkSettings = settings
  56. return nil
  57. }
  58. func (v *ProxyConfig) HasTag() bool {
  59. return v != nil && len(v.Tag) > 0
  60. }