socket.go 1.1 KB

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