mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-08-31 18:14:03 +03:00
FILE / ScuroNeko/mtg
_antireplay/cache.go
Исходный файл и его история в репозитории.
38 lines
797 B
Go
38 lines
797 B
Go
package antireplay
|
|
|
|
import (
|
|
"github.com/allegro/bigcache"
|
|
"github.com/juju/errors"
|
|
|
|
"github.com/9seconds/mtg/config"
|
|
)
|
|
|
|
// Cache defines storage for obfuscated2 handshake frames.
|
|
type Cache struct {
|
|
cache *bigcache.BigCache
|
|
}
|
|
|
|
func (a Cache) Add(frame []byte) {
|
|
a.cache.Set(string(frame), nil) // nolint: errcheck
|
|
}
|
|
|
|
func (a Cache) Has(frame []byte) bool {
|
|
_, err := a.cache.Get(string(frame))
|
|
|
|
return err == nil
|
|
}
|
|
|
|
func NewCache(config *config.Config) (Cache, error) {
|
|
cache, err := bigcache.NewBigCache(bigcache.Config{
|
|
Shards: 1024,
|
|
LifeWindow: config.AntiReplayEvictionTime,
|
|
Hasher: hasher{},
|
|
HardMaxCacheSize: config.AntiReplayMaxSize,
|
|
})
|
|
if err != nil {
|
|
return Cache{}, errors.Annotate(err, "Cannot make cache")
|
|
}
|
|
|
|
return Cache{cache}, nil
|
|
}
|