예제 #1
0
        private TLVList Decode(TLV Parent, byte[] binaryStructureFile, SymbolTable DocFile)
        {
            var newTlvList = new TLVList();
            int i          = 0;

            while (i < binaryStructureFile.Length - 1)
            {
                byte getItentification = binaryStructureFile[i++];
                int  sizeOfElement     = 0;
                if (getItentification == 64)
                {
                    sizeOfElement = (binaryStructureFile[i++] << 8) | binaryStructureFile[i++];
                }
                else
                {
                    sizeOfElement = binaryStructureFile[i++];
                }
                Param findParamElement   = getTLVCode(DocFile, getItentification);
                var   getContextToDecode = new byte[sizeOfElement];

                Array.Copy(binaryStructureFile, i, getContextToDecode, 0, sizeOfElement);
                i += sizeOfElement;
                if (findParamElement != null)
                {
                    bool itsGroup = findParamElement.Group != null ? true : false;
                    if (itsGroup)
                    {
                        //Get some solution for format activating difrent type of class
                        TLV newTlvElement = TLV.Create(findParamElement, getContextToDecode);
                        newTlvElement.setParent(Parent);
                        newTlvElement.children = Decode(newTlvElement, getContextToDecode, findParamElement.Group);
                        DebugEvent(ref newTlvElement);
                        newTlvList.Add(newTlvElement);
                    }
                    else
                    {
                        TLV newTlvElement = TLV.Create(findParamElement, getContextToDecode);
                        newTlvElement.setParent(Parent);
                        DebugEvent(ref newTlvElement);
                        newTlvList.Add(newTlvElement);
                    }
                }
                if (findParamElement == null)
                {
                    TLV newTlvElement = new TLVGeneric("GenericTLV", getItentification, getContextToDecode);
                    newTlvElement.setParent(Parent);
                    DebugEvent(ref newTlvElement);
                    newTlvList.Add(newTlvElement);
                }
            }
            return(newTlvList);
        }
예제 #2
0
        public byte[] ToEncoding()
        {
            if (EncodedFile.Count() == 0)
            {
                return(null);
            }
            var encodeStream = new MemoryStream();
            var binaryWriter = new BinaryWriter(encodeStream);

            binaryWriter.Write(EncodedFile.GetEncodings());
            TLV cmMIC = new TLVCMMIC(EncodedFile);

            binaryWriter.Write(cmMIC.ToEncoding());
            EncodedFile.Add(cmMIC);
            binaryWriter.Write((new TLVCMTSMIC(EncodedFile, Secret).ToEncoding()));
            TLV EndOfBataMkr = new TLVSpecial();

            // Add EndOfDataMkr before making the MD5
            binaryWriter.Write(EndOfBataMkr.ToEncoding());
            return(encodeStream.ToArray());
        }
예제 #3
0
        private TLVList Encode(TLV Parent, string FileToParse, SymbolTable DocFile)
        {
            var NewTlvList = new TLVList();

            while (true)
            {
                int PosLine  = FileToParse.IndexOf(';');
                int PosGroup = FileToParse.IndexOf('{');
                if (PosLine < 0 && PosGroup < 0)
                {
                    break;
                }
                if (PosLine > PosGroup && PosGroup > -1)
                {
                    // Exclude Comment Before Began // # /* */
                    //We Find Post Group Recursive Call
                    string Name =
                        FileToParse.Substring(0, PosGroup).Replace('\n', ' ').Replace('\r', ' ').Replace('\t', ' ').Trim
                            ();
                    if (Name.StartsWith("/*"))
                    {
                        Name = Name.Substring(Name.IndexOf("*/") + 2).Trim();
                    }
                    LastCommand = Name;
                    if (Name != "Main")
                    {
                        Param  FindElem      = DocFile[Name];
                        string FileToParse2  = Split(FileToParse.Substring(PosGroup));
                        string Manage        = FileToParse2.Substring(1, FileToParse2.Length - 2);
                        TLV    newTlvElement = TLV.Create(FindElem, "");
                        newTlvElement.setParent(Parent);
                        newTlvElement.children = Encode(newTlvElement, Manage, FindElem.Group);
                        FileToParse            = FileToParse.Substring(PosGroup + FileToParse2.Length);
                        NewTlvList.Add(newTlvElement);
                        DebugEvent(ref newTlvElement);
                    }
                    else
                    {
                        string FileToParse2 = Split(FileToParse.Substring(PosGroup));
                        string Manage       = FileToParse2.Substring(1, FileToParse2.Length - 2);
                        NewTlvList  = Encode(null, Manage, DocFile);
                        FileToParse = FileToParse.Substring(PosGroup + FileToParse2.Length);
                    }
                }
                else
                {
                    var    getRegEx = new Regex(@"\b.*?;");
                    string NewValue = getRegEx.Match(FileToParse).ToString().Replace('\t', ' ').Replace('\n', ' ');
                    // string NewVal = FileToParse.Substring(0, PosLine ).Trim();
                    string SymbolName = NewValue.Split(' ')[0];
                    LastCommand = SymbolName;
                    NewValue    = NewValue.Substring(SymbolName.Length + 1, NewValue.IndexOf(';') - SymbolName.Length - 1);
                    FileToParse = FileToParse.Substring(PosLine + 1);
                    if (SymbolName != "GenericTLV")
                    {
                        TLV NewTlvElement = TLV.Create(DocFile[SymbolName], NewValue);

                        NewTlvElement.setParent(Parent);
                        DebugEvent(ref NewTlvElement);
                        NewTlvList.Add(NewTlvElement);
                    }
                    else
                    {
                        TLV NewTlvElement = new TLVGeneric(SymbolName, NewValue);
                        NewTlvElement.setParent(Parent);
                        DebugEvent(ref NewTlvElement);
                        NewTlvList.Add(NewTlvElement);
                    }
                }
            }
            return(NewTlvList);
        }