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{}} }