stream.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package v5cfg
  2. import (
  3. "context"
  4. "github.com/golang/protobuf/proto"
  5. "github.com/v2fly/v2ray-core/v4/common/serial"
  6. "github.com/v2fly/v2ray-core/v4/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. transportConfigPack, err := loadHeterogeneousConfigFromRawJson("transport", s.Transport, s.TransportSettings)
  17. if err != nil {
  18. return nil, newError("unable to load transport config").Base(err)
  19. }
  20. config.ProtocolName = s.Transport
  21. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  22. ProtocolName: s.Transport,
  23. Settings: serial.ToTypedMessage(transportConfigPack),
  24. })
  25. securityConfigPack, err := loadHeterogeneousConfigFromRawJson("security", s.Security, s.SecuritySettings)
  26. if err != nil {
  27. return nil, newError("unable to load security config").Base(err)
  28. }
  29. config.SecurityType = s.Security
  30. config.SecuritySettings = append(config.SecuritySettings, serial.ToTypedMessage(securityConfigPack))
  31. config.SocketSettings, err = s.SocketSettings.Build()
  32. if err != nil {
  33. return nil, newError("unable to build socket config").Base(err)
  34. }
  35. return config, nil
  36. }