| 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)
 
- 		}
 
- 		return config, nil
 
- 	})
 
- }
 
 
  |