common.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package conf
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "strings"
  6. v2net "v2ray.com/core/common/net"
  7. )
  8. type Address struct {
  9. v2net.Address
  10. }
  11. func (this *Address) UnmarshalJSON(data []byte) error {
  12. var rawStr string
  13. if err := json.Unmarshal(data, &rawStr); err != nil {
  14. return err
  15. }
  16. this.Address = v2net.ParseAddress(rawStr)
  17. return nil
  18. }
  19. func (this *Address) Build() *v2net.IPOrDomain {
  20. if this.Family().IsDomain() {
  21. return &v2net.IPOrDomain{
  22. Address: &v2net.IPOrDomain_Domain{
  23. Domain: this.Domain(),
  24. },
  25. }
  26. }
  27. return &v2net.IPOrDomain{
  28. Address: &v2net.IPOrDomain_Ip{
  29. Ip: []byte(this.IP()),
  30. },
  31. }
  32. }
  33. type Network string
  34. func (this Network) Build() v2net.Network {
  35. return v2net.ParseNetwork(string(this))
  36. }
  37. type NetworkList []Network
  38. func (this *NetworkList) UnmarshalJSON(data []byte) error {
  39. var strarray []Network
  40. if err := json.Unmarshal(data, &strarray); err == nil {
  41. nl := NetworkList(strarray)
  42. *this = nl
  43. return nil
  44. }
  45. var rawstr Network
  46. if err := json.Unmarshal(data, &rawstr); err == nil {
  47. strlist := strings.Split(string(rawstr), ",")
  48. nl := make([]Network, len(strlist))
  49. for idx, network := range strlist {
  50. nl[idx] = Network(network)
  51. }
  52. *this = nl
  53. return nil
  54. }
  55. return errors.New("Unknown format of a string list: " + string(data))
  56. }
  57. func (this *NetworkList) Build() *v2net.NetworkList {
  58. list := new(v2net.NetworkList)
  59. for _, network := range *this {
  60. list.Network = append(list.Network, network.Build())
  61. }
  62. return list
  63. }