Example #1
0
        internal static BlockModeCompressedDataMsg ReadFromNet(NetworkChannel ch, byte[] workingBuf, int startOffset)
        {
            int len = 52;

            ch.Read(workingBuf, startOffset, len);
            BlockModeCompressedDataMsg blockModeCompressedDataMsg = new BlockModeCompressedDataMsg();
            BufDeserializer            bufDeserializer            = new BufDeserializer(workingBuf, startOffset);

            blockModeCompressedDataMsg.FlagsUsed         = (BlockModeCompressedDataMsg.Flags)bufDeserializer.ExtractInt64();
            blockModeCompressedDataMsg.RequestAckCounter = bufDeserializer.ExtractInt64();
            blockModeCompressedDataMsg.LogDataLength     = bufDeserializer.ExtractInt32();
            if (blockModeCompressedDataMsg.LogDataLength > 1048576)
            {
                throw new NetworkCorruptDataException(ch.PartnerNodeName);
            }
            blockModeCompressedDataMsg.EmitContext                       = new JET_EMITDATACTX();
            blockModeCompressedDataMsg.EmitContext.cbLogData             = (long)blockModeCompressedDataMsg.LogDataLength;
            blockModeCompressedDataMsg.EmitContext.dwVersion             = bufDeserializer.ExtractInt32();
            blockModeCompressedDataMsg.EmitContext.qwSequenceNum         = bufDeserializer.ExtractUInt64();
            blockModeCompressedDataMsg.EmitContext.grbitOperationalFlags = (ShadowLogEmitGrbit)bufDeserializer.ExtractUInt32();
            blockModeCompressedDataMsg.EmitContext.logtimeEmit           = bufDeserializer.ExtractDateTime();
            JET_LGPOS lgposLogData = default(JET_LGPOS);

            lgposLogData.lGeneration = bufDeserializer.ExtractInt32();
            lgposLogData.isec        = (int)bufDeserializer.ExtractUInt16();
            lgposLogData.ib          = (int)bufDeserializer.ExtractUInt16();
            blockModeCompressedDataMsg.EmitContext.lgposLogData = lgposLogData;
            if (blockModeCompressedDataMsg.LogDataLength > 0)
            {
                int num = BlockModeCompressedDataMsg.CalculateBlockCount(blockModeCompressedDataMsg.LogDataLength);
                blockModeCompressedDataMsg.CompressedLengths = new int[num];
                len = num * 4;
                ch.Read(workingBuf, startOffset, len);
                bufDeserializer.Reset(workingBuf, startOffset);
                for (int i = 0; i < num; i++)
                {
                    int num2 = bufDeserializer.ExtractInt32();
                    if (num2 <= 0 || num2 > 65536)
                    {
                        throw new NetworkCorruptDataException(ch.PartnerNodeName);
                    }
                    blockModeCompressedDataMsg.CompressedLengths[i] = num2;
                }
            }
            return(blockModeCompressedDataMsg);
        }
Example #2
0
        internal BlockModeCompressedDataMsg(NetworkChannel channel, byte[] packetContent) : base(channel, NetworkChannelMessage.MessageType.BlockModeCompressedData, packetContent)
        {
            this.FlagsUsed         = (BlockModeCompressedDataMsg.Flags)base.Packet.ExtractInt64();
            this.RequestAckCounter = base.Packet.ExtractInt64();
            this.LogDataLength     = base.Packet.ExtractInt32();
            if (this.LogDataLength > 1048576)
            {
                throw new NetworkCorruptDataException(channel.PartnerNodeName);
            }
            this.EmitContext                       = new JET_EMITDATACTX();
            this.EmitContext.cbLogData             = (long)this.LogDataLength;
            this.EmitContext.dwVersion             = base.Packet.ExtractInt32();
            this.EmitContext.qwSequenceNum         = base.Packet.ExtractUInt64();
            this.EmitContext.grbitOperationalFlags = (ShadowLogEmitGrbit)base.Packet.ExtractUInt32();
            this.EmitContext.logtimeEmit           = base.Packet.ExtractDateTime();
            JET_LGPOS lgposLogData = default(JET_LGPOS);

            lgposLogData.lGeneration      = base.Packet.ExtractInt32();
            lgposLogData.isec             = (int)base.Packet.ExtractUInt16();
            lgposLogData.ib               = (int)base.Packet.ExtractUInt16();
            this.EmitContext.lgposLogData = lgposLogData;
            if (this.LogDataLength > 0)
            {
                int num = BlockModeCompressedDataMsg.CalculateBlockCount(this.LogDataLength);
                this.CompressedLengths = new int[num];
                for (int i = 0; i < num; i++)
                {
                    int num2 = base.Packet.ExtractInt32();
                    if (num2 <= 0 || num2 > 65536)
                    {
                        throw new NetworkCorruptDataException(channel.PartnerNodeName);
                    }
                    this.CompressedLengths[i] = num2;
                }
            }
        }
Example #3
0
        private QueuedBlockMsg ReadCompressedMsg(NetworkChannel netChan, NetworkChannelMessageHeader msgHdr)
        {
            byte[] networkReadWorkingBuf = this.m_networkReadWorkingBuf;
            BlockModeCompressedDataMsg blockModeCompressedDataMsg = BlockModeCompressedDataMsg.ReadFromNet(netChan, networkReadWorkingBuf, 0);

            byte[] array = null;
            int    num   = 0;
            int    num2  = 0;

            if (blockModeCompressedDataMsg.LogDataLength > 0)
            {
                this.GetAppendSpace(blockModeCompressedDataMsg.LogDataLength);
                array = this.m_currentBuffer.Buffer;
                num   = this.m_currentBuffer.AppendOffset;
                int num3 = blockModeCompressedDataMsg.LogDataLength;
                int num4 = num;
                foreach (int num5 in blockModeCompressedDataMsg.CompressedLengths)
                {
                    num2 += num5;
                    netChan.Read(networkReadWorkingBuf, 0, num5);
                    int num6 = Math.Min(num3, 65536);
                    if (!Xpress.Decompress(networkReadWorkingBuf, 0, num5, array, num4, num6))
                    {
                        throw new NetworkCorruptDataException(this.m_netChannel.PartnerNodeName);
                    }
                    num3 -= num6;
                    num4 += num6;
                }
                this.m_currentBuffer.AppendOffset = num + blockModeCompressedDataMsg.LogDataLength;
            }
            return(new QueuedBlockMsg(blockModeCompressedDataMsg.EmitContext, array, num, num2)
            {
                RequestAckCounter = blockModeCompressedDataMsg.RequestAckCounter,
                IOBuffer = this.m_currentBuffer
            });
        }
Example #4
0
        public static int SerializeToBuffer(JET_EMITDATACTX emitContext, byte[] logdata, int cblogdata, byte[] targetBuffer, int targetBufferOffsetToStart, out int totalCompressedSize)
        {
            NetworkChannelPacket networkChannelPacket = new NetworkChannelPacket(targetBuffer, targetBufferOffsetToStart);

            networkChannelPacket.GrowthDisabled = true;
            int num = BlockModeCompressedDataMsg.CalculateBlockCount(cblogdata);

            int[] array = new int[num];
            int   num2  = 73 + 4 * num;
            int   num3  = num2 + targetBufferOffsetToStart;
            int   num4  = 0;

            totalCompressedSize = 0;
            int num5 = cblogdata;

            for (int i = 0; i < num; i++)
            {
                int num6 = Math.Min(num5, 65536);
                Xpress.Compress(logdata, num4, num6, targetBuffer, num3, num6, out array[i]);
                num4 += num6;
                num3 += array[i];
                totalCompressedSize += array[i];
                num5 -= num6;
            }
            networkChannelPacket.Append(1);
            int val = num2 - 5 + totalCompressedSize;

            networkChannelPacket.Append(val);
            val = 1145261378;
            networkChannelPacket.Append(val);
            val = num2 - 5;
            networkChannelPacket.Append(val);
            DateTime utcNow = DateTime.UtcNow;

            networkChannelPacket.Append(utcNow);
            long val2 = 0L;

            networkChannelPacket.Append(val2);
            val2 = Win32StopWatch.GetSystemPerformanceCounter();
            networkChannelPacket.Append(val2);
            networkChannelPacket.Append(cblogdata);
            val = emitContext.dwVersion;
            networkChannelPacket.Append(val);
            val2 = (long)emitContext.qwSequenceNum;
            networkChannelPacket.Append(val2);
            val = (int)emitContext.grbitOperationalFlags;
            networkChannelPacket.Append(val);
            DateTime time = DateTime.SpecifyKind(emitContext.logtimeEmit, DateTimeKind.Utc);

            networkChannelPacket.Append(time);
            val = emitContext.lgposLogData.lGeneration;
            networkChannelPacket.Append(val);
            ushort val3 = (ushort)emitContext.lgposLogData.isec;

            networkChannelPacket.Append(val3);
            val3 = (ushort)emitContext.lgposLogData.ib;
            networkChannelPacket.Append(val3);
            for (int j = 0; j < num; j++)
            {
                networkChannelPacket.Append(array[j]);
            }
            return(num2 + totalCompressedSize);
        }
Example #5
0
        public static int CalculateWorstLength(JET_EMITDATACTX emitContext, int cblogdata)
        {
            int num = BlockModeCompressedDataMsg.CalculateBlockCount(cblogdata);

            return(73 + 4 * num + cblogdata);
        }
Example #6
0
 internal static int GetOffsetToCompressedData(int uncompressedSize)
 {
     return(73 + 4 * BlockModeCompressedDataMsg.CalculateBlockCount(uncompressedSize));
 }