config_json.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // +build json
  2. package transport
  3. import (
  4. "encoding/json"
  5. v2net "v2ray.com/core/common/net"
  6. "v2ray.com/core/transport/internet"
  7. "v2ray.com/core/transport/internet/kcp"
  8. "v2ray.com/core/transport/internet/tcp"
  9. "v2ray.com/core/transport/internet/ws"
  10. "github.com/golang/protobuf/ptypes"
  11. )
  12. func (this *Config) UnmarshalJSON(data []byte) error {
  13. type JsonConfig struct {
  14. TCPConfig *tcp.Config `json:"tcpSettings"`
  15. KCPConfig *kcp.Config `json:"kcpSettings"`
  16. WSConfig *ws.Config `json:"wsSettings"`
  17. }
  18. jsonConfig := &JsonConfig{}
  19. if err := json.Unmarshal(data, jsonConfig); err != nil {
  20. return err
  21. }
  22. if jsonConfig.TCPConfig != nil {
  23. any, err := ptypes.MarshalAny(jsonConfig.TCPConfig)
  24. if err != nil {
  25. return err
  26. }
  27. this.NetworkSettings = append(this.NetworkSettings, &internet.NetworkSettings{
  28. Network: v2net.Network_TCP,
  29. Settings: any,
  30. })
  31. }
  32. if jsonConfig.KCPConfig != nil {
  33. any, err := ptypes.MarshalAny(jsonConfig.KCPConfig)
  34. if err != nil {
  35. return err
  36. }
  37. this.NetworkSettings = append(this.NetworkSettings, &internet.NetworkSettings{
  38. Network: v2net.Network_KCP,
  39. Settings: any,
  40. })
  41. }
  42. if jsonConfig.WSConfig != nil {
  43. any, err := ptypes.MarshalAny(jsonConfig.WSConfig)
  44. if err != nil {
  45. return err
  46. }
  47. this.NetworkSettings = append(this.NetworkSettings, &internet.NetworkSettings{
  48. Network: v2net.Network_WebSocket,
  49. Settings: any,
  50. })
  51. }
  52. return nil
  53. }