public DosAttackEntry Clone()
        {
            var result = new DosAttackEntry
            {
                IsBanned          = this.IsBanned,
                IsRemoveCandidate = this.IsRemoveCandidate,
                RequestCount      = this.RequestCount,
                BanDate           = this.BanDate,
                LastRequestDate   = this.LastRequestDate,
                LastMinute        = this.LastMinute,
                LastSecond        = this.LastSecond
            };

            return(result);
        }
        private DosAttackEntry UpdateEntry(string ip, DosAttackEntry oldentry)
        {
            var dt = DateTime.Now;

            oldentry.LastRequestDate = dt;

            if (oldentry.IsBanned)
            {
                var banSpan = dt - oldentry.BanDate;
                if (banSpan.TotalSeconds >= RELEASE_INTERVAL)
                {
                    oldentry.IsBanned     = false;
                    oldentry.RequestCount = 1;
                }
            }
            else
            {
                var min = dt.Minute;
                var sec = dt.Second;

                if (oldentry.LastMinute == min && oldentry.LastSecond == sec)
                {
                    oldentry.RequestCount++;
                }
                else
                {
                    oldentry.RequestCount = 1;
                }

                if (oldentry.RequestCount >= REQUEST_THRESHOLD)
                {
                    oldentry.BanDate  = dt;
                    oldentry.IsBanned = true;
                }
            }

            return(oldentry);
        }