2020-12-04 01:36:16 +00:00
|
|
|
package platform // import "github.com/xtls/xray-core/common/platform"
|
2020-11-25 11:01:53 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
2023-10-28 22:21:57 +00:00
|
|
|
const (
|
|
|
|
PluginLocation = "xray.location.plugin"
|
|
|
|
ConfigLocation = "xray.location.config"
|
|
|
|
ConfdirLocation = "xray.location.confdir"
|
|
|
|
ToolLocation = "xray.location.tool"
|
|
|
|
AssetLocation = "xray.location.asset"
|
|
|
|
|
|
|
|
UseReadV = "xray.buf.readv"
|
|
|
|
UseFreedomSplice = "xray.buf.splice"
|
|
|
|
UseVmessPadding = "xray.vmess.padding"
|
|
|
|
UseCone = "xray.cone.disabled"
|
|
|
|
|
|
|
|
BufferSize = "xray.ray.buffer.size"
|
|
|
|
BrowserDialerAddress = "xray.browser.dialer"
|
|
|
|
XUDPLog = "xray.xudp.show"
|
|
|
|
XUDPBaseKey = "xray.xudp.basekey"
|
|
|
|
)
|
|
|
|
|
2020-11-25 11:01:53 +00:00
|
|
|
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.ReplaceAll(strings.ToUpper(strings.TrimSpace(name)), ".", "_")
|
|
|
|
}
|
|
|
|
|
|
|
|
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 GetPluginDirectory() string {
|
2023-10-28 22:21:57 +00:00
|
|
|
pluginDir := NewEnvFlag(PluginLocation).GetValue(getExecutableSubDir("plugins"))
|
2020-11-25 11:01:53 +00:00
|
|
|
return pluginDir
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetConfigurationPath() string {
|
2023-10-28 22:21:57 +00:00
|
|
|
configPath := NewEnvFlag(ConfigLocation).GetValue(getExecutableDir)
|
2020-11-25 11:01:53 +00:00
|
|
|
return filepath.Join(configPath, "config.json")
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetConfDirPath reads "xray.location.confdir"
|
|
|
|
func GetConfDirPath() string {
|
2023-10-28 22:21:57 +00:00
|
|
|
configPath := NewEnvFlag(ConfdirLocation).GetValue(func() string { return "" })
|
2020-11-25 11:01:53 +00:00
|
|
|
return configPath
|
|
|
|
}
|