v2ray_transport.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package option
  2. import (
  3. "github.com/sagernet/sing-box/common/json"
  4. C "github.com/sagernet/sing-box/constant"
  5. E "github.com/sagernet/sing/common/exceptions"
  6. )
  7. type _V2RayTransportOptions struct {
  8. Type string `json:"type,omitempty"`
  9. GRPCOptions V2RayGRPCOptions `json:"-"`
  10. WebsocketOptions V2RayWebsocketOptions `json:"-"`
  11. }
  12. type V2RayTransportOptions _V2RayTransportOptions
  13. func (o V2RayTransportOptions) MarshalJSON() ([]byte, error) {
  14. var v any
  15. switch o.Type {
  16. case "":
  17. return nil, nil
  18. case C.V2RayTransportTypeGRPC:
  19. v = o.GRPCOptions
  20. case C.V2RayTransportTypeWebsocket:
  21. v = o.WebsocketOptions
  22. default:
  23. return nil, E.New("unknown transport type: " + o.Type)
  24. }
  25. return MarshallObjects((_V2RayTransportOptions)(o), v)
  26. }
  27. func (o *V2RayTransportOptions) UnmarshalJSON(bytes []byte) error {
  28. err := json.Unmarshal(bytes, (*_V2RayTransportOptions)(o))
  29. if err != nil {
  30. return err
  31. }
  32. var v any
  33. switch o.Type {
  34. case C.V2RayTransportTypeGRPC:
  35. v = &o.GRPCOptions
  36. default:
  37. return E.New("unknown transport type: " + o.Type)
  38. }
  39. err = UnmarshallExcluded(bytes, (*_V2RayTransportOptions)(o), v)
  40. if err != nil {
  41. return E.Cause(err, "vmess transport options")
  42. }
  43. return nil
  44. }
  45. /*type _V2RayOutboundTransportOptions struct {
  46. Type string `json:"type,omitempty"`
  47. GRPCOptions V2RayGRPCOptions `json:"-"`
  48. WebsocketOptions V2RayWebsocketOptions `json:"-"`
  49. }
  50. type V2RayOutboundTransportOptions _V2RayOutboundTransportOptions
  51. func (o V2RayOutboundTransportOptions) MarshalJSON() ([]byte, error) {
  52. var v any
  53. switch o.Type {
  54. case "":
  55. return nil, nil
  56. case C.V2RayTransportTypeGRPC:
  57. v = o.GRPCOptions
  58. case C.V2RayTransportTypeWebsocket:
  59. v = o.WebsocketOptions
  60. default:
  61. return nil, E.New("unknown transport type: " + o.Type)
  62. }
  63. return MarshallObjects((_V2RayOutboundTransportOptions)(o), v)
  64. }
  65. func (o *V2RayOutboundTransportOptions) UnmarshalJSON(bytes []byte) error {
  66. err := json.Unmarshal(bytes, (*_V2RayOutboundTransportOptions)(o))
  67. if err != nil {
  68. return err
  69. }
  70. var v any
  71. switch o.Type {
  72. case C.V2RayTransportTypeGRPC:
  73. v = &o.GRPCOptions
  74. case C.V2RayTransportTypeWebsocket:
  75. v = &o.WebsocketOptions
  76. default:
  77. return E.New("unknown transport type: " + o.Type)
  78. }
  79. err = UnmarshallExcluded(bytes, (*_V2RayOutboundTransportOptions)(o), v)
  80. if err != nil {
  81. return E.Cause(err, "vmess transport options")
  82. }
  83. return nil
  84. }*/
  85. type V2RayGRPCOptions struct {
  86. ServiceName string `json:"service_name,omitempty"`
  87. }
  88. type V2RayWebsocketOptions struct {
  89. Path string `json:"path,omitempty"`
  90. Headers map[string]string `json:"headers,omitempty"`
  91. MaxEarlyData uint32 `json:"max_early_data,omitempty"`
  92. EarlyDataHeaderName string `json:"early_data_header_name,omitempty"`
  93. }