}
/* Initialise an RDP data packet */
-static STREAM
+STREAM
rdp_init_data(int maxlen)
{
STREAM s;
}
/* Send an RDP data packet */
-static void
+void
rdp_send_data(STREAM s, uint8 data_pdu_type)
{
uint16 length;
s->p += len;
}
+/* Input a string in Unicode (uuuuuuugly, use iconv later) */
+void
+rdp_in_unistr(STREAM s, char *string, int len)
+{
+ int i = 0, j = 0;
+ len += 2;
+
+ while (i < len)
+ {
+ string[j++] = s->p[i];
+ i += 2;
+ }
+
+ s->p += len;
+}
+
+void rdp_send_bitmap_update(void)
+{
+ STREAM s;
+
+ s = rdp_init_data(11*2 + 2*2*3);
+ out_uint16_le(s, RDP_UPDATE_BITMAP);
+ out_uint16_le(s, 1); // one update
+ out_uint16_le(s, 1); // left, top, right, bottom
+ out_uint16_le(s, 2);
+ out_uint16_le(s, 3);
+ out_uint16_le(s, 4);
+ out_uint16_le(s, 2); // width, height
+ out_uint16_le(s, 2);
+ out_uint16_le(s, 24); // bpp
+ out_uint16_le(s, 0); // no compression
+ out_uint16_le(s, 2*2*3); // bufsize
+
+ out_uint8(s, 255);
+ out_uint8(s, 0);
+ out_uint8(s, 0);
+
+ out_uint8(s, 0);
+ out_uint8(s, 255);
+ out_uint8(s, 0);
+
+ out_uint8(s, 0);
+ out_uint8(s, 0);
+ out_uint8(s, 255);
+
+ out_uint8(s, 255);
+ out_uint8(s, 255);
+ out_uint8(s, 255);
+
+ s_mark_end(s);
+ rdp_send_data(s, RDP_DATA_PDU_UPDATE);
+}
+
+
+void
+rdp_get_logon_info(STREAM s)
+{
+ uint32 flags;
+ int len_domain, len_user, len_password, len_program, len_directory;
+ char domain[256], user[256], password[256], program[256], directory[256]; // FIXME
+
+ in_uint32_le(s, flags); // unknown
+ in_uint32_le(s, flags);
+
+ if (flags & RDP_LOGON_BLOB)
+ error("got RDP5-style logon packet, can't handle this yet");
+
+ printf("logon flags: %x\n", flags);
+
+ in_uint16_le(s, len_domain);
+ in_uint16_le(s, len_user);
+ in_uint16_le(s, len_password);
+ in_uint16_le(s, len_program);
+ in_uint16_le(s, len_directory);
+ rdp_in_unistr(s, domain, len_domain);
+ rdp_in_unistr(s, user, len_user);
+ rdp_in_unistr(s, password, len_password);
+ rdp_in_unistr(s, program, len_program);
+ rdp_in_unistr(s, directory, len_directory);
+
+ printf("domain='%s'\n", domain);
+ printf("user='%s'\n", user);
+ printf("password='%s'\n", password);
+ printf("program='%s'\n", program);
+ printf("directory='%s'\n", directory);
+
+ if (!s_check_end(s))
+ error("Unknown data at end of logon packet!");
+}
/* Send a control PDU */
static void