diff --git a/cmd/client.go b/cmd/client.go index e36ef8a..d3a76e3 100644 --- a/cmd/client.go +++ b/cmd/client.go @@ -80,8 +80,8 @@ func client(config *clientConfig) { EnableDatagrams: true, } if config.IdleTimeout == 0 { - quicConfig.MaxIdleTimeout = DefaultMaxIdleTimeout - quicConfig.KeepAlivePeriod = DefaultKeepAlivePeriod + quicConfig.MaxIdleTimeout = DefaultClientMaxIdleTimeout + quicConfig.KeepAlivePeriod = DefaultClientKeepAlivePeriod } else { quicConfig.MaxIdleTimeout = time.Duration(config.IdleTimeout) * time.Second quicConfig.KeepAlivePeriod = quicConfig.MaxIdleTimeout * 2 / 5 diff --git a/cmd/config.go b/cmd/config.go index 511169d..0b03f7a 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -23,8 +23,9 @@ const ( DefaultMMDBFilename = "GeoLite2-Country.mmdb" - DefaultMaxIdleTimeout = 20 * time.Second - DefaultKeepAlivePeriod = 8 * time.Second + ServerMaxIdleTimeout = 60 * time.Second + DefaultClientMaxIdleTimeout = 20 * time.Second + DefaultClientKeepAlivePeriod = 8 * time.Second ) var rateStringRegexp = regexp.MustCompile(`^(\d+)\s*([KMGT]?)([Bb])ps$`) @@ -43,16 +44,15 @@ type serverConfig struct { CertFile string `json:"cert"` KeyFile string `json:"key"` // Optional below - Up string `json:"up"` - UpMbps int `json:"up_mbps"` - Down string `json:"down"` - DownMbps int `json:"down_mbps"` - IdleTimeout int `json:"idle_timeout"` - DisableUDP bool `json:"disable_udp"` - ACL string `json:"acl"` - MMDB string `json:"mmdb"` - Obfs string `json:"obfs"` - Auth struct { + Up string `json:"up"` + UpMbps int `json:"up_mbps"` + Down string `json:"down"` + DownMbps int `json:"down_mbps"` + DisableUDP bool `json:"disable_udp"` + ACL string `json:"acl"` + MMDB string `json:"mmdb"` + Obfs string `json:"obfs"` + Auth struct { Mode string `json:"mode"` Config json5.RawMessage `json:"config"` } `json:"auth"` @@ -106,9 +106,6 @@ func (c *serverConfig) Check() error { if up, down, err := c.Speed(); err != nil || (up != 0 && up < minSpeedBPS) || (down != 0 && down < minSpeedBPS) { return errors.New("invalid speed") } - if c.IdleTimeout != 0 && c.IdleTimeout < 4 { - return errors.New("invalid idle timeout") - } if (c.ReceiveWindowConn != 0 && c.ReceiveWindowConn < 65536) || (c.ReceiveWindowClient != 0 && c.ReceiveWindowClient < 65536) { return errors.New("invalid receive window size") diff --git a/cmd/server.go b/cmd/server.go index 5b53f02..6412751 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -77,16 +77,11 @@ func server(config *serverConfig) { InitialConnectionReceiveWindow: config.ReceiveWindowClient, MaxConnectionReceiveWindow: config.ReceiveWindowClient, MaxIncomingStreams: int64(config.MaxConnClient), + MaxIdleTimeout: ServerMaxIdleTimeout, + KeepAlivePeriod: 0, // Keep alive should solely be client's responsibility DisablePathMTUDiscovery: config.DisableMTUDiscovery, EnableDatagrams: true, } - if config.IdleTimeout == 0 { - quicConfig.MaxIdleTimeout = DefaultMaxIdleTimeout - quicConfig.KeepAlivePeriod = DefaultKeepAlivePeriod - } else { - quicConfig.MaxIdleTimeout = time.Duration(config.IdleTimeout) * time.Second - quicConfig.KeepAlivePeriod = quicConfig.MaxIdleTimeout * 2 / 5 - } if config.ReceiveWindowConn == 0 { quicConfig.InitialStreamReceiveWindow = DefaultStreamReceiveWindow quicConfig.MaxStreamReceiveWindow = DefaultStreamReceiveWindow