From 8566ecee1d017778fdc2d1e2334fe51d541dc85a Mon Sep 17 00:00:00 2001 From: Shelikhoo Date: Sat, 19 Jun 2021 23:50:12 +0100 Subject: [PATCH] v2ray jsonpb engineering support --- main/commands/all/commands.go | 2 +- main/commands/all/engineering/convertpb.go | 57 ++++++++++++++++++++ main/commands/all/engineering/engineering.go | 18 +++++++ main/commands/all/engineering/reversepb.go | 42 +++++++++++++++ main/distro/all/all.go | 3 ++ 5 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 main/commands/all/engineering/convertpb.go create mode 100644 main/commands/all/engineering/engineering.go create mode 100644 main/commands/all/engineering/reversepb.go diff --git a/main/commands/all/commands.go b/main/commands/all/commands.go index afa00354c..af7e937a4 100644 --- a/main/commands/all/commands.go +++ b/main/commands/all/commands.go @@ -6,7 +6,7 @@ import ( "github.com/v2fly/v2ray-core/v4/main/commands/base" ) -// go:generate go run v2ray.com/core/common/errors/errorgen +//go:generate go run v2ray.com/core/common/errors/errorgen func init() { base.RootCommand.Commands = append( diff --git a/main/commands/all/engineering/convertpb.go b/main/commands/all/engineering/convertpb.go new file mode 100644 index 000000000..3de4e5670 --- /dev/null +++ b/main/commands/all/engineering/convertpb.go @@ -0,0 +1,57 @@ +package engineering + +import ( + "bytes" + "fmt" + core "github.com/v2fly/v2ray-core/v4" + "github.com/v2fly/v2ray-core/v4/common/cmdarg" + "github.com/v2fly/v2ray-core/v4/main/commands/base" + "google.golang.org/protobuf/proto" + "io" + "os" +) + +var ( + configFiles cmdarg.Arg + configDirs cmdarg.Arg + configFormat *string + configDirRecursively *bool +) + +func setConfigFlags(cmd *base.Command) { + configFormat = cmd.Flag.String("format", core.FormatAuto, "") + configDirRecursively = cmd.Flag.Bool("r", false, "") + + cmd.Flag.Var(&configFiles, "config", "") + cmd.Flag.Var(&configFiles, "c", "") + cmd.Flag.Var(&configDirs, "confdir", "") + cmd.Flag.Var(&configDirs, "d", "") +} + +var cmdConvertPb = &base.Command{ + UsageLine: "{{.Exec}} engineering convertpb [-c config.json] [-d dir]", + CustomFlags: true, + Run: func(cmd *base.Command, args []string) { + setConfigFlags(cmd) + cmd.Flag.Parse(args) + config, err := core.LoadConfig(*configFormat, configFiles) + if err != nil { + if len(configFiles) == 0 { + base.Fatalf("%s", newError("failed to load config").Base(err)) + return + + } else { + base.Fatalf("%s", newError(fmt.Sprintf("failed to load config: %s", configFiles)).Base(err)) + return + } + + } + bytew, err := proto.Marshal(config) + if err != nil { + base.Fatalf("%s", newError("failed to marshal config").Base(err)) + return + } + io.Copy(os.Stdout, bytes.NewReader(bytew)) + + }, +} diff --git a/main/commands/all/engineering/engineering.go b/main/commands/all/engineering/engineering.go new file mode 100644 index 000000000..f5c0fb78e --- /dev/null +++ b/main/commands/all/engineering/engineering.go @@ -0,0 +1,18 @@ +package engineering + +import "github.com/v2fly/v2ray-core/v4/main/commands/base" + +//go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen + +var cmdEngineering = &base.Command{ + UsageLine: "{{.Exec}} engineering", + Commands: []*base.Command{ + cmdConvertPb, + cmdReversePb, + }, +} + +func init() { + base.RegisterCommand(cmdEngineering) + +} diff --git a/main/commands/all/engineering/reversepb.go b/main/commands/all/engineering/reversepb.go new file mode 100644 index 000000000..4df5d4b7a --- /dev/null +++ b/main/commands/all/engineering/reversepb.go @@ -0,0 +1,42 @@ +package engineering + +import ( + "bytes" + "flag" + "github.com/golang/protobuf/proto" + core "github.com/v2fly/v2ray-core/v4" + "github.com/v2fly/v2ray-core/v4/infra/conf/jsonpb" + "github.com/v2fly/v2ray-core/v4/infra/conf/v2jsonpb" + "github.com/v2fly/v2ray-core/v4/main/commands/base" + "io" + "os" +) + +var cmdReversePb = &base.Command{ + UsageLine: "{{.Exec}} engineering reversepb [-f format]", + Flag: func() flag.FlagSet { + fs := flag.NewFlagSet("", flag.ExitOnError) + configFormat = fs.String("f", "v2jsonpb", "") + return *fs + }(), + Run: func(cmd *base.Command, args []string) { + cmd.Flag.Parse(args) + configIn := bytes.NewBuffer(nil) + io.Copy(configIn, os.Stdin) + var conf core.Config + if err := proto.Unmarshal(configIn.Bytes(), &conf); err != nil { + base.Fatalf("%s", err) + } + switch *configFormat { + case "jsonpb": + if err := jsonpb.DumpJsonPb(&conf, os.Stdout); err != nil { + base.Fatalf("%s", err) + } + case "v2jsonpb": + if value, err := v2jsonpb.DumpV2JsonPb(&conf); err != nil { + base.Fatalf("%s", err) + } else { + io.Copy(os.Stdout, bytes.NewReader(value)) + } + } + }} diff --git a/main/distro/all/all.go b/main/distro/all/all.go index 9219a4dbf..3d5f6cd0a 100644 --- a/main/distro/all/all.go +++ b/main/distro/all/all.go @@ -76,6 +76,9 @@ import ( // commands _ "github.com/v2fly/v2ray-core/v4/main/commands/all" + //engineering commands + _ "github.com/v2fly/v2ray-core/v4/main/commands/all/engineering" + // Commands that rely on jsonv4 format This disable selective compile _ "github.com/v2fly/v2ray-core/v4/main/commands/all/api/jsonv4" _ "github.com/v2fly/v2ray-core/v4/main/commands/all/jsonv4"