memory_settings.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package internet
  2. import (
  3. "github.com/xtls/xray-core/common/net"
  4. "github.com/xtls/xray-core/transport/internet/finalmask"
  5. )
  6. // MemoryStreamConfig is a parsed form of StreamConfig. It is used to reduce the number of Protobuf parses.
  7. type MemoryStreamConfig struct {
  8. Destination *net.Destination
  9. ProtocolName string
  10. ProtocolSettings interface{}
  11. SecurityType string
  12. SecuritySettings interface{}
  13. TcpmaskManager *finalmask.TcpmaskManager
  14. UdpmaskManager *finalmask.UdpmaskManager
  15. QuicParams *QuicParams
  16. SocketSettings *SocketConfig
  17. DownloadSettings *MemoryStreamConfig
  18. }
  19. // ToMemoryStreamConfig converts a StreamConfig to MemoryStreamConfig. It returns a default non-nil MemoryStreamConfig for nil input.
  20. func ToMemoryStreamConfig(s *StreamConfig) (*MemoryStreamConfig, error) {
  21. ets, err := s.GetEffectiveTransportSettings()
  22. if err != nil {
  23. return nil, err
  24. }
  25. mss := &MemoryStreamConfig{
  26. ProtocolName: s.GetEffectiveProtocol(),
  27. ProtocolSettings: ets,
  28. }
  29. if s != nil {
  30. if s.Address != nil {
  31. mss.Destination = &net.Destination{
  32. Address: s.Address.AsAddress(),
  33. Port: net.Port(s.Port),
  34. Network: net.Network_TCP,
  35. }
  36. }
  37. mss.SocketSettings = s.SocketSettings
  38. }
  39. if s != nil && s.HasSecuritySettings() {
  40. ess, err := s.GetEffectiveSecuritySettings()
  41. if err != nil {
  42. return nil, err
  43. }
  44. mss.SecurityType = s.SecurityType
  45. mss.SecuritySettings = ess
  46. }
  47. if s != nil && len(s.Tcpmasks) > 0 {
  48. var masks []finalmask.Tcpmask
  49. for _, msg := range s.Tcpmasks {
  50. instance, err := msg.GetInstance()
  51. if err != nil {
  52. return nil, err
  53. }
  54. masks = append(masks, instance.(finalmask.Tcpmask))
  55. }
  56. mss.TcpmaskManager = finalmask.NewTcpmaskManager(masks)
  57. }
  58. if s != nil && s.QuicParams != nil {
  59. mss.QuicParams = s.QuicParams
  60. }
  61. if s != nil && len(s.Udpmasks) > 0 {
  62. var masks []finalmask.Udpmask
  63. for _, msg := range s.Udpmasks {
  64. instance, err := msg.GetInstance()
  65. if err != nil {
  66. return nil, err
  67. }
  68. masks = append(masks, instance.(finalmask.Udpmask))
  69. }
  70. mss.UdpmaskManager = finalmask.NewUdpmaskManager(masks)
  71. }
  72. return mss, nil
  73. }