main.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package main
  2. import (
  3. "flag"
  4. "os"
  5. "github.com/xtls/xray-core/main/commands/base"
  6. _ "github.com/xtls/xray-core/main/distro/all"
  7. )
  8. func main() {
  9. os.Args = getArgsV4Compatible()
  10. base.RootCommand.Long = "Xray is a platform for building proxies."
  11. base.RootCommand.Commands = append(
  12. []*base.Command{
  13. cmdRun,
  14. cmdVersion,
  15. },
  16. base.RootCommand.Commands...,
  17. )
  18. base.Execute()
  19. }
  20. func getArgsV4Compatible() []string {
  21. if len(os.Args) == 1 {
  22. return []string{os.Args[0], "run"}
  23. }
  24. if os.Args[1][0] != '-' {
  25. return os.Args
  26. }
  27. version := false
  28. fs := flag.NewFlagSet("", flag.ContinueOnError)
  29. fs.BoolVar(&version, "version", false, "")
  30. // parse silently, no usage, no error output
  31. fs.Usage = func() {}
  32. fs.SetOutput(&null{})
  33. err := fs.Parse(os.Args[1:])
  34. if err == flag.ErrHelp {
  35. // fmt.Println("DEPRECATED: -h, WILL BE REMOVED IN V5.")
  36. // fmt.Println("PLEASE USE: xray help")
  37. // fmt.Println()
  38. return []string{os.Args[0], "help"}
  39. }
  40. if version {
  41. // fmt.Println("DEPRECATED: -version, WILL BE REMOVED IN V5.")
  42. // fmt.Println("PLEASE USE: xray version")
  43. // fmt.Println()
  44. return []string{os.Args[0], "version"}
  45. }
  46. // fmt.Println("COMPATIBLE MODE, DEPRECATED.")
  47. // fmt.Println("PLEASE USE: xray run [arguments] INSTEAD.")
  48. // fmt.Println()
  49. return append([]string{os.Args[0], "run"}, os.Args[1:]...)
  50. }
  51. type null struct{}
  52. func (n *null) Write(p []byte) (int, error) {
  53. return len(p), nil
  54. }