grpc.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package conf
  2. import (
  3. "github.com/xtls/xray-core/transport/internet/grpc"
  4. "google.golang.org/protobuf/proto"
  5. )
  6. type GRPCConfig struct {
  7. Authority string `json:"authority"`
  8. ServiceName string `json:"serviceName"`
  9. MultiMode bool `json:"multiMode"`
  10. IdleTimeout int32 `json:"idle_timeout"`
  11. HealthCheckTimeout int32 `json:"health_check_timeout"`
  12. PermitWithoutStream bool `json:"permit_without_stream"`
  13. InitialWindowsSize int32 `json:"initial_windows_size"`
  14. UserAgent string `json:"user_agent"`
  15. MultiConnections int32 `json:"multi_connections"`
  16. }
  17. func (g *GRPCConfig) Build() (proto.Message, error) {
  18. if g.IdleTimeout <= 0 {
  19. g.IdleTimeout = 0
  20. }
  21. if g.HealthCheckTimeout <= 0 {
  22. g.HealthCheckTimeout = 0
  23. }
  24. if g.InitialWindowsSize < 0 {
  25. // default window size of gRPC-go
  26. g.InitialWindowsSize = 0
  27. }
  28. return &grpc.Config{
  29. Authority: g.Authority,
  30. ServiceName: g.ServiceName,
  31. MultiMode: g.MultiMode,
  32. IdleTimeout: g.IdleTimeout,
  33. HealthCheckTimeout: g.HealthCheckTimeout,
  34. PermitWithoutStream: g.PermitWithoutStream,
  35. InitialWindowsSize: g.InitialWindowsSize,
  36. UserAgent: g.UserAgent,
  37. MultiConnections: g.MultiConnections,
  38. }, nil
  39. }