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