mirror of https://github.com/XTLS/Xray-core
				
				
				
			
		
			
				
	
	
		
			37 lines
		
	
	
		
			607 B
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			607 B
		
	
	
	
		
			Go
		
	
	
package antireplay
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
 | 
						|
	ss_bloomring "github.com/v2fly/ss-bloomring"
 | 
						|
)
 | 
						|
 | 
						|
type BloomRing struct {
 | 
						|
	*ss_bloomring.BloomRing
 | 
						|
	lock *sync.Mutex
 | 
						|
}
 | 
						|
 | 
						|
func (b BloomRing) Interval() int64 {
 | 
						|
	return 9999999
 | 
						|
}
 | 
						|
 | 
						|
func (b BloomRing) Check(sum []byte) bool {
 | 
						|
	b.lock.Lock()
 | 
						|
	defer b.lock.Unlock()
 | 
						|
	if b.Test(sum) {
 | 
						|
		return false
 | 
						|
	}
 | 
						|
	b.Add(sum)
 | 
						|
	return true
 | 
						|
}
 | 
						|
 | 
						|
func NewBloomRing() BloomRing {
 | 
						|
	const (
 | 
						|
		DefaultSFCapacity = 1e6
 | 
						|
		// FalsePositiveRate
 | 
						|
		DefaultSFFPR  = 1e-6
 | 
						|
		DefaultSFSlot = 10
 | 
						|
	)
 | 
						|
	return BloomRing{ss_bloomring.NewBloomRing(DefaultSFSlot, DefaultSFCapacity, DefaultSFFPR), &sync.Mutex{}}
 | 
						|
}
 |