Ejemplo n.º 1
0
        /// <summary>
        /// Процедура проверки включения указанного диапазона ip-адресов в правило выбора цели
        /// </summary>
        /// <param name="range">Диапазон ip-адресов</param>
        /// <returns></returns>
        public override RuleKind Proceed(Range range)
        {
            if (range.LocationId.HasValue && (range.LocationId.Value == LocationId))
            {
                return Kind;
            }

            return RuleKind.Maybe;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Процедура проверки включения указанного диапазона ip-адресов в правило выбора цели
        /// </summary>
        /// <param name="range">Диапазон ip-адресов</param>
        /// <returns></returns>
        public override RuleKind Proceed(Range range)
        {
            if (range.Location != null)
            {
                Location location = range.Location;

                if (location.RegionId == RegionId)
                {
                    return Kind;
                }
            }

            return RuleKind.Maybe;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Проверяет соответствие диапазона ip-адресов данной цели
        /// </summary>
        /// <param name="range"></param>
        /// <returns></returns>
        public bool IsSatisfied(Range range)
        {
            bool satisfied = false;

            foreach (RuleBase rule in Rules)
            {
                switch (rule.Proceed(range))
                {
                    case RuleKind.Include:
                        satisfied = true;
                        break;
                    case RuleKind.Exclude:
                        return false;
                }
            }

            return satisfied;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Обновляет или создает диапазон ip-адресов с указанными данными
        /// </summary>
        /// <param name="start">Начало диапазона ip-адресов</param>
        /// <param name="end">Конец диапазона ip-адресов</param>
        /// <param name="description">Интервал ip-адресов в понятном виде</param>
        /// <param name="country">Двухсимвольный код страны</param>
        /// <param name="location">Географическая локация</param>
        /// <returns></returns>
        public Range UpdateOrCreateRange(long start, long end, string description, string country, Location location)
        {
            Range range = RangeRepository.FindByStartAndEnd(start, end);

            if (range == null)
            {
                range = new Range()
                {
                    Start = start,
                    End = end,
                    Description = description,
                    Country = country,
                    Location = location
                };

                RangeRepository.Create(range);
            }
            else if ((range.Description != description) || (range.Country != country) || (range.Location != location))
            {
                range.Description = description;
                range.Country = country;
                range.Location = location;

                RangeRepository.Save(range);
            }

            return range;
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Процедура проверки включения указанного диапазона ip-адресов в правило выбора цели
 /// </summary>
 /// <param name="range">Диапазон ip-адресов</param>
 /// <returns></returns>
 public abstract RuleKind Proceed(Range range);
Ejemplo n.º 6
0
 /// <summary>
 /// Процедура проверки включения указанного диапазона ip-адресов в правило выбора цели
 /// </summary>
 /// <param name="range">Диапазон ip-адресов</param>
 /// <returns></returns>
 public override RuleKind Proceed(Range range)
 {
     if (range.Country == Country) return Kind;
     return RuleKind.Maybe;
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Находит цель геолокации, в которую попадает указанный диапазон ip-адресов
        /// </summary>
        /// <param name="range">Диапазон ip-адресов</param>
        /// <returns></returns>
        public Target Resolve(Range range)
        {
            if (range == null) return null;

            foreach (Target t in TargetRepository.FindAllWithRules())
            {
                if (t.IsSatisfied(range))
                {
                    return t;
                }
            }

            return null;
        }