コード例 #1
0
ファイル: MibParser.cs プロジェクト: ypawlak/SnmpLabs
        public static MibData Merge(MibData current, MibData imported)
        {
            foreach (var importedNode in imported.FlatMibTree.Where(n => n.Value.Parent != null))
            {
                //TODO: optimize for nested nodes from import
                TreeBuilder.InsertIntoTree(importedNode.Value, importedNode.Value.Parent.Name,
                                           current.FlatMibTree);
            }

            foreach (var typeKV in imported.DataTypes.Where(type => !current.DataTypes.ContainsKey(type.Key)))
            {
                current.DataTypes.Add(typeKV.Key, typeKV.Value);
            }

            return(current);
        }
コード例 #2
0
ファイル: MibParser.cs プロジェクト: ypawlak/SnmpLabs
        public static MibData Parse(string fileName)
        {
            MibData result = InitMibData();

            string mibFileTxt = SmiParser.Utils.FileUtils.ReadFileFromOutputDirectory(MibFilesFolder, fileName);
            IEnumerable <ImportInfo> importsByFiles = ImportsParser.ParseImportInfo(mibFileTxt);

            foreach (ImportInfo singleFileImports in importsByFiles)
            {
                try
                {
                    MibData imported = Parse(singleFileImports.Filename);
                    result = Merge(result, imported);
                }
                catch (FileNotFoundException e)
                {
                    Debug.WriteLine(string.Format("File {0} has not been found", e.Message));
                }
            }

            IEnumerable <CustomDataType> dataTypes = DataTypesParser.ParseAllDataTypes(mibFileTxt);

            foreach (CustomDataType type in dataTypes)
            {
                result.DataTypes.Add(type.Name, type);
            }

            IEnumerable <AliasInfo>     parsedAliases = AliasesParser.Parse(mibFileTxt);
            IEnumerable <DataTypeAlias> aliases       = parsedAliases
                                                        .Select(
                ai =>
                GetAliasTypeFromInfo(result.DataTypes, ai))
                                                        .Where(alias => alias != null)
                                                        .ToList();

            foreach (DataTypeAlias alias in aliases)
            {
                result.DataTypes.Add(alias.Alias, alias);
            }

            IEnumerable <OidInfo> oids = OidsParser.ParseAllOids(mibFileTxt);

            foreach (OidInfo oi in oids)
            {
                var oidNode = new TreeNode()
                {
                    Children     = new List <TreeNode>(),
                    Name         = oi.Name,
                    SiblingIndex = oi.SiblingNo
                };
                TreeBuilder.InsertIntoTree(oidNode, oi.ParentExpression, result.FlatMibTree);
            }

            IDictionary <OidInfo, ObjectTypeInfo> objectTypes = ObjectTypesParser.ParseAllObjectTypes(mibFileTxt);;

            foreach (var objTypeInfoKV in objectTypes)
            {
                ObjectType objType = GetObjectTypeFromInfo(result.DataTypes, objTypeInfoKV.Value);
                if (objType == null)
                {
                    continue;
                }

                var otNode = new TreeNode()
                {
                    Children     = new List <TreeNode>(),
                    Name         = objTypeInfoKV.Key.Name,
                    SiblingIndex = objTypeInfoKV.Key.SiblingNo,
                    ObjectType   = objType
                };
                TreeBuilder.InsertIntoTree(otNode, objTypeInfoKV.Key.ParentExpression, result.FlatMibTree);
            }

            return(result);
        }