/// <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); }
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)); }