mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-12-30 05:56:54 -05:00
use external config converter first, and then fallback to the internal one
This commit is contained in:
parent
901d13ca76
commit
268d7264e8
@ -4,6 +4,7 @@ package platform
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func ExpandEnv(s string) string {
|
||||
@ -13,3 +14,9 @@ func ExpandEnv(s string) string {
|
||||
func LineSeparator() string {
|
||||
return "\n"
|
||||
}
|
||||
|
||||
func GetToolLocation(file string) string {
|
||||
const name = "v2ray.location.tool"
|
||||
toolPath := EnvFlag{Name: name, AltName: NormalizeEnvName(name)}.GetValue(getExecutableDir)
|
||||
return filepath.Join(toolPath, file)
|
||||
}
|
||||
|
@ -45,14 +45,16 @@ 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 GetAssetLocation(file string) string {
|
||||
const name = "v2ray.location.asset"
|
||||
assetPath := EnvFlag{Name: name, AltName: NormalizeEnvName(name)}.GetValue(func() string {
|
||||
exec, err := os.Executable()
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return filepath.Dir(exec)
|
||||
})
|
||||
assetPath := EnvFlag{Name: name, AltName: NormalizeEnvName(name)}.GetValue(getExecutableDir)
|
||||
return filepath.Join(assetPath, file)
|
||||
}
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
package platform
|
||||
|
||||
import "path/filepath"
|
||||
|
||||
func ExpandEnv(s string) string {
|
||||
// TODO
|
||||
return s
|
||||
@ -10,3 +12,9 @@ func ExpandEnv(s string) string {
|
||||
func LineSeparator() string {
|
||||
return "\r\n"
|
||||
}
|
||||
|
||||
func GetToolLocation(file string) string {
|
||||
const name = "v2ray.location.tool"
|
||||
toolPath := EnvFlag{Name: name, AltName: NormalizeEnvName(name)}.GetValue(getExecutableDir)
|
||||
return filepath.Join(toolPath, file+".exe")
|
||||
}
|
||||
|
@ -1,5 +1,41 @@
|
||||
// +build json
|
||||
|
||||
package main
|
||||
|
||||
import _ "v2ray.com/core/tools/conf"
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
||||
"v2ray.com/core"
|
||||
"v2ray.com/core/app/log"
|
||||
"v2ray.com/core/common/platform"
|
||||
jsonconf "v2ray.com/ext/tools/conf/serial"
|
||||
)
|
||||
|
||||
func jsonToProto(input io.Reader) (*core.Config, error) {
|
||||
v2ctl := platform.GetToolLocation("v2ctl")
|
||||
_, err := os.Stat(v2ctl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
cmd := exec.Command(v2ctl, "config")
|
||||
cmd.Stdin = input
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
stdoutReader, err := cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer stdoutReader.Close()
|
||||
return core.LoadConfig(core.ConfigFormat_Protobuf, stdoutReader)
|
||||
}
|
||||
|
||||
func init() {
|
||||
core.RegisterConfigLoader(core.ConfigFormat_JSON, func(input io.Reader) (*core.Config, error) {
|
||||
config, err := jsonToProto(input)
|
||||
if err != nil {
|
||||
log.Trace(newError("failed to execute v2ctl to convert config file.").Base(err).AtWarning())
|
||||
return jsonconf.LoadJSONConfig(input)
|
||||
}
|
||||
return config, nil
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user