386 |
rdp_enum_bmpcache2(void) |
rdp_enum_bmpcache2(void) |
387 |
{ |
{ |
388 |
STREAM s; |
STREAM s; |
389 |
uint8 idlist[BMPCACHE2_NUM_PSTCELLS * sizeof(BITMAP_ID)]; |
HASH_KEY keylist[BMPCACHE2_NUM_PSTCELLS]; |
390 |
uint32 nids, offset, count, flags; |
uint32 num_keys, offset, count, flags; |
391 |
|
|
392 |
offset = 0; |
offset = 0; |
393 |
nids = pstcache_enumerate(2, idlist); |
num_keys = pstcache_enumerate(2, keylist); |
394 |
|
|
395 |
while (offset < nids) |
while (offset < num_keys) |
396 |
{ |
{ |
397 |
count = MIN(nids - offset, 169); |
count = MIN(num_keys - offset, 169); |
398 |
|
|
399 |
s = rdp_init_data(24 + count * sizeof(BITMAP_ID)); |
s = rdp_init_data(24 + count * sizeof(HASH_KEY)); |
400 |
|
|
401 |
flags = 0; |
flags = 0; |
402 |
if (offset == 0) |
if (offset == 0) |
403 |
flags |= PDU_FLAG_FIRST; |
flags |= PDU_FLAG_FIRST; |
404 |
if (nids - offset <= 169) |
if (num_keys - offset <= 169) |
405 |
flags |= PDU_FLAG_LAST; |
flags |= PDU_FLAG_LAST; |
406 |
|
|
407 |
/* header */ |
/* header */ |
411 |
out_uint16_le(s, 0); |
out_uint16_le(s, 0); |
412 |
out_uint16_le(s, 0); |
out_uint16_le(s, 0); |
413 |
out_uint16_le(s, 0); |
out_uint16_le(s, 0); |
414 |
out_uint16_le(s, nids); |
out_uint16_le(s, num_keys); |
415 |
out_uint32_le(s, 0); |
out_uint32_le(s, 0); |
416 |
out_uint32_le(s, flags); |
out_uint32_le(s, flags); |
417 |
|
|
418 |
/* list */ |
/* list */ |
419 |
out_uint8a(s, idlist + offset * sizeof(BITMAP_ID), count * sizeof(BITMAP_ID)); |
out_uint8a(s, keylist[offset], count * sizeof(HASH_KEY)); |
420 |
|
|
421 |
s_mark_end(s); |
s_mark_end(s); |
422 |
rdp_send_data(s, 0x2b); |
rdp_send_data(s, 0x2b); |