Example #1
0
        private static IPRangesGroup ReadGroupElement(XmlReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            var group = new IPRangesGroup();

            while (reader.MoveToNextAttribute())
            {
                var attrName = reader.Name.ToLowerInvariant();
                if (attrName == "name")
                {
                    group.Name = reader.Value;
                }
            }
            reader.MoveToContent();
            return(group);
        }
Example #2
0
        public static bool TryParseFromXml(XmlTextReader reader, out IPRangesGroup group, out Exception exception, bool skipIfRootElementNotMatching)
        {
            if (reader == null) throw new ArgumentNullException("reader");

            exception = null;
            group = null;

            IPRangesRegion region = null;
            IPRangesGroup result = null;

            var level = 0;
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        level++;
                        try
                        {
                            var name = reader.Name.ToLowerInvariant();
                            if (level == 1)
                            {
                                if (name == "group")
                                {
                                    result = ReadGroupElement(reader);
                                    continue;
                                }

                                if (skipIfRootElementNotMatching)
                                {
                                    group = new IPRangesGroup();
                                    return true;
                                }
                                exception = new XmlException("Invalid root element('" + reader.Name + "'), expecting 'group'");
                                return false;
                            }

                            if (level == 2 && name == "region")
                            {
                                if (result == null)
                                {
                                    exception = new InvalidDataException("Missing appropriate root element");
                                    return false;
                                }
                                region = ReadRegionElement(reader);
                                region.ParentGroup = result;
                                result.Regions.Add(region);
                                continue;
                            }

                            if (level == 3 && (name == "range" || name == "iprange"))
                            {
                                if (result == null)
                                {
                                    exception = new InvalidDataException("Missing 'group' element");
                                    return false;
                                }
                                if (region == null)
                                {
                                    exception = new InvalidDataException("Missing 'region' element");
                                    return false;
                                }

                                region.Ranges.Add(ReadRangeElement(reader));
                            }
                        }
                        finally
                        {
                            if (reader.IsEmptyElement) level--;
                        }
                        break;
                    case XmlNodeType.EndElement:
                        level--;
                        if (level == 0)
                        {
                            group = result;
                            return true;
                        }
                        break;
                }
            }

            group = result;
            return true;
        }
Example #3
0
 public static bool TryParseFromXml(XmlTextReader reader, out IPRangesGroup group, out Exception exception)
 {
     return TryParseFromXml(reader, out group, out exception, false);
 }
Example #4
0
        private static IPRangesGroup ReadGroupElement(XmlReader reader)
        {
            if (reader == null) throw new ArgumentNullException("reader");

            var group = new IPRangesGroup();
            while (reader.MoveToNextAttribute())
            {
                var attrName = reader.Name.ToLowerInvariant();
                if (attrName == "name") group.Name = reader.Value;
            }
            reader.MoveToContent();
            return group;
        }
Example #5
0
        public static bool TryParseFromXml(XmlTextReader reader, out IPRangesGroup group, out Exception exception, bool skipIfRootElementNotMatching)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            exception = null;
            group     = null;

            IPRangesRegion region = null;
            IPRangesGroup  result = null;

            var level = 0;

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XmlNodeType.Element:
                    level++;
                    try
                    {
                        var name = reader.Name.ToLowerInvariant();
                        if (level == 1)
                        {
                            if (name == "group")
                            {
                                result = ReadGroupElement(reader);
                                continue;
                            }

                            if (skipIfRootElementNotMatching)
                            {
                                group = new IPRangesGroup();
                                return(true);
                            }
                            exception = new XmlException("Invalid root element('" + reader.Name + "'), expecting 'group'");
                            return(false);
                        }

                        if (level == 2 && name == "region")
                        {
                            if (result == null)
                            {
                                exception = new InvalidDataException("Missing appropriate root element");
                                return(false);
                            }
                            region             = ReadRegionElement(reader);
                            region.ParentGroup = result;
                            result.Regions.Add(region);
                            continue;
                        }

                        if (level == 3 && (name == "range" || name == "iprange"))
                        {
                            if (result == null)
                            {
                                exception = new InvalidDataException("Missing 'group' element");
                                return(false);
                            }
                            if (region == null)
                            {
                                exception = new InvalidDataException("Missing 'region' element");
                                return(false);
                            }

                            region.Ranges.Add(ReadRangeElement(reader));
                        }
                    }
                    finally
                    {
                        if (reader.IsEmptyElement)
                        {
                            level--;
                        }
                    }
                    break;

                case XmlNodeType.EndElement:
                    level--;
                    if (level == 0)
                    {
                        group = result;
                        return(true);
                    }
                    break;
                }
            }

            group = result;
            return(true);
        }
Example #6
0
 public static bool TryParseFromXml(XmlTextReader reader, out IPRangesGroup group, out Exception exception)
 {
     return(TryParseFromXml(reader, out group, out exception, false));
 }