internal void clientFileContentsResponse() { // Вычисляем часть файла byte[] tempArr = null; if ((FileData.Length - Position) > 0) { if ((FileData.Length - Position) >= BufferNextPart) { tempArr = new byte[BufferNextPart]; Array.Copy(FileData, Position, tempArr, 0, BufferNextPart); Position += BufferNextPart; } else { tempArr = new byte[(FileData.Length - Position)]; Array.Copy(FileData, Position, tempArr, 0, (FileData.Length - Position)); BufferNextPart = 0; Position = 0; } } else if ((FileData.Length - Position) == 0) { BufferNextPart = 0; Position = 0; return; } // Формируем пакет RdpPacket packet = new RdpPacket(); packet.WriteLittleEndian16((short)MsgType.CB_FILECONTENTS_RESPONSE); packet.WriteLittleEndian16((short)MsgFlags.CB_RESPONSE_OK); // Устанавливаем длину сообщения if (FileCanLoad) { packet.WriteLittleEndian32(tempArr.Length + 4); // length } else { packet.WriteLittleEndian32(8 + 4); // length } // Stream ID packet.WriteLittleEndian32(StreamID); // Устанавливаем размер или байты самого файла, в зависимости от значения FileCanLoad if (FileCanLoad && FileData != null) { // requestedFileContentsData packet.Write(tempArr, 0, tempArr.Length); } else { // requestedFileContentsData packet.WriteLittleEndianU64(FileSize); } send(packet); }