mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-08-07 14:25:17 +03:00
Add call protocol, Rmux. Update AmneziaWG. Fixes and improvements
This commit is contained in:
@@ -44,7 +44,13 @@ func NewTrafficLimiterManager(ctx context.Context, nodeManager CM.NodeManager, l
|
||||
}
|
||||
select {
|
||||
case <-timer.C:
|
||||
manager.mtx.Lock()
|
||||
strategyManagers := make([]*TrafficLimiterStrategyManager, 0, len(manager.managers))
|
||||
for _, strategyManager := range manager.managers {
|
||||
strategyManagers = append(strategyManagers, strategyManager)
|
||||
}
|
||||
manager.mtx.Unlock()
|
||||
for _, strategyManager := range strategyManagers {
|
||||
strategyManager.mtx.Lock()
|
||||
for _, limiter := range strategyManager.limiters {
|
||||
err := limiter.UpdateRemainingTraffic()
|
||||
@@ -154,9 +160,10 @@ func (i *TrafficLimiterStrategyManager) DeleteTrafficLimiter(username string) {
|
||||
}
|
||||
|
||||
type TrafficLimiter struct {
|
||||
manager CM.NodeManager
|
||||
limiter CM.TrafficLimiter
|
||||
new uint64
|
||||
manager CM.NodeManager
|
||||
limiter CM.TrafficLimiter
|
||||
new uint64
|
||||
reserved uint64
|
||||
|
||||
mtx sync.Mutex
|
||||
}
|
||||
@@ -165,34 +172,34 @@ func NewTrafficLimiter(manager CM.NodeManager, limiter CM.TrafficLimiter) *Traff
|
||||
return &TrafficLimiter{manager: manager, limiter: limiter}
|
||||
}
|
||||
|
||||
func (l *TrafficLimiter) Can(n uint64) error {
|
||||
func (l *TrafficLimiter) Reserve(n uint64) (uint64, error) {
|
||||
l.mtx.Lock()
|
||||
defer l.mtx.Unlock()
|
||||
if l.limiter.RawUsed == l.limiter.RawQuota {
|
||||
return E.New("traffic limit exceeded")
|
||||
used := l.limiter.RawUsed + l.reserved
|
||||
if used >= l.limiter.RawQuota {
|
||||
return 0, E.New("traffic limit exceeded")
|
||||
}
|
||||
if l.limiter.RawUsed+n > l.limiter.RawQuota {
|
||||
l.new += l.limiter.RawQuota - l.limiter.RawUsed
|
||||
l.limiter.RawUsed = l.limiter.RawQuota
|
||||
return E.New("traffic limit exceeded")
|
||||
remaining := l.limiter.RawQuota - used
|
||||
if n > remaining {
|
||||
l.reserved += remaining
|
||||
return remaining, E.New("traffic limit exceeded")
|
||||
}
|
||||
return nil
|
||||
l.reserved += n
|
||||
return n, nil
|
||||
}
|
||||
|
||||
func (l *TrafficLimiter) Add(n uint64) error {
|
||||
func (l *TrafficLimiter) Commit(reserved uint64, n uint64) {
|
||||
if reserved == 0 && n == 0 {
|
||||
return
|
||||
}
|
||||
l.mtx.Lock()
|
||||
defer l.mtx.Unlock()
|
||||
if l.limiter.RawUsed == l.limiter.RawQuota {
|
||||
return E.New("traffic limit exceeded")
|
||||
}
|
||||
if l.limiter.RawUsed+n > l.limiter.RawQuota {
|
||||
l.new += l.limiter.RawQuota - l.limiter.RawUsed
|
||||
l.limiter.RawUsed = l.limiter.RawQuota
|
||||
return E.New("traffic limit exceeded")
|
||||
if reserved > l.reserved {
|
||||
reserved = l.reserved
|
||||
}
|
||||
l.reserved -= reserved
|
||||
l.limiter.RawUsed += n
|
||||
l.new += n
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *TrafficLimiter) UpdateRemainingTraffic() error {
|
||||
|
||||
Reference in New Issue
Block a user