Browse Source

Unify environment var readers

yuhan6665 2 years ago
parent
commit
4f05e0ac2b

+ 1 - 1
common/buf/readv_reader.go

@@ -147,7 +147,7 @@ var useReadv bool
 
 func init() {
 	const defaultFlagValue = "NOT_DEFINED_AT_ALL"
-	value := platform.NewEnvFlag("xray.buf.readv").GetValue(func() string { return defaultFlagValue })
+	value := platform.NewEnvFlag(platform.UseReadV).GetValue(func() string { return defaultFlagValue })
 	switch value {
 	case defaultFlagValue, "auto", "enable":
 		useReadv = true

+ 2 - 4
common/platform/others.go

@@ -17,15 +17,13 @@ func LineSeparator() string {
 }
 
 func GetToolLocation(file string) string {
-	const name = "xray.location.tool"
-	toolPath := EnvFlag{Name: name, AltName: NormalizeEnvName(name)}.GetValue(getExecutableDir)
+	toolPath := NewEnvFlag(UnixToolLocation).GetValue(getExecutableDir)
 	return filepath.Join(toolPath, file)
 }
 
 // GetAssetLocation searches for `file` in certain locations
 func GetAssetLocation(file string) string {
-	const name = "xray.location.asset"
-	assetPath := NewEnvFlag(name).GetValue(getExecutableDir)
+	assetPath := NewEnvFlag(UnixAssetLocation).GetValue(getExecutableDir)
 	defPath := filepath.Join(assetPath, file)
 	for _, p := range []string{
 		defPath,

+ 14 - 0
common/platform/platform.go

@@ -84,3 +84,17 @@ func GetConfDirPath() string {
 	configPath := NewEnvFlag(name).GetValue(func() string { return "" })
 	return configPath
 }
+
+const (
+	UnixToolLocation     = "xray.location.tool"
+	UnixAssetLocation    = "xray.location.asset"
+
+	UseReadV             = "xray.buf.readv"
+	UseFreedomSplice     = "xray.buf.splice"
+	UseVmessPadding      = "xray.vmess.padding"
+	UseCone              = "xray.cone.disabled"
+
+	BrowserDialerAddress = "xray.browser.dialer"
+	XUDPLog              = "xray.xudp.show"
+	XUDPBaseKey          = "xray.xudp.basekey"
+)

+ 4 - 9
common/xudp/xudp.go

@@ -6,11 +6,11 @@ import (
 	"encoding/base64"
 	"fmt"
 	"io"
-	"os"
 	"strings"
 
 	"github.com/xtls/xray-core/common/buf"
 	"github.com/xtls/xray-core/common/net"
+	"github.com/xtls/xray-core/common/platform"
 	"github.com/xtls/xray-core/common/protocol"
 	"github.com/xtls/xray-core/common/session"
 	"lukechampine.com/blake3"
@@ -28,20 +28,15 @@ var (
 	BaseKey []byte
 )
 
-const (
-	EnvShow    = "XRAY_XUDP_SHOW"
-	EnvBaseKey = "XRAY_XUDP_BASEKEY"
-)
-
 func init() {
-	if strings.ToLower(os.Getenv(EnvShow)) == "true" {
+	if strings.ToLower(platform.NewEnvFlag(platform.XUDPLog).GetValue(func() string { return "" })) == "true" {
 		Show = true
 	}
-	if raw, found := os.LookupEnv(EnvBaseKey); found {
+	if raw := platform.NewEnvFlag(platform.XUDPBaseKey).GetValue(func() string { return "" }); raw != "" {
 		if BaseKey, _ = base64.RawURLEncoding.DecodeString(raw); len(BaseKey) == 32 {
 			return
 		}
-		panic(EnvBaseKey + ": invalid value: " + raw)
+		panic(platform.XUDPBaseKey + ": invalid value: " + raw)
 	}
 	rand.Read(BaseKey)
 }

+ 3 - 2
core/xray.go

@@ -2,11 +2,11 @@ package core
 
 import (
 	"context"
-	"os"
 	"reflect"
 	"sync"
 
 	"github.com/xtls/xray-core/common"
+	"github.com/xtls/xray-core/common/platform"
 	"github.com/xtls/xray-core/common/serial"
 	"github.com/xtls/xray-core/features"
 	"github.com/xtls/xray-core/features/dns"
@@ -181,7 +181,8 @@ func NewWithContext(ctx context.Context, config *Config) (*Instance, error) {
 }
 
 func initInstanceWithConfig(config *Config, server *Instance) (bool, error) {
-	server.ctx = context.WithValue(server.ctx, "cone", os.Getenv("XRAY_CONE_DISABLED") != "true")
+	server.ctx = context.WithValue(server.ctx, "cone", 
+		platform.NewEnvFlag(platform.UseCone).GetValue(func() string { return "" }) != "true")
 
 	if config.Transport != nil {
 		features.PrintDeprecatedFeatureWarning("global transport settings")

+ 3 - 3
infra/conf/common.go

@@ -2,10 +2,10 @@ package conf
 
 import (
 	"encoding/json"
-	"os"
 	"strings"
 
 	"github.com/xtls/xray-core/common/net"
+	"github.com/xtls/xray-core/common/platform"
 	"github.com/xtls/xray-core/common/protocol"
 )
 
@@ -46,7 +46,7 @@ func (v *Address) UnmarshalJSON(data []byte) error {
 		return newError("invalid address: ", string(data)).Base(err)
 	}
 	if strings.HasPrefix(rawStr, "env:") {
-		rawStr = os.Getenv(rawStr[4:])
+		rawStr = platform.NewEnvFlag(rawStr[4:]).GetValue(func() string { return "" })
 	}
 	v.Address = net.ParseAddress(rawStr)
 
@@ -118,7 +118,7 @@ func parseIntPort(data []byte) (net.Port, error) {
 
 func parseStringPort(s string) (net.Port, net.Port, error) {
 	if strings.HasPrefix(s, "env:") {
-		s = os.Getenv(s[4:])
+		s = platform.NewEnvFlag(s[4:]).GetValue(func() string { return "" })
 	}
 
 	pair := strings.SplitN(s, "-", 2)

+ 1 - 1
proxy/freedom/freedom.go

@@ -41,7 +41,7 @@ func init() {
 		return h, nil
 	}))
 	const defaultFlagValue = "NOT_DEFINED_AT_ALL"
-	value := platform.NewEnvFlag("xray.buf.splice").GetValue(func() string { return defaultFlagValue })
+	value := platform.NewEnvFlag(platform.UseFreedomSplice).GetValue(func() string { return defaultFlagValue })
 	switch value {
 	case "auto", "enable":
 		useSplice = true

+ 1 - 1
proxy/vmess/outbound/outbound.go

@@ -245,7 +245,7 @@ func init() {
 
 	const defaultFlagValue = "NOT_DEFINED_AT_ALL"
 
-	paddingValue := platform.NewEnvFlag("xray.vmess.padding").GetValue(func() string { return defaultFlagValue })
+	paddingValue := platform.NewEnvFlag(platform.UseVmessPadding).GetValue(func() string { return defaultFlagValue })
 	if paddingValue != defaultFlagValue {
 		enablePadding = true
 	}

+ 3 - 2
transport/internet/websocket/dialer.go

@@ -8,12 +8,12 @@ import (
 	"io"
 	gonet "net"
 	"net/http"
-	"os"
 	"time"
 
 	"github.com/gorilla/websocket"
 	"github.com/xtls/xray-core/common"
 	"github.com/xtls/xray-core/common/net"
+	"github.com/xtls/xray-core/common/platform"
 	"github.com/xtls/xray-core/common/session"
 	"github.com/xtls/xray-core/transport/internet"
 	"github.com/xtls/xray-core/transport/internet/stat"
@@ -26,7 +26,8 @@ var webpage []byte
 var conns chan *websocket.Conn
 
 func init() {
-	if addr := os.Getenv("XRAY_BROWSER_DIALER"); addr != "" {
+	addr := platform.NewEnvFlag(platform.BrowserDialerAddress).GetValue(func() string { return "" })
+	if addr != "" {
 		conns = make(chan *websocket.Conn, 256)
 		go http.ListenAndServe(addr, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 			if r.URL.Path == "/websocket" {