mirror of https://github.com/v2ray/v2ray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
907 B
47 lines
907 B
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 |
|
|
|
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 |
|
}) |
|
}
|
|
|