| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package main
- import (
- "io"
- "os"
- "os/exec"
- "v2ray.com/core"
- "v2ray.com/core/common/platform"
- )
- 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
- cmd.SysProcAttr = getSysProcAttr()
- stdoutReader, err := cmd.StdoutPipe()
- if err != nil {
- return nil, err
- }
- defer stdoutReader.Close()
- if err := cmd.Start(); err != nil {
- return nil, err
- }
- config, err := core.LoadConfig(core.ConfigFormat_Protobuf, stdoutReader)
- cmd.Wait()
- return config, err
- }
- func init() {
- core.RegisterConfigLoader(core.ConfigFormat_JSON, func(input io.Reader) (*core.Config, error) {
- config, err := jsonToProto(input)
- if err != nil {
- return nil, newError("failed to execute v2ctl to convert config file.").Base(err).AtWarning()
- }
- return config, nil
- })
- }
|