config.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package vmess
  2. import (
  3. "encoding/json"
  4. "net"
  5. "github.com/v2ray/v2ray-core/common/log"
  6. v2net "github.com/v2ray/v2ray-core/common/net"
  7. "github.com/v2ray/v2ray-core/proxy/vmess/protocol/user"
  8. )
  9. // VMessUser is an authenticated user account in VMess configuration.
  10. type VMessUser struct {
  11. Id string `json:"id"`
  12. Email string `json:"email"`
  13. }
  14. func (u *VMessUser) ToUser() (user.User, error) {
  15. id, err := user.NewID(u.Id)
  16. return user.User{
  17. Id: id,
  18. }, err
  19. }
  20. // VMessInboundConfig is
  21. type VMessInboundConfig struct {
  22. AllowedClients []VMessUser `json:"clients"`
  23. }
  24. func loadInboundConfig(rawConfig []byte) (VMessInboundConfig, error) {
  25. config := VMessInboundConfig{}
  26. err := json.Unmarshal(rawConfig, &config)
  27. return config, err
  28. }
  29. type VNextConfig struct {
  30. Address string `json:"address"`
  31. Port uint16 `json:"port"`
  32. Users []VMessUser `json:"users"`
  33. Network string `json:"network"`
  34. }
  35. func (config VNextConfig) ToVNextServer() VNextServer {
  36. users := make([]user.User, 0, len(config.Users))
  37. for _, user := range config.Users {
  38. vuser, err := user.ToUser()
  39. if err != nil {
  40. panic(log.Error("Failed to convert %v to User.", user))
  41. }
  42. users = append(users, vuser)
  43. }
  44. ip := net.ParseIP(config.Address)
  45. if ip == nil {
  46. panic(log.Error("Unable to parse VNext IP: %s", config.Address))
  47. }
  48. address := v2net.IPAddress(ip, config.Port)
  49. dest := v2net.NewTCPDestination(address)
  50. if config.Network == "udp" {
  51. dest = v2net.NewUDPDestination(address)
  52. }
  53. return VNextServer{
  54. Destination: dest,
  55. Users: users,
  56. }
  57. }
  58. type VMessOutboundConfig struct {
  59. VNextList []VNextConfig `json:"vnext"`
  60. }
  61. func loadOutboundConfig(rawConfig []byte) (VMessOutboundConfig, error) {
  62. config := VMessOutboundConfig{}
  63. err := json.Unmarshal(rawConfig, &config)
  64. return config, err
  65. }