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); }
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); }
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++; }
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)); }