| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | 
							- package platform // import "v2ray.com/core/common/platform"
 
- import (
 
- 	"os"
 
- 	"path/filepath"
 
- 	"strconv"
 
- 	"strings"
 
- )
 
- type EnvFlag struct {
 
- 	Name    string
 
- 	AltName string
 
- }
 
- func NewEnvFlag(name string) EnvFlag {
 
- 	return EnvFlag{
 
- 		Name:    name,
 
- 		AltName: NormalizeEnvName(name),
 
- 	}
 
- }
 
- func (f EnvFlag) GetValue(defaultValue func() string) string {
 
- 	if v, found := os.LookupEnv(f.Name); found {
 
- 		return v
 
- 	}
 
- 	if len(f.AltName) > 0 {
 
- 		if v, found := os.LookupEnv(f.AltName); found {
 
- 			return v
 
- 		}
 
- 	}
 
- 	return defaultValue()
 
- }
 
- func (f EnvFlag) GetValueAsInt(defaultValue int) int {
 
- 	useDefaultValue := false
 
- 	s := f.GetValue(func() string {
 
- 		useDefaultValue = true
 
- 		return ""
 
- 	})
 
- 	if useDefaultValue {
 
- 		return defaultValue
 
- 	}
 
- 	v, err := strconv.ParseInt(s, 10, 32)
 
- 	if err != nil {
 
- 		return defaultValue
 
- 	}
 
- 	return int(v)
 
- }
 
- func NormalizeEnvName(name string) string {
 
- 	return strings.Replace(strings.ToUpper(strings.TrimSpace(name)), ".", "_", -1)
 
- }
 
- func getExecutableDir() string {
 
- 	exec, err := os.Executable()
 
- 	if err != nil {
 
- 		return ""
 
- 	}
 
- 	return filepath.Dir(exec)
 
- }
 
- func getExecutableSubDir(dir string) func() string {
 
- 	return func() string {
 
- 		return filepath.Join(getExecutableDir(), dir)
 
- 	}
 
- }
 
- func GetAssetLocation(file string) string {
 
- 	const name = "v2ray.location.asset"
 
- 	assetPath := NewEnvFlag(name).GetValue(getExecutableDir)
 
- 	return filepath.Join(assetPath, file)
 
- }
 
- func GetPluginDirectory() string {
 
- 	const name = "v2ray.location.plugin"
 
- 	pluginDir := NewEnvFlag(name).GetValue(getExecutableSubDir("plugins"))
 
- 	return pluginDir
 
- }
 
- func GetConfigurationPath() string {
 
- 	const name = "v2ray.location.config"
 
- 	configPath := NewEnvFlag(name).GetValue(getExecutableDir)
 
- 	return filepath.Join(configPath, "config.json")
 
- }
 
 
  |