Esempio n. 1
0
        public override int Serialize(int offset, byte [] data)
        {
            int recSize  = RecordSize;
            int dataSize = recSize - 4;

            LittleEndianByteArrayOutputStream out1 = new LittleEndianByteArrayOutputStream(data, offset, recSize);

            out1.WriteShort(sid);
            out1.WriteShort(dataSize);

            if (_uninterpretedData == null)
            {
                for (int i = 0; i < subrecords.Count; i++)
                {
                    SubRecord record = subrecords[i];
                    record.Serialize(out1);
                }
                int expectedEndIx = offset + dataSize;
                // padding
                while (out1.WriteIndex < expectedEndIx)
                {
                    out1.WriteByte(0);
                }
            }
            else
            {
                out1.Write(_uninterpretedData);
            }
            return(recSize);
        }
Esempio n. 2
0
 public void Write(LittleEndianByteArrayOutputStream bos)
 {
     bos.WriteShort(info.VersionMajor);
     bos.WriteShort(info.VersionMinor);
     header.Write(bos);
     verifier.Write(bos);
 }
Esempio n. 3
0
        /**
         * Serializes the header
         */
        public void Write(LittleEndianByteArrayOutputStream bos)
        {
            int startIdx = bos.WriteIndex;
            ILittleEndianOutput sizeOutput = bos.CreateDelayedOutput(LittleEndianConsts.INT_SIZE);

            bos.WriteInt(Flags);
            bos.WriteInt(0); // size extra
            bos.WriteInt(CipherAlgorithm.ecmaId);
            bos.WriteInt(HashAlgorithm.ecmaId);
            bos.WriteInt(KeySize);
            bos.WriteInt(CipherProvider.ecmaId);
            bos.WriteInt(0); // reserved1
            bos.WriteInt(0); // reserved2
            String cspName = CspName;

            if (cspName == null)
            {
                cspName = CipherProvider.cipherProviderName;
            }
            bos.Write(StringUtil.GetToUnicodeLE(cspName));
            bos.WriteShort(0);
            int headerSize = bos.WriteIndex - startIdx - LittleEndianConsts.INT_SIZE;

            sizeOutput.WriteInt(headerSize);
        }
Esempio n. 4
0
        public override int Serialize(int offset, byte[] data)
        {
            int dataSize = DataSize;
            int recSize  = 4 + dataSize;
            LittleEndianByteArrayOutputStream out1 = new LittleEndianByteArrayOutputStream(data, offset, recSize);

            out1.WriteShort(this.Sid);
            out1.WriteShort(dataSize);
            Serialize(out1);
            if (out1.WriteIndex - offset != recSize)
            {
                throw new InvalidOperationException("Error in serialization of (" + this.GetType().Name + "): "
                                                    + "Incorrect number of bytes written - expected "
                                                    + recSize + " but got " + (out1.WriteIndex - offset));
            }
            return(recSize);
        }
Esempio n. 5
0
 public void Write(LittleEndianByteArrayOutputStream bos)
 {
     WriteUnicodeLPP4(bos, featureIdentifier);
     bos.WriteShort(readerVersionMajor);
     bos.WriteShort(readerVersionMinor);
     bos.WriteShort(updaterVersionMajor);
     bos.WriteShort(updaterVersionMinor);
     bos.WriteShort(writerVersionMajor);
     bos.WriteShort(writerVersionMinor);
 }
Esempio n. 6
0
            public void Write(LittleEndianByteArrayOutputStream bos)
            {
                int start = bos.WriteIndex;
                ILittleEndianOutput sizeOut = bos.CreateDelayedOutput(LittleEndianConsts.INT_SIZE);

                bos.WriteInt(transformType);
                WriteUnicodeLPP4(bos, transformerId);
                sizeOut.WriteInt(bos.WriteIndex - start);
                WriteUnicodeLPP4(bos, transformerName);
                bos.WriteShort(readerVersionMajor);
                bos.WriteShort(readerVersionMinor);
                bos.WriteShort(updaterVersionMajor);
                bos.WriteShort(updaterVersionMinor);
                bos.WriteShort(writerVersionMajor);
                bos.WriteShort(writerVersionMinor);
            }
Esempio n. 7
0
        public override int Serialize(int offset, byte [] data)
        {
            int recSize = RecordSize;
            int dataSize = recSize - 4;

            LittleEndianByteArrayOutputStream out1 = new LittleEndianByteArrayOutputStream(data, offset, recSize);

            out1.WriteShort(sid);
            out1.WriteShort(dataSize);

            if (_uninterpretedData == null)
            {
                for (int i = 0; i < subrecords.Count; i++)
                {
                    SubRecord record = subrecords[i];
                    record.Serialize(out1);
                }
                int expectedEndIx = offset + dataSize;
                // padding
                while (out1.WriteIndex < expectedEndIx)
                {
                    out1.WriteByte(0);
                }
            }
            else
            {
                out1.Write(_uninterpretedData);
            }
            return recSize;
        }
Esempio n. 8
0
        public void TestExtRstEqualsAndHashCode()
        {
            byte[] buf = new byte[200];
            LittleEndianByteArrayOutputStream bos = new LittleEndianByteArrayOutputStream(buf, 0);
            String str = "\u1d02\u1d12\u1d22";

            bos.WriteShort(1);
            bos.WriteShort(5 * LittleEndianConsts.SHORT_SIZE + str.Length * 2 + 3 * LittleEndianConsts.SHORT_SIZE + 2); // data size
            bos.WriteShort(0x4711);
            bos.WriteShort(0x0815);
            bos.WriteShort(1);
            bos.WriteShort(str.Length);
            bos.WriteShort(str.Length);
            StringUtil.PutUnicodeLE(str, bos);
            bos.WriteShort(1);
            bos.WriteShort(1);
            bos.WriteShort(3);
            bos.WriteShort(42);

            LittleEndianByteArrayInputStream in1 = new LittleEndianByteArrayInputStream(buf, 0, bos.WriteIndex);

            UnicodeString.ExtRst extRst1 = new UnicodeString.ExtRst(in1, bos.WriteIndex);
            in1 = new LittleEndianByteArrayInputStream(buf, 0, bos.WriteIndex);
            UnicodeString.ExtRst extRst2 = new UnicodeString.ExtRst(in1, bos.WriteIndex);

            Assert.AreEqual(extRst1, extRst2);
            Assert.AreEqual(extRst1.GetHashCode(), extRst2.GetHashCode());
        }