Пример #1
0
        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);
        }