Ejemplo n.º 1
0
        internal static GranularLogDataMsg ReadFromNet(NetworkChannel ch, byte[] workingBuf, int startOffset)
        {
            int len = 52;

            ch.Read(workingBuf, startOffset, len);
            GranularLogDataMsg granularLogDataMsg = new GranularLogDataMsg();
            BufDeserializer    bufDeserializer    = new BufDeserializer(workingBuf, startOffset);

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

            lgposLogData.lGeneration = bufDeserializer.ExtractInt32();
            lgposLogData.isec        = (int)bufDeserializer.ExtractUInt16();
            lgposLogData.ib          = (int)bufDeserializer.ExtractUInt16();
            granularLogDataMsg.EmitContext.lgposLogData = lgposLogData;
            return(granularLogDataMsg);
        }
        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);
        }
        public static NetworkChannelMessageHeader ReadHeaderFromNet(NetworkChannel netChan, byte[] workingBuf, int startOffset)
        {
            netChan.Read(workingBuf, startOffset, 16);
            BufDeserializer             bufDeserializer = new BufDeserializer(workingBuf, 0);
            NetworkChannelMessageHeader result;

            result.MessageType   = (NetworkChannelMessage.MessageType)bufDeserializer.ExtractUInt32();
            result.MessageLength = bufDeserializer.ExtractInt32();
            result.MessageUtc    = bufDeserializer.ExtractDateTime();
            return(result);
        }
        internal static NetworkChannelMessage ReadMessage(NetworkChannel channel, byte[] headerBuf)
        {
            int num = 0;

            NetworkChannelMessage.MessageType messageType = (NetworkChannelMessage.MessageType)Serialization.DeserializeUInt32(headerBuf, ref num);
            if (!NetworkChannelMessage.IsValidType(messageType))
            {
                throw new NetworkUnexpectedMessageException(channel.PartnerNodeName, string.Format("Unknown Type{0}", messageType));
            }
            int num2 = (int)Serialization.DeserializeUInt32(headerBuf, ref num);

            if (num2 < 16 || num2 > 1052672)
            {
                throw new NetworkUnexpectedMessageException(channel.PartnerNodeName, string.Format("Invalid msgLen: {0}", num2));
            }
            ExTraceGlobals.NetworkChannelTracer.TraceDebug <NetworkChannelMessage.MessageType, string, string>((long)channel.GetHashCode(), "ReadMessage: Received {0} from {1} on {2}", messageType, channel.RemoteEndPointString, channel.LocalEndPointString);
            byte[] array = new byte[num2];
            Array.Copy(headerBuf, 0, array, 0, 16);
            int len = num2 - 16;

            channel.Read(array, 16, len);
            NetworkChannelMessage.MessageType messageType2 = messageType;
            if (messageType2 <= NetworkChannelMessage.MessageType.BlockModeCompressedData)
            {
                if (messageType2 == NetworkChannelMessage.MessageType.PassiveStatus)
                {
                    return(new PassiveStatusMsg(channel, array));
                }
                if (messageType2 != NetworkChannelMessage.MessageType.BlockModeCompressedData)
                {
                    goto IL_118;
                }
            }
            else
            {
                if (messageType2 == NetworkChannelMessage.MessageType.Ping)
                {
                    return(new PingMessage(channel, array));
                }
                if (messageType2 != NetworkChannelMessage.MessageType.GranularLogData)
                {
                    if (messageType2 != NetworkChannelMessage.MessageType.EnterBlockMode)
                    {
                        goto IL_118;
                    }
                    return(new EnterBlockModeMsg(channel, array));
                }
            }
            throw new NetworkUnexpectedMessageException(channel.PartnerNodeName, string.Format("ReadMessage() does not support message type: {0}.", messageType));
IL_118:
            throw new NetworkUnexpectedMessageException(channel.PartnerNodeName, string.Format("Unknown message type: 0x{0:X}", (int)messageType));
        }
Ejemplo n.º 5
0
        internal static PingMessage ReadFromNet(NetworkChannel ch, byte[] workingBuf, int startOffset)
        {
            int len = 24;

            ch.Read(workingBuf, startOffset, len);
            PingMessage     pingMessage     = new PingMessage();
            BufDeserializer bufDeserializer = new BufDeserializer(workingBuf, startOffset);

            pingMessage.FlagsUsed         = (PingMessage.Flags)bufDeserializer.ExtractInt64();
            pingMessage.RequestAckCounter = bufDeserializer.ExtractInt64();
            pingMessage.ReplyAckCounter   = bufDeserializer.ExtractInt64();
            return(pingMessage);
        }