Пример #1
0
/* Send persistent bitmap cache enumeration PDU's */
static BOOL
rdp_enum_bmpcache2(RDPCLIENT * This) // THIS
{
	STREAM s;
	HASH_KEY keylist[BMPCACHE2_NUM_PSTCELLS];
	uint32 num_keys, offset, count, flags;

	offset = 0;
	num_keys = pstcache_enumerate(This, 2, keylist);

	while (offset < num_keys)
	{
		count = MIN(num_keys - offset, 169);

		s = rdp_init_data(This, 24 + count * sizeof(HASH_KEY));

		if(s == NULL)
			return False;

		flags = 0;
		if (offset == 0)
			flags |= PDU_FLAG_FIRST;
		if (num_keys - offset <= 169)
			flags |= PDU_FLAG_LAST;

		/* header */
		out_uint32_le(s, 0);
		out_uint16_le(s, count);
		out_uint16_le(s, 0);
		out_uint16_le(s, 0);
		out_uint16_le(s, 0);
		out_uint16_le(s, 0);
		out_uint16_le(s, num_keys);
		out_uint32_le(s, 0);
		out_uint32_le(s, flags);

		/* list */
		out_uint8a(s, keylist[offset], count * sizeof(HASH_KEY));

		s_mark_end(s);
		if(!rdp_send_data(This, s, 0x2b))
			return False;

		offset += 169;
	}

	return True;
}
Пример #2
0
/* Send persistent bitmap cache enumeration PDU's */
static void
rdp_enum_bmpcache2(void)
{
    STREAM s;
    HASH_KEY keylist[BMPCACHE2_NUM_PSTCELLS];
    uint32 num_keys, offset, count, flags;

    offset = 0;
    num_keys = pstcache_enumerate(2, keylist);

    while (offset < num_keys)
    {
        count = MIN(num_keys - offset, 169);

        s = rdp_init_data(24 + count * sizeof(HASH_KEY));

        flags = 0;
        if (offset == 0)
            flags |= PDU_FLAG_FIRST;
        if (num_keys - offset <= 169)
            flags |= PDU_FLAG_LAST;

        /* header */
        out_uint32_le(s, 0);
        out_uint16_le(s, count);
        out_uint16_le(s, 0);
        out_uint16_le(s, 0);
        out_uint16_le(s, 0);
        out_uint16_le(s, 0);
        out_uint16_le(s, num_keys);
        out_uint32_le(s, 0);
        out_uint32_le(s, flags);

        /* list */
        out_uint8a(s, keylist[offset], count * sizeof(HASH_KEY));

        s_mark_end(s);
        rdp_send_data(s, 0x2b);

        offset += 169;
    }
}