stream.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package v5cfg
  2. import (
  3. "context"
  4. "github.com/golang/protobuf/proto"
  5. "github.com/v2fly/v2ray-core/v5/common/serial"
  6. "github.com/v2fly/v2ray-core/v5/transport/internet"
  7. )
  8. func (s StreamConfig) BuildV5(ctx context.Context) (proto.Message, error) {
  9. config := &internet.StreamConfig{}
  10. if s.Transport == "" {
  11. s.Transport = "tcp"
  12. }
  13. if s.Security == "" {
  14. s.Security = "none"
  15. }
  16. if s.TransportSettings == nil {
  17. s.TransportSettings = []byte("{}")
  18. }
  19. transportConfigPack, err := loadHeterogeneousConfigFromRawJSON("transport", s.Transport, s.TransportSettings)
  20. if err != nil {
  21. return nil, newError("unable to load transport config").Base(err)
  22. }
  23. config.ProtocolName = s.Transport
  24. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  25. ProtocolName: s.Transport,
  26. Settings: serial.ToTypedMessage(transportConfigPack),
  27. })
  28. if s.Security != "none" {
  29. if s.SecuritySettings == nil {
  30. s.SecuritySettings = []byte("{}")
  31. }
  32. securityConfigPack, err := loadHeterogeneousConfigFromRawJSON("security", s.Security, s.SecuritySettings)
  33. if err != nil {
  34. return nil, newError("unable to load security config").Base(err)
  35. }
  36. securityConfigPackTypedMessage := serial.ToTypedMessage(securityConfigPack)
  37. config.SecurityType = serial.V2Type(securityConfigPackTypedMessage)
  38. config.SecuritySettings = append(config.SecuritySettings, securityConfigPackTypedMessage)
  39. }
  40. config.SocketSettings, err = s.SocketSettings.Build()
  41. if err != nil {
  42. return nil, newError("unable to build socket config").Base(err)
  43. }
  44. return config, nil
  45. }