config_json.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // +build json
  2. package transport
  3. import (
  4. "encoding/json"
  5. "v2ray.com/core/common/loader"
  6. v2net "v2ray.com/core/common/net"
  7. "v2ray.com/core/transport/internet"
  8. "v2ray.com/core/transport/internet/kcp"
  9. "v2ray.com/core/transport/internet/tcp"
  10. "v2ray.com/core/transport/internet/ws"
  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. this.NetworkSettings = append(this.NetworkSettings, &internet.NetworkSettings{
  24. Network: v2net.Network_TCP,
  25. Settings: loader.NewTypedSettings(jsonConfig.TCPConfig),
  26. })
  27. }
  28. if jsonConfig.KCPConfig != nil {
  29. this.NetworkSettings = append(this.NetworkSettings, &internet.NetworkSettings{
  30. Network: v2net.Network_KCP,
  31. Settings: loader.NewTypedSettings(jsonConfig.KCPConfig),
  32. })
  33. }
  34. if jsonConfig.WSConfig != nil {
  35. this.NetworkSettings = append(this.NetworkSettings, &internet.NetworkSettings{
  36. Network: v2net.Network_WebSocket,
  37. Settings: loader.NewTypedSettings(jsonConfig.WSConfig),
  38. })
  39. }
  40. return nil
  41. }