示例#1
0
        public T GetBestMatch(SmtpDomain domain)
        {
            if (domain == null)
            {
                return(default(T));
            }
            DomainMatchMap <T> .SubString subString = new DomainMatchMap <T> .SubString(domain.Domain, 0);

            T result;

            if (this.exact.TryGetValue(subString, out result))
            {
                return(result);
            }
            int[] array = DomainMatchMap <T> .FindAllDots(domain.Domain);

            for (int i = (array.Length > this.maxDots) ? (array.Length - this.maxDots) : 0; i < array.Length; i++)
            {
                subString.SetIndex(array[i] + 1);
                if (this.wildcard.TryGetValue(subString, out result))
                {
                    return(result);
                }
            }
            return(this.star);
        }
示例#2
0
        public static int[] FindAllDots(string s)
        {
            int num = DomainMatchMap <T> .CountDots(s);

            int[] array = new int[num];
            int   num2  = s.IndexOf('.');
            int   num3  = 0;

            while (num2 != -1)
            {
                array[num3] = num2;
                num2        = s.IndexOf('.', num2 + 1);
                num3++;
            }
            return(array);
        }
示例#3
0
        public DomainMatchMap(IList <T> entries)
        {
            this.exact    = new Dictionary <DomainMatchMap <T> .SubString, T>(entries.Count);
            this.wildcard = new Dictionary <DomainMatchMap <T> .SubString, T>(entries.Count);
            foreach (T value in entries)
            {
                if (value.DomainName.SmtpDomain == null)
                {
                    this.star = value;
                }
                else
                {
                    int num = DomainMatchMap <T> .CountDots(value.DomainName.Domain);

                    if (num > this.maxDots)
                    {
                        this.maxDots = num;
                    }
                    DomainMatchMap <T> .SubString key = new DomainMatchMap <T> .SubString(value.DomainName.Domain, 0);

                    if (value.DomainName.IncludeSubDomains)
                    {
                        this.wildcard[key] = value;
                        if (!this.exact.ContainsKey(key))
                        {
                            this.exact.Add(key, value);
                        }
                    }
                    else
                    {
                        this.exact[key] = value;
                    }
                }
            }
            this.maxDots++;
        }
示例#4
0
 public override bool Equals(object obj)
 {
     DomainMatchMap <T> .SubString subString = obj as DomainMatchMap <T> .SubString;
     return(subString != null && 0 == string.Compare(this.s, this.start, subString.s, subString.start, int.MaxValue, StringComparison.OrdinalIgnoreCase));
 }