mirror of
https://github.com/XTLS/REALITY.git
synced 2025-08-22 14:38:35 +00:00
Replace Limit to LimitFb
This commit is contained in:
parent
5ccbfeb2d4
commit
e195acb047
12
README.en.md
12
README.en.md
@ -52,12 +52,12 @@ TODO List: TODO
|
|||||||
// The six limit below are optional for rate limiting falling REALITY connections. Default are 0 means disabled
|
// The six limit below are optional for rate limiting falling REALITY connections. Default are 0 means disabled
|
||||||
// WARNING: Enabling rate limiting may create detectable patterns for GFW!
|
// WARNING: Enabling rate limiting may create detectable patterns for GFW!
|
||||||
// If you're a GUI/panel/one-click script developer, RANDOMIZE these parameters!
|
// If you're a GUI/panel/one-click script developer, RANDOMIZE these parameters!
|
||||||
limitUploadRate: 0, // Base upload speed (bytes/s)
|
limitFbUploadRate: 0, // Base upload speed (bytes/s)
|
||||||
limitUploadBurst: 0, // Upload burst capacity (bytes)
|
limitFbUploadBurst: 0, // Upload burst capacity (bytes)
|
||||||
limitUploadAfter: 0, // Start upload throttling after (bytes)
|
limitFbUploadAfter: 0, // Start upload throttling after (bytes)
|
||||||
limitDownloadRate: 0, // Base download speed (bytes/s)
|
limitFbDownloadRate: 0, // Base download speed (bytes/s)
|
||||||
limitDownloadBurst: 0, // Download burst capacity (bytes)
|
limitFbDownloadBurst: 0, // Download burst capacity (bytes)
|
||||||
limitDownloadAfter: 0, // Start download throttling after (bytes)
|
limitFbDownloadAfter: 0, // Start download throttling after (bytes)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
12
README.md
12
README.md
@ -51,12 +51,12 @@ TODO List: TODO
|
|||||||
],
|
],
|
||||||
// 下列六个 limit 为选填,可对回落的 REALITY 连接限速。默认为 0 即不启用
|
// 下列六个 limit 为选填,可对回落的 REALITY 连接限速。默认为 0 即不启用
|
||||||
// 警告:启用限速可能会引入新的特征被GFW探测到!如果您是GUI/面板/一键脚本开发者,请务必让这些参数随机化!
|
// 警告:启用限速可能会引入新的特征被GFW探测到!如果您是GUI/面板/一键脚本开发者,请务必让这些参数随机化!
|
||||||
limitUploadRate: 0, // 上行基准速率 (字节/秒)
|
limitFbUploadRate: 0, // 上行基准速率 (字节/秒)
|
||||||
limitUploadBurst: 0, // 上行突发速率 (字节/秒)
|
limitFbUploadBurst: 0, // 上行突发速率 (字节/秒)
|
||||||
limitUploadAfter: 0, // 上行指定字节后开始限速
|
limitFbUploadAfter: 0, // 上行指定字节后开始限速
|
||||||
limitDownloadRate: 0, // 下行基准速率 (字节/秒)
|
limitFbDownloadRate: 0, // 下行基准速率 (字节/秒)
|
||||||
limitDownloadBurst: 0, // 下行突发速率 (字节/秒)
|
limitFbDownloadBurst: 0, // 下行突发速率 (字节/秒)
|
||||||
limitDownloadAfter: 0, // 下行指定字节后开始限速
|
limitFbDownloadAfter: 0, // 下行指定字节后开始限速
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
24
common.go
24
common.go
@ -556,12 +556,12 @@ type Config struct {
|
|||||||
MaxTimeDiff time.Duration
|
MaxTimeDiff time.Duration
|
||||||
ShortIds map[[8]byte]bool
|
ShortIds map[[8]byte]bool
|
||||||
|
|
||||||
LimitUploadRate float64
|
LimitFbUploadRate float64
|
||||||
LimitUploadBurst int64
|
LimitFbUploadBurst int64
|
||||||
LimitUploadAfter int64
|
LimitFbUploadAfter int64
|
||||||
LimitDownloadRate float64
|
LimitFbDownloadRate float64
|
||||||
LimitDownloadBurst int64
|
LimitFbDownloadBurst int64
|
||||||
LimitDownloadAfter int64
|
LimitFbDownloadAfter int64
|
||||||
|
|
||||||
// Rand provides the source of entropy for nonces and RSA blinding.
|
// Rand provides the source of entropy for nonces and RSA blinding.
|
||||||
// If Rand is nil, TLS uses the cryptographic random reader in package
|
// If Rand is nil, TLS uses the cryptographic random reader in package
|
||||||
@ -977,12 +977,12 @@ func (c *Config) Clone() *Config {
|
|||||||
MaxClientVer: c.MaxClientVer,
|
MaxClientVer: c.MaxClientVer,
|
||||||
MaxTimeDiff: c.MaxTimeDiff,
|
MaxTimeDiff: c.MaxTimeDiff,
|
||||||
ShortIds: c.ShortIds,
|
ShortIds: c.ShortIds,
|
||||||
LimitUploadRate: c.LimitUploadRate,
|
LimitFbUploadRate: c.LimitFbUploadRate,
|
||||||
LimitUploadBurst: c.LimitUploadBurst,
|
LimitFbUploadBurst: c.LimitFbUploadBurst,
|
||||||
LimitUploadAfter: c.LimitUploadAfter,
|
LimitFbUploadAfter: c.LimitFbUploadAfter,
|
||||||
LimitDownloadRate: c.LimitDownloadRate,
|
LimitFbDownloadRate: c.LimitFbDownloadRate,
|
||||||
LimitDownloadBurst: c.LimitDownloadBurst,
|
LimitFbDownloadBurst: c.LimitFbDownloadBurst,
|
||||||
LimitDownloadAfter: c.LimitDownloadAfter,
|
LimitFbDownloadAfter: c.LimitFbDownloadAfter,
|
||||||
Rand: c.Rand,
|
Rand: c.Rand,
|
||||||
Time: c.Time,
|
Time: c.Time,
|
||||||
Certificates: c.Certificates,
|
Certificates: c.Certificates,
|
||||||
|
18
tls.go
18
tls.go
@ -247,14 +247,14 @@ func Server(ctx context.Context, conn net.Conn, config *Config) (*Conn, error) {
|
|||||||
if config.Show && hs.clientHello != nil {
|
if config.Show && hs.clientHello != nil {
|
||||||
fmt.Printf("REALITY remoteAddr: %v\tforwarded SNI: %v\n", remoteAddr, hs.clientHello.serverName)
|
fmt.Printf("REALITY remoteAddr: %v\tforwarded SNI: %v\n", remoteAddr, hs.clientHello.serverName)
|
||||||
}
|
}
|
||||||
if config.LimitUploadRate == 0 || config.LimitUploadBurst == 0 {
|
if config.LimitFbUploadRate == 0 || config.LimitFbUploadBurst == 0 {
|
||||||
io.Copy(target, underlying)
|
io.Copy(target, underlying)
|
||||||
} else {
|
} else {
|
||||||
// Limit upload speed for fallback connection
|
// Limit upload speed for fallback connection
|
||||||
io.Copy(target, &RatelimitedConn{
|
io.Copy(target, &RatelimitedConn{
|
||||||
Conn: underlying,
|
Conn: underlying,
|
||||||
Bucket: ratelimit.NewBucketWithRate(config.LimitUploadRate, config.LimitUploadBurst),
|
Bucket: ratelimit.NewBucketWithRate(config.LimitFbUploadRate, config.LimitFbUploadBurst),
|
||||||
LimitAfter: config.LimitUploadAfter - config.LimitUploadBurst,
|
LimitAfter: config.LimitFbUploadAfter - config.LimitFbUploadBurst,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -387,28 +387,28 @@ func Server(ctx context.Context, conn net.Conn, config *Config) (*Conn, error) {
|
|||||||
if hs.c.conn == conn { // if we processed the Client Hello successfully but the target did not
|
if hs.c.conn == conn { // if we processed the Client Hello successfully but the target did not
|
||||||
waitGroup.Add(1)
|
waitGroup.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
if config.LimitUploadRate == 0 || config.LimitUploadBurst == 0 {
|
if config.LimitFbUploadRate == 0 || config.LimitFbUploadBurst == 0 {
|
||||||
io.Copy(target, underlying)
|
io.Copy(target, underlying)
|
||||||
} else {
|
} else {
|
||||||
// Limit upload speed for fallback connection (handshake ok but hello failed)
|
// Limit upload speed for fallback connection (handshake ok but hello failed)
|
||||||
io.Copy(target, &RatelimitedConn{
|
io.Copy(target, &RatelimitedConn{
|
||||||
Conn: underlying,
|
Conn: underlying,
|
||||||
Bucket: ratelimit.NewBucketWithRate(config.LimitUploadRate, config.LimitUploadBurst),
|
Bucket: ratelimit.NewBucketWithRate(config.LimitFbUploadRate, config.LimitFbUploadBurst),
|
||||||
LimitAfter: config.LimitUploadAfter - config.LimitUploadBurst,
|
LimitAfter: config.LimitFbUploadAfter - config.LimitFbUploadBurst,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
waitGroup.Done()
|
waitGroup.Done()
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
conn.Write(s2cSaved)
|
conn.Write(s2cSaved)
|
||||||
if config.LimitDownloadRate == 0 || config.LimitDownloadBurst == 0 {
|
if config.LimitFbDownloadRate == 0 || config.LimitFbDownloadBurst == 0 {
|
||||||
io.Copy(underlying, target)
|
io.Copy(underlying, target)
|
||||||
} else {
|
} else {
|
||||||
// Limit download speed for fallback connection
|
// Limit download speed for fallback connection
|
||||||
io.Copy(underlying, &RatelimitedConn{
|
io.Copy(underlying, &RatelimitedConn{
|
||||||
Conn: target,
|
Conn: target,
|
||||||
Bucket: ratelimit.NewBucketWithRate(config.LimitDownloadRate, config.LimitDownloadBurst),
|
Bucket: ratelimit.NewBucketWithRate(config.LimitFbDownloadRate, config.LimitFbDownloadBurst),
|
||||||
LimitAfter: config.LimitDownloadAfter - config.LimitDownloadBurst,
|
LimitAfter: config.LimitFbDownloadAfter - config.LimitFbDownloadBurst,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// Here is bidirectional direct forwarding:
|
// Here is bidirectional direct forwarding:
|
||||||
|
Loading…
Reference in New Issue
Block a user