static bool ParseNode(MIBNode parent, XmlNode node, ObjectIdentifier baseOid) { var oidParts = baseOid.ToNumerical(); var oid = ObjectIdentifier.Create(oidParts, uint.Parse(node.Attributes.GetNamedItem("id").Value)); var name = node.Attributes.GetNamedItem("name").Value; var mnode = new MIBNode { Name = name, Oid = oid, Parent = parent }; var typeStr = node.Attributes.GetNamedItem("type").Value.Replace("[]", "Array"); mnode.Type = (MIBType)Enum.Parse(typeof(MIBType), typeStr, true); _Oids[oid] = mnode; if (parent != null) { parent.AddChild(mnode); } foreach (var child in node.ChildNodes.OfType <XmlNode>().Where((n) => n.Name == "symbol")) { mnode.AddValueMapping(int.Parse(child.Attributes.GetNamedItem("value").Value), child.Attributes.GetNamedItem("name").Value); } foreach (var child in node.ChildNodes.OfType <XmlNode>().Where((n) => n.Name == "node")) { if (!ParseNode(mnode, child, oid)) { return(false); } } return(true); }
public static void EnsureRoot() { if (_Oids.ContainsKey(RootOid)) { return; } var oids = new List <Tuple <string, string> > { new Tuple <string, string>("1.3", "org"), new Tuple <string, string>("1.3.6", "dod"), new Tuple <string, string>("1.3.6.1", "internet"), new Tuple <string, string>("1.3.6.1.4", "private"), new Tuple <string, string>("1.3.6.1.4.1", "enterprises"), new Tuple <string, string>("1.3.6.1.2", "mgmt"), }; foreach (var pair in oids) { var oid = new ObjectIdentifier(pair.Item1); var node = new MIBNode { Name = pair.Item2, Oid = oid }; if (pair.Item1.Count(c => c == '.') > 1) { var parentOid = new ObjectIdentifier(string.Join(".", pair.Item1.Split('.').Take(pair.Item1.Count(c => c == '.')))); var parent = _Oids[parentOid]; if (parent != null) { parent.AddChild(node); node.Parent = parent; } } _Oids[oid] = node; } }
public void AddChild(MIBNode child) { _children.Add(child); }