예제 #1
0
        protected void CheckElement(D900CdrElement element, ElementsStatTable tablePresent, ElementsStatTable tableNone)
        {
            if (element.Path.Equals(element.Name) || (element.Name.Length == 0))
            {
                if (tableNone.ContainsKey(element.Path))
                {
                    tableNone[element.Path]++;
                }
                else
                {
                    tableNone.Add(element.Path, 1);
                }
            }
            else
            {
                if (tablePresent.ContainsKey(element.Path))
                {
                    tablePresent[element.Path]++;
                }
                else
                {
                    tablePresent.Add(element.Path, 1);
                }
            }

            if (element.IsConstructed && !element.IsEmpty)
            {
                foreach (D900CdrElement child in (element.Value as List <D900CdrElement>))
                {
                    CheckElement(child, tablePresent, tableNone);
                }
            }
        }
예제 #2
0
        public int CheckElementsDefinition(Stream asnStream, TextWriter dumpWriter)
        {
            long offset = 0;

            BerDecoderResult pr = BerDecoderResult.Finished;
            TlvObject        tlv;
            D900CdrElement   record;
            int cnt = 0;

            ElementPathComparer comparer = new ElementPathComparer();

            ElementsStatTable present = new ElementsStatTable(comparer);
            ElementsStatTable none    = new ElementsStatTable(comparer);

            dumpWriter.WriteLine("Check elements definition.\n==========================");
            dumpWriter.WriteLine("Current configuration: {0}\n", ElementDefinitionProvider.CurrentSchema);

            int rem;

            dumpWriter.WriteLine("Please wait");
            for (; ;) //(int n = 5000; n > 0; n--)
            {
                pr = DecodeTlv(asnStream, out tlv, ref offset, 0, Byte.MaxValue);

                if (pr != BerDecoderResult.Finished)
                {
                    break;
                }

                record = _tlvParser.ParseTlvObject(tlv);
                CheckElement(record, present, none);
                cnt++;

                Math.DivRem(cnt, 1000, out rem);

                if (rem == 0)
                {
                    dumpWriter.Write('.');
                }
            }
            dumpWriter.WriteLine("\n");

            int e_sum             = 0;
            int max_present_value = 0;

            foreach (var value in present)
            {
                e_sum += value.Value;
                if (max_present_value < value.Value)
                {
                    max_present_value = value.Value;
                }
            }

            int max_none_value = 0;

            foreach (var value in none)
            {
                e_sum += value.Value;
                if (max_none_value < value.Value)
                {
                    max_none_value = value.Value;
                }
            }

            dumpWriter.WriteLine("- Total {0} records processed ({1} elements)\n", cnt, e_sum);

            dumpWriter.WriteLine("- The elements are present:\n===========================");
            string headerFmt = " {0,-15}| {1, -30}| {2}";

            dumpWriter.WriteLine(headerFmt, "Path", "Name", "Count");
            dumpWriter.WriteLine(headerFmt
                                 , "---------------"
                                 , "------------------------------"
                                 , "---------------------------"
                                 );

            ID900CdrElementDefinition elementDef;

            foreach (var value in present)
            {
                elementDef = ElementDefinitionProvider.FindDefinition(value.Key);
                dumpWriter.Write(headerFmt, value.Key, (elementDef != null) ? elementDef.Name : String.Empty, string.Empty);
                for (int n = 1; n < value.Value * 26 / max_present_value; n++)
                {
                    dumpWriter.Write("#");
                }
                dumpWriter.WriteLine(" {0}", value.Value);
            }
            dumpWriter.WriteLine();

            dumpWriter.WriteLine("- Elements are not available in D900Cdr.Elements.xml:\n====================================================");
            headerFmt = " {0,-15}| {1}";
            dumpWriter.WriteLine(headerFmt, "Path", "Count");
            dumpWriter.WriteLine(headerFmt
                                 , "---------------"
                                 , "------------------------------"
                                 );
            foreach (var value in none)
            {
                dumpWriter.Write(headerFmt, value.Key, string.Empty);
                for (int n = 1; n < value.Value * 29 / max_none_value; n++)
                {
                    dumpWriter.Write("#");
                }
                dumpWriter.WriteLine(" {0}", value.Value);
            }
            dumpWriter.WriteLine();

            dumpWriter.Flush();

            return((int)(pr));
        }