From 0273b36027df2df8514124c30f062d73255c729f Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Tue, 30 Jan 2018 21:38:43 +0100 Subject: [PATCH] prepare for remove function --- proxy/vmess/vmess.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/proxy/vmess/vmess.go b/proxy/vmess/vmess.go index d40f77f71..0fbefc43c 100644 --- a/proxy/vmess/vmess.go +++ b/proxy/vmess/vmess.go @@ -25,7 +25,6 @@ type idEntry struct { id *protocol.ID userIdx int lastSec protocol.Timestamp - lastSecRemoval protocol.Timestamp } type TimedUserValidator struct { @@ -56,25 +55,26 @@ func NewTimedUserValidator(ctx context.Context, hasher protocol.IDHash) protocol func (v *TimedUserValidator) generateNewHashes(nowSec protocol.Timestamp, idx int, entry *idEntry) { var hashValue [16]byte - var hashValueRemoval [16]byte idHash := v.hasher(entry.id.Bytes()) for entry.lastSec <= nowSec { common.Must2(idHash.Write(entry.lastSec.Bytes(nil))) idHash.Sum(hashValue[:0]) idHash.Reset() - common.Must2(idHash.Write(entry.lastSecRemoval.Bytes(nil))) - idHash.Sum(hashValueRemoval[:0]) - idHash.Reset() - - delete(v.userHash, hashValueRemoval) v.userHash[hashValue] = indexTimePair{ index: idx, timeInc: uint32(entry.lastSec - v.baseTime), } entry.lastSec++ - entry.lastSecRemoval++ + } +} + +func (v *TimedUserValidator) removeExpiredHashes(expire uint32) { + for key, pair := range v.userHash { + if pair.timeInc < expire { + delete(v.userHash, key) + } } } @@ -87,6 +87,11 @@ func (v *TimedUserValidator) updateUserHash(ctx context.Context, interval time.D for _, entry := range v.ids { v.generateNewHashes(nowSec, entry.userIdx, entry) } + + expire := protocol.Timestamp(now.Unix() - cacheDurationSec*3) + if expire > v.baseTime { + v.removeExpiredHashes(uint32(expire - v.baseTime)) + } v.Unlock() case <-ctx.Done(): return @@ -112,7 +117,6 @@ func (v *TimedUserValidator) Add(user *protocol.User) error { id: account.ID, userIdx: idx, lastSec: protocol.Timestamp(nowSec - cacheDurationSec), - lastSecRemoval: protocol.Timestamp(nowSec - cacheDurationSec*3), } v.generateNewHashes(protocol.Timestamp(nowSec+cacheDurationSec), idx, entry) v.ids = append(v.ids, entry) @@ -121,7 +125,6 @@ func (v *TimedUserValidator) Add(user *protocol.User) error { id: alterid, userIdx: idx, lastSec: protocol.Timestamp(nowSec - cacheDurationSec), - lastSecRemoval: protocol.Timestamp(nowSec - cacheDurationSec*3), } v.generateNewHashes(protocol.Timestamp(nowSec+cacheDurationSec), idx, entry) v.ids = append(v.ids, entry)