示例#1
0
        public TldRule(string ruleData, TldRuleDivision division = TldRuleDivision.Unknown)
        {
            if (string.IsNullOrEmpty(ruleData))
            {
                throw new ArgumentException("RuleData is emtpy");
            }

            this.Division = division;

            var parts = ruleData.Split('.').Select(x => x.Trim()).ToList();

            foreach (var part in parts)
            {
                if (string.IsNullOrEmpty(part))
                {
                    throw new FormatException("Rule contains empty part");
                }

                if (part.Contains("*") && part != "*")
                {
                    throw new FormatException("Wildcard syntax not correct");
                }
            }


            if (ruleData.StartsWith("!", StringComparison.InvariantCultureIgnoreCase))
            {
                this.Type       = TldRuleType.WildcardException;
                this.Name       = ruleData.Substring(1).ToLower();
                this.LabelCount = parts.Count - 1; //Left-most label is removed for Wildcard Exceptions
            }
            else if (ruleData.Contains("*"))
            {
                this.Type       = TldRuleType.Wildcard;
                this.Name       = ruleData.ToLower();
                this.LabelCount = parts.Count;
            }
            else
            {
                this.Type       = TldRuleType.Normal;
                this.Name       = ruleData.ToLower();
                this.LabelCount = parts.Count;
            }
        }
示例#2
0
        public IEnumerable <TldRule> ParseRules([NotNull] IEnumerable <string> lines)
        {
            List <TldRule>  items    = new List <TldRule>();
            TldRuleDivision division = TldRuleDivision.Unknown;

            foreach (string line in lines)
            {
                //Ignore empty lines
                if (string.IsNullOrEmpty(line))
                {
                    continue;
                }

                //Ignore comments (and set Division)
                if (line.StartsWith("//"))
                {
                    //Detect Division
                    if (line.StartsWith("// ===BEGIN ICANN DOMAINS==="))
                    {
                        division = TldRuleDivision.ICANN;
                    }
                    else if (line.StartsWith("// ===END ICANN DOMAINS==="))
                    {
                        division = TldRuleDivision.Unknown;
                    }
                    else if (line.StartsWith("// ===BEGIN PRIVATE DOMAINS==="))
                    {
                        division = TldRuleDivision.Private;
                    }
                    else if (line.StartsWith("// ===END PRIVATE DOMAINS==="))
                    {
                        division = TldRuleDivision.Unknown;
                    }

                    continue;
                }

                TldRule tldRule = new TldRule(line.Trim(), division);
                items.Add(tldRule);
            }

            return(items);
        }