config.go 1.7 KB

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