示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private ByteArray HandleDataSize(ByteArray data)
        {
            string messages = string.Concat("Handling Header Size. Length: ", data.Length, " (", !this.pendingPacket.Header.BigSized ? "small" : "big", ")");

            log.Debug(messages);
            int num = -1;
            int pos = SHORT_BYTE_SIZE;

            if (pendingPacket.Header.BigSized)
            {
                if (data.Length >= INT_BYTE_SIZE)
                {
                    num = data.ReadInt();
                }
                pos = 4;
            }
            else if (data.Length >= SHORT_BYTE_SIZE)
            {
                num = data.ReadUShort();
            }
            log.Debug("Data size is " + num);
            if (num != -1)
            {
                pendingPacket.Header.ExpectedLength = num;
                data = ResizeByteArray(data, pos, data.Length - pos);
                fsm.ApplyTransition(PacketReadTransition.SizeReceived);
                return(data);
            }
            fsm.ApplyTransition(PacketReadTransition.IncompleteSize);
            pendingPacket.Buffer.WriteBytes(data.Bytes);
            data = EMPTY_BUFFER;
            return(data);
        }
示例#2
0
        private ByteArray HandleNewPacket(ByteArray data)
        {
            log.Debug("Handling New Packet of size " + data.Length);
            byte b = data.ReadByte();

            if (~(b & 0x80) > 0)
            {
                throw new SFSError("Unexpected header byte: " + b + "\n" + DefaultObjectDumpFormatter.HexDump(data));
            }
            PacketHeader header = PacketHeader.FromBinary(b);

            pendingPacket = new PendingPacket(header);
            fsm.ApplyTransition(PacketReadTransition.HeaderReceived);
            return(ResizeByteArray(data, 1, data.Length - 1));
        }