transport.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. }
  15. // Build implements Buildable.
  16. func (c *TransportConfig) Build() (*transport.Config, error) {
  17. config := new(transport.Config)
  18. if c.TCPConfig != nil {
  19. ts, err := c.TCPConfig.Build()
  20. if err != nil {
  21. return nil, newError("failed to build TCP config").Base(err).AtError()
  22. }
  23. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  24. ProtocolName: "tcp",
  25. Settings: serial.ToTypedMessage(ts),
  26. })
  27. }
  28. if c.KCPConfig != nil {
  29. ts, err := c.KCPConfig.Build()
  30. if err != nil {
  31. return nil, newError("failed to build mKCP config").Base(err).AtError()
  32. }
  33. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  34. ProtocolName: "mkcp",
  35. Settings: serial.ToTypedMessage(ts),
  36. })
  37. }
  38. if c.WSConfig != nil {
  39. ts, err := c.WSConfig.Build()
  40. if err != nil {
  41. return nil, newError("failed to build WebSocket config").Base(err)
  42. }
  43. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  44. ProtocolName: "websocket",
  45. Settings: serial.ToTypedMessage(ts),
  46. })
  47. }
  48. if c.HTTPConfig != nil {
  49. ts, err := c.HTTPConfig.Build()
  50. if err != nil {
  51. return nil, newError("Failed to build HTTP config.").Base(err)
  52. }
  53. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  54. ProtocolName: "http",
  55. Settings: serial.ToTypedMessage(ts),
  56. })
  57. }
  58. if c.DSConfig != nil {
  59. ds, err := c.DSConfig.Build()
  60. if err != nil {
  61. return nil, newError("Failed to build DomainSocket config.").Base(err)
  62. }
  63. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  64. ProtocolName: "domainsocket",
  65. Settings: serial.ToTypedMessage(ds),
  66. })
  67. }
  68. if c.QUICConfig != nil {
  69. qs, err := c.QUICConfig.Build()
  70. if err != nil {
  71. return nil, newError("Failed to build QUIC config.").Base(err)
  72. }
  73. config.TransportSettings = append(config.TransportSettings, &internet.TransportConfig{
  74. ProtocolName: "quic",
  75. Settings: serial.ToTypedMessage(qs),
  76. })
  77. }
  78. return config, nil
  79. }