socket.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package socketcfg
  2. import (
  3. "strings"
  4. "github.com/v2fly/v2ray-core/v4/transport/internet"
  5. )
  6. type SocketConfig struct {
  7. Mark uint32 `json:"mark"`
  8. TFO *bool `json:"tcpFastOpen"`
  9. TProxy string `json:"tproxy"`
  10. AcceptProxyProtocol bool `json:"acceptProxyProtocol"`
  11. TCPKeepAliveInterval int32 `json:"tcpKeepAliveInterval"`
  12. TFOQueueLength uint32 `json:"tcpFastOpenQueueLength"`
  13. }
  14. // Build implements Buildable.
  15. func (c *SocketConfig) Build() (*internet.SocketConfig, error) {
  16. var tfoSettings internet.SocketConfig_TCPFastOpenState
  17. if c.TFO != nil {
  18. if *c.TFO {
  19. tfoSettings = internet.SocketConfig_Enable
  20. } else {
  21. tfoSettings = internet.SocketConfig_Disable
  22. }
  23. }
  24. tfoQueueLength := c.TFOQueueLength
  25. if tfoQueueLength == 0 {
  26. tfoQueueLength = 4096
  27. }
  28. var tproxy internet.SocketConfig_TProxyMode
  29. switch strings.ToLower(c.TProxy) {
  30. case "tproxy":
  31. tproxy = internet.SocketConfig_TProxy
  32. case "redirect":
  33. tproxy = internet.SocketConfig_Redirect
  34. default:
  35. tproxy = internet.SocketConfig_Off
  36. }
  37. return &internet.SocketConfig{
  38. Mark: c.Mark,
  39. Tfo: tfoSettings,
  40. TfoQueueLength: tfoQueueLength,
  41. Tproxy: tproxy,
  42. AcceptProxyProtocol: c.AcceptProxyProtocol,
  43. TcpKeepAliveInterval: c.TCPKeepAliveInterval,
  44. }, nil
  45. }