private static void PersistModuleToFile(string folder, MibModule module, IObjectTree tree)
        {
            string fileName = Path.Combine(folder, module.Name + ".module");

            using (StreamWriter writer = new StreamWriter(fileName))
            {
                writer.Write("#");
                foreach (string dependent in module.Dependents)
                {
                    writer.Write(dependent);
                    writer.Write(',');
                }

                writer.WriteLine();
                foreach (IEntity entity in module.Entities)
                {
                    IDefinition node = tree.Find(module.Name, entity.Name);
                    if (node == null)
                    {
                        continue;
                    }

                    uint[] id = node.GetNumericalForm();

                    /* 0: id
                     * 1: type
                     * 2: name
                     * 3: parent name
                     */
                    writer.WriteLine(ObjectIdentifier.Convert(id) + "," + entity.GetType() + "," + entity.Name + "," + entity.Parent);
                }

                writer.Close();
            }
        }
Exemple #2
0
        public void Add(MibModule module)
        {
            if (!string.IsNullOrEmpty(FileName))
            {
                module.FileName = FileName;
            }

            _modules.Add(module);
        }
Exemple #3
0
        public void Add(MibModule module)
        {
            if (!string.IsNullOrEmpty(FileName))
            {
                module.FileName = FileName;
            }

            _modules.Add(module);
        }
Exemple #4
0
        public MibTree(MibModule module)
        {
            IList<IEntity> entities = module.Entities;

            if (entities.Count > 0)
            {
                // try to find module identity as root
                foreach (IEntity element in entities)
                {
                    ModuleIdentity mi = element as ModuleIdentity;

                    if (mi != null)
                    {
                        _root.Add(new MibTreeNode(null, mi));
                    }
                }

                // gather all items below ModuleIdentity
                foreach (MibTreeNode mibTreeNode in _root)
                {
					entities.Remove (mibTreeNode.Entity);
                    BuildTree(mibTreeNode, entities);
                    UpdateTreeNodeTypes(mibTreeNode);
                }

                // find OID assignments as root, if there are any that are not below ModuleIdentity
                // FIXME: There may be multiple OID assignments that create a tree (find the root ones!)
                foreach (IEntity element in entities)
                {
                    OidValueAssignment oa = element as OidValueAssignment;

                    if (oa != null)
                    {
                        _root.Add(new MibTreeNode(null, oa));
                    }
                }

                if (_root.Count == 0)
                {
                    //no module identity, assume first entity is root
                    _root.Add(new MibTreeNode(null, entities[0]));
                }

                foreach (MibTreeNode mibTreeNode in _root)
                {
					if (entities.Contains (mibTreeNode.Entity))
					{
						entities.Remove (mibTreeNode.Entity);
					}
                    BuildTree(mibTreeNode, entities);
                    UpdateTreeNodeTypes(mibTreeNode);
                }
            }
        }
        private void Parse(MibModule module)
        {
            var watch = new Stopwatch();

            watch.Start();
            AddNodes(module);
#if !MA && !MT
            Logger.InfoFormat(CultureInfo.InvariantCulture, "{0}-ms used to assemble {1}", watch.ElapsedMilliseconds, module.Name);
#endif
            watch.Stop();
        }
Exemple #6
0
        public MibTree(MibModule module)
        {
            IList <IEntity> entities = module.Entities;

            if (entities.Count > 0)
            {
                // try to find module identity as root
                foreach (IEntity element in entities)
                {
                    ModuleIdentity mi = element as ModuleIdentity;

                    if (mi != null)
                    {
                        _root.Add(new MibTreeNode(null, mi));
                    }
                }

                // gather all items below ModuleIdentity
                foreach (MibTreeNode mibTreeNode in _root)
                {
                    entities.Remove(mibTreeNode.Entity);
                    BuildTree(mibTreeNode, entities);
                    UpdateTreeNodeTypes(mibTreeNode);
                }

                // find OID assignments as root, if there are any that are not below ModuleIdentity
                // FIXME: There may be multiple OID assignments that create a tree (find the root ones!)
                foreach (IEntity element in entities)
                {
                    OidValueAssignment oa = element as OidValueAssignment;

                    if (oa != null)
                    {
                        _root.Add(new MibTreeNode(null, oa));
                    }
                }

                if (_root.Count == 0)
                {
                    //no module identity, assume first entity is root
                    _root.Add(new MibTreeNode(null, entities[0]));
                }

                foreach (MibTreeNode mibTreeNode in _root)
                {
                    if (entities.Contains(mibTreeNode.Entity))
                    {
                        entities.Remove(mibTreeNode.Entity);
                    }
                    BuildTree(mibTreeNode, entities);
                    UpdateTreeNodeTypes(mibTreeNode);
                }
            }
        }
Exemple #7
0
        internal static bool AllDependentsAvailable(MibModule module, IDictionary <string, MibModule> modules)
        {
            foreach (string dependent in module.Dependents)
            {
                if (!DependentFound(dependent, modules))
                {
                    return(false);
                }
            }

            return(true);
        }
Exemple #8
0
        public MibTree(MibModule module)
        {
            IList<IEntity> entities = module.Entities;

            if (entities.Count > 0)
            {
                // try to find module identity as root
                foreach (IEntity element in entities)
                {
                    ModuleIdentity mi = element as ModuleIdentity;

                    if (mi != null)
                    {
                        _root.Add(new MibTreeNode(null, mi));
                    }
                }

                // find OID assignments as root, if there are any that are not below ModuleIdentity
                foreach (IEntity element in entities)
                {
                    OidValueAssignment oa = element as OidValueAssignment;

                    if (oa != null)
                    {
                        _root.Add(new MibTreeNode(null, oa));
                    }
                }

                FilterRealRoots (entities);

                foreach (MibTreeNode mibTreeNode in _root)
                {
                    entities.Remove (mibTreeNode.Entity);
                }

                if (_root.Count == 0)
                {
                    //no module identity, assume first entity is root
                    _root.Add(new MibTreeNode(null, entities[0]));
                }

                foreach (MibTreeNode mibTreeNode in _root)
                {
                    if (entities.Contains (mibTreeNode.Entity))
                    {
                        entities.Remove (mibTreeNode.Entity);
                    }
                    BuildTree(mibTreeNode, entities);
                    UpdateTreeNodeTypes(mibTreeNode);
                }
            }
        }
Exemple #9
0
        public MibTree(MibModule module)
        {
            IList <IEntity> entities = module.Entities;

            if (entities.Count > 0)
            {
                // try to find module identity as root
                foreach (IEntity element in entities)
                {
                    ModuleIdentity mi = element as ModuleIdentity;

                    if (mi != null)
                    {
                        _root.Add(new MibTreeNode(null, mi));
                    }
                }

                // find OID assignments as root, if there are any that are not below ModuleIdentity
                foreach (IEntity element in entities)
                {
                    OidValueAssignment oa = element as OidValueAssignment;

                    if (oa != null)
                    {
                        _root.Add(new MibTreeNode(null, oa));
                    }
                }

                FilterRealRoots(entities);

                foreach (MibTreeNode mibTreeNode in _root)
                {
                    entities.Remove(mibTreeNode.Entity);
                }

                if (_root.Count == 0)
                {
                    //no module identity, assume first entity is root
                    _root.Add(new MibTreeNode(null, entities[0]));
                }

                foreach (MibTreeNode mibTreeNode in _root)
                {
                    if (entities.Contains(mibTreeNode.Entity))
                    {
                        entities.Remove(mibTreeNode.Entity);
                    }
                    BuildTree(mibTreeNode, entities);
                    UpdateTreeNodeTypes(mibTreeNode);
                }
            }
        }
        private bool CanParse(MibModule module)
        {
            if (!MibModule.AllDependentsAvailable(module, _loaded))
            {
                return(false);
            }

            bool exists = _loaded.ContainsKey(module.Name); // FIXME: don't parse the same module twice now.

            if (!exists)
            {
                _loaded.Add(module.Name, module);
            }

            return(true);
        }
        private void Import(MibModule module)
        {
            if (module == null)
            {
                throw new ArgumentNullException("module");
            }

            if (LoadedModules.Contains(module.Name) || PendingModules.Contains(module.Name))
            {
                //Logger.InfoFormat(CultureInfo.InvariantCulture, "{0} ignored", module.Name);
            }
            else
            {
                _pendings.Add(module.Name, module);
            }
        }
        private bool CanParse(MibModule module)
        {
            if (!module.Validate(_loaded))
            {
                return(false);
            }

            bool exists = _loaded.ContainsKey(module.Name); // FIXME: don't parse the same module twice now.

            if (!exists)
            {
                _loaded.Add(module.Name, module);
            }

            return(true);
        }
        public ModuleLoader(TextReader reader, string moduleName)
        {
            _nodes = new List<Definition>();
            _dependents = new List<string>();

            string line;
            while ((line = reader.ReadLine()) != null)
            {
                if (line.StartsWith("#", StringComparison.Ordinal))
                {
                    _dependents.AddRange(ParseDependents(line));
                    continue;
                }

                _nodes.Add(ParseLine(line, moduleName));
            }

            _module = new MibModule(moduleName, _dependents);
        }
Exemple #14
0
        public ModuleLoader(TextReader reader, string moduleName)
        {
            _nodes      = new List <Definition>();
            _dependents = new List <string>();

            string line;

            while ((line = reader.ReadLine()) != null)
            {
                if (line.StartsWith("#", StringComparison.Ordinal))
                {
                    _dependents.AddRange(ParseDependents(line));
                    continue;
                }

                _nodes.Add(ParseLine(line, moduleName));
            }

            _module = new MibModule(moduleName, _dependents);
        }
        private void Import(MibModule module)
        {
            if (module == null)
            {
                throw new ArgumentNullException("module");
            }

            if (_loaded.ContainsKey(module.Name))
            {
#if !MA && !MT
                Logger.Info(module.ReportDuplicate(_loaded[module.Name]));
#endif
            }
            else if (_pendings.ContainsKey(module.Name))
            {
#if !MA && !MT
                Logger.Info(module.ReportDuplicate(_pendings[module.Name]));
#endif
            }
            else
            {
                _pendings.Add(module.Name, module);
            }
        }
Exemple #16
0
 internal static bool AllDependentsAvailable(MibModule module, IDictionary <string, MibModule> modules)
 {
     return(module.Dependents.All(dependent => DependentFound(dependent, modules)));
 }
Exemple #17
0
        private void Import(MibModule module)
        {
            if (module == null)
            {
                throw new ArgumentNullException("module");
            }

            if (_loaded.ContainsKey(module.Name))
            {
#if !MA
                Logger.Info(module.ReportDuplicate(_loaded[module.Name]));
#endif
            }
            else if (_pendings.ContainsKey(module.Name))
            {
#if !MA
                Logger.Info(module.ReportDuplicate(_pendings[module.Name]));
#endif
            }
            else
            {
                _pendings.Add(module.Name, module);
            }
        }
        private void AddNodes(MibModule module)
        {
            var pendingNodes = new List <IEntity>();

            // parse all direct nodes.
            foreach (IEntity node in module.Entities)
            {
                if (node.Parent.Contains("."))
                {
                    pendingNodes.Add(node);
                    continue;
                }

                Definition result = CreateSelf(node);
                if (result == null)
                {
                    pendingNodes.Add(node);
                    continue;
                }

                AddToTable(result);
            }

            // parse indirect nodes.
            int current = pendingNodes.Count;

            while (current != 0)
            {
                var parsed   = new List <IEntity>();
                int previous = current;
                foreach (IEntity node in pendingNodes)
                {
                    if (node.Parent.Contains("."))
                    {
                        if (!FirstNodeExists(node))
                        {
                            // wait till first node available.
                            continue;
                        }

                        // create all place holders.
                        IDefinition unknown = CreateExtraNodes(module, node.Parent);
                        if (unknown != null)
                        {
                            node.Parent = unknown.Name;
                            AddToTable(CreateSelf(node));
                        }
                    }
                    else
                    {
                        Definition result = CreateSelf(node);
                        if (result == null)
                        {
                            // wait for parent
                            continue;
                        }

                        AddToTable(result);
                    }

                    parsed.Add(node);
                }

                foreach (IEntity en in parsed)
                {
                    pendingNodes.Remove(en);
                }

                current = pendingNodes.Count;
                if (previous == current)
                {
                    break;
                }
            }
        }
Exemple #19
0
        private void Parse(MibModule module)
        {
            var watch = new Stopwatch();
            watch.Start();
            AddNodes(module);
#if !MA
            Logger.InfoFormat(CultureInfo.InvariantCulture, "{0}-ms used to assemble {1}", watch.ElapsedMilliseconds, module.Name);
#endif
            watch.Stop();
        }
Exemple #20
0
        private void Import(MibModule module)
        {
            if (module == null)
            {
                throw new ArgumentNullException("module");
            }

            if (LoadedModules.Contains(module.Name) || PendingModules.Contains(module.Name))
            {
                Logger.InfoFormat(CultureInfo.InvariantCulture, "{0} ignored", module.Name);
            }
            else
            {
                _pendings.Add(module.Name, module);
            }
        }
 internal static bool AllDependentsAvailable(MibModule module, IDictionary<string, MibModule> modules)
 {
     foreach (string dependent in module.Dependents)
     {
         if (!DependentFound(dependent, modules))
         {
             return false;
         }
     }
     
     return true;
 }
Exemple #22
0
 public string ReportDuplicate(MibModule existing)
 {
     return string.IsNullOrEmpty(FileName)
                ? string.Format("warning N0002 : {0} is duplicate of {1}", Name, existing.FileName)
                : string.Format("{0} : warning N0002 : {1} is duplicate of {2}", FileName, Name, existing.FileName);
 }
Exemple #23
0
 public string ReportDuplicate(MibModule existing)
 {
     return(string.IsNullOrEmpty(FileName)
                ? string.Format("warning N0002 : {0} is duplicate of {1}", Name, existing.FileName)
                : string.Format("{0} : warning N0002 : {1} is duplicate of {2}", FileName, Name, existing.FileName));
 }
Exemple #24
0
        private void AddNodes(MibModule module)
        {
            var pendingNodes = new List<IEntity>();
            
            // parse all direct nodes.
            foreach (IEntity node in module.Entities)
            {
                if (node.Parent.Contains("."))
                {
                    pendingNodes.Add(node);
                    continue;
                }
                
                Definition result = CreateSelf(node);
                if (result == null)
                {
                    pendingNodes.Add(node);
                    continue;
                }

                AddToTable(result);
            }

            // parse indirect nodes.
            int current = pendingNodes.Count;
            while (current != 0)
            {
                var parsed = new List<IEntity>();
                int previous = current;
                foreach (IEntity node in pendingNodes)
                {
                    if (node.Parent.Contains("."))
                    {
                        if (!FirstNodeExists(node))
                        {
                            // wait till first node available.
                            continue;
                        }

                        // create all place holders.
                        IDefinition unknown = CreateExtraNodes(module, node.Parent);
                        if (unknown != null)
                        {
                            node.Parent = unknown.Name;
                            AddToTable(CreateSelf(node));
                        }
                    }
                    else
                    {
                        Definition result = CreateSelf(node);
                        if (result == null)
                        {
                            // wait for parent
                            continue;
                        }

                        AddToTable(result);
                    }
                    
                    parsed.Add(node);
                }
                
                foreach (IEntity en in parsed)
                {
                    pendingNodes.Remove(en);
                }

                current = pendingNodes.Count;
                if (previous == current)
                {
                    break;
                }
            }
        }
Exemple #25
0
 private static void PersistModuleToFile(string folder, MibModule module, IObjectTree tree)
 {
     string fileName = Path.Combine(folder, module.Name + ".module");
     using (StreamWriter writer = new StreamWriter(fileName))
     {
         writer.Write("#");
         foreach (string dependent in module.Dependents)
         {
             writer.Write(dependent);
             writer.Write(',');
         }
         
         writer.WriteLine();
         foreach (IEntity entity in module.Entities)
         {
             IDefinition node = tree.Find(module.Name, entity.Name);
             if (node == null)
             {
                 continue;
             }
             
             uint[] id = node.GetNumericalForm();
             /* 0: id
              * 1: type
              * 2: name
              * 3: parent name
              */
             writer.WriteLine(ObjectIdentifier.Convert(id) + "," + entity.GetType() + "," + entity.Name + "," + entity.Parent);
         }
         
         writer.Close();
     }
 }
Exemple #26
0
        private Definition CreateExtraNodes(MibModule module, string longParent)
        {
            string[] content = longParent.Split('.');
            Definition node = Find(ExtractName(content[0]));
            uint[] rootId = node.GetNumericalForm();
            var all = new uint[content.Length + rootId.Length - 1];
            for (int j = rootId.Length - 1; j >= 0; j--)
            {
                all[j] = rootId[j];
            }
            
            // change all to numerical
            for (int i = 1; i < content.Length; i++)
            {
                uint value;
                bool numberFound = UInt32.TryParse(content[i], out value);
                int currentCursor = rootId.Length + i - 1;
                if (numberFound)
                {
                    all[currentCursor] = value;
                    node = Find(ExtractParent(all, currentCursor + 1));
                    if (node != null)
                    {
                        continue;
                    }

                    IDefinition subroot = Find(ExtractParent(all, currentCursor));
                    
                    // if not, create Prefix node.
                    var prefix = new ObjectIdentifierType(module.Name, subroot.Name + "_" + value.ToString(CultureInfo.InvariantCulture), subroot.Name, value);
#if !MA
                    Logger.Info(module.ReportImplicitObjectIdentifier(prefix));
#endif
                    node = CreateSelf(prefix);
                    AddToTable(node);
                }
                else
                {
                    string self = content[i];
                    string parent = content[i - 1];
                    var extra = new ObjectIdentifierType(module.Name, ExtractName(self), ExtractName(parent), ExtractValue(self));
                    node = CreateSelf(extra);
                    if (node != null)
                    {
#if !MA
                        Logger.Info(module.ReportImplicitObjectIdentifier(extra));
#endif
                        AddToTable(node);
                        all[currentCursor] = node.Value;
                    }
                    else
                    {
#if !MA
                        Logger.Info(module.ReportIgnoredImplicitEntity(longParent));
#endif
                    }
                }
            }

            return node;
        }
        private Definition CreateExtraNodes(MibModule module, string longParent)
        {
            string[]   content = longParent.Split('.');
            Definition node    = Find(ExtractName(content[0]));

            uint[] rootId = node.GetNumericalForm();
            var    all    = new uint[content.Length + rootId.Length - 1];

            for (int j = rootId.Length - 1; j >= 0; j--)
            {
                all[j] = rootId[j];
            }

            // change all to numerical
            for (int i = 1; i < content.Length; i++)
            {
                uint value;
                bool numberFound   = uint.TryParse(content[i], out value);
                int  currentCursor = rootId.Length + i - 1;
                if (numberFound)
                {
                    all[currentCursor] = value;
                    node = Find(ExtractParent(all, currentCursor + 1));
                    if (node != null)
                    {
                        continue;
                    }

                    IDefinition subroot = Find(ExtractParent(all, currentCursor));

                    // if not, create Prefix node.
                    var prefix = new ObjectIdentifierType(module.Name, subroot.Name + "_" + value.ToString(CultureInfo.InvariantCulture), subroot.Name, value);
#if !MA && !MT
                    Logger.Info(module.ReportImplicitObjectIdentifier(prefix));
#endif
                    node = CreateSelf(prefix);
                    AddToTable(node);
                }
                else
                {
                    string self   = content[i];
                    string parent = content[i - 1];
                    var    extra  = new ObjectIdentifierType(module.Name, ExtractName(self), ExtractName(parent), ExtractValue(self));
                    node = CreateSelf(extra);
                    if (node != null)
                    {
#if !MA && !MT
                        Logger.Info(module.ReportImplicitObjectIdentifier(extra));
#endif
                        AddToTable(node);
                        all[currentCursor] = node.Value;
                    }
                    else
                    {
#if !MA && !MT
                        Logger.Info(module.ReportIgnoredImplicitEntity(longParent));
#endif
                    }
                }
            }

            return(node);
        }
Exemple #28
0
 internal static bool AllDependentsAvailable(MibModule module, IDictionary<string, MibModule> modules)
 {
     return module.Dependents.All(dependent => DependentFound(dependent, modules));
 }
Exemple #29
0
        private bool CanParse(MibModule module)
        {
            if (!module.Validate(_loaded))
            {
                return false;
            }
            
            bool exists = _loaded.ContainsKey(module.Name); // FIXME: don't parse the same module twice now.
            if (!exists)
            {
                _loaded.Add(module.Name, module);
            }

            return true;
        }
Exemple #30
0
        private bool CanParse(MibModule module)
        {
            if (!MibModule.AllDependentsAvailable(module, _loaded))
            {
                return false;
            }
            
            bool exists = _loaded.ContainsKey(module.Name); // FIXME: don't parse the same module twice now.
            if (!exists)
            {
                _loaded.Add(module.Name, module);
            }

            return true;
        }