transport.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package conf
  2. import (
  3. "github.com/v2fly/v2ray-core/v4/common/serial"
  4. "github.com/v2fly/v2ray-core/v4/transport"
  5. "github.com/v2fly/v2ray-core/v4/transport/internet"
  6. )
  7. type TransportConfig struct {
  8. TCPConfig *TCPConfig `json:"tcpSettings"`
  9. KCPConfig *KCPConfig `json:"kcpSettings"`
  10. WSConfig *WebSocketConfig `json:"wsSettings"`
  11. HTTPConfig *HTTPConfig `json:"httpSettings"`
  12. DSConfig *DomainSocketConfig `json:"dsSettings"`
  13. QUICConfig *QUICConfig `json:"quicSettings"`
  14. GunConfig *GunConfig `json:"gunSettings"`
  15. }
  16. // Build implements Buildable.
  17. func (c *TransportConfig) Build() (*transport.Config, error) {
  18. config := new(transport.Config)
  19. if c.TCPConfig != nil {
  20. ts, err := c.TCPConfig.Build()
  21. if err != nil {
  22. return nil, newError("failed to build TCP config").Base(err).AtError()
  23. }
  24. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  25. ProtocolName: "tcp",
  26. Settings: serial.ToTypedMessage(ts),
  27. })
  28. }
  29. if c.KCPConfig != nil {
  30. ts, err := c.KCPConfig.Build()
  31. if err != nil {
  32. return nil, newError("failed to build mKCP config").Base(err).AtError()
  33. }
  34. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  35. ProtocolName: "mkcp",
  36. Settings: serial.ToTypedMessage(ts),
  37. })
  38. }
  39. if c.WSConfig != nil {
  40. ts, err := c.WSConfig.Build()
  41. if err != nil {
  42. return nil, newError("failed to build WebSocket config").Base(err)
  43. }
  44. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  45. ProtocolName: "websocket",
  46. Settings: serial.ToTypedMessage(ts),
  47. })
  48. }
  49. if c.HTTPConfig != nil {
  50. ts, err := c.HTTPConfig.Build()
  51. if err != nil {
  52. return nil, newError("Failed to build HTTP config.").Base(err)
  53. }
  54. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  55. ProtocolName: "http",
  56. Settings: serial.ToTypedMessage(ts),
  57. })
  58. }
  59. if c.DSConfig != nil {
  60. ds, err := c.DSConfig.Build()
  61. if err != nil {
  62. return nil, newError("Failed to build DomainSocket config.").Base(err)
  63. }
  64. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  65. ProtocolName: "domainsocket",
  66. Settings: serial.ToTypedMessage(ds),
  67. })
  68. }
  69. if c.QUICConfig != nil {
  70. qs, err := c.QUICConfig.Build()
  71. if err != nil {
  72. return nil, newError("Failed to build QUIC config.").Base(err)
  73. }
  74. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  75. ProtocolName: "quic",
  76. Settings: serial.ToTypedMessage(qs),
  77. })
  78. }
  79. if c.GunConfig != nil {
  80. gs, err := c.GunConfig.Build()
  81. if err != nil {
  82. return nil, newError("Failed to build Gun config.").Base(err)
  83. }
  84. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  85. ProtocolName: "gun",
  86. Settings: serial.ToTypedMessage(gs),
  87. })
  88. }
  89. return config, nil
  90. }