X-Git-Url: https://git.sesse.net/?p=rdpsrv;a=blobdiff_plain;f=rdpsrv.c;h=b1b5ea78663c4e7ad06e87a9da73e1ec91d5e573;hp=43bf2a42d449faf1d11d2149355d92356e4134e6;hb=c4492bda58aeb19b75e7188014dfcadc7cc56a9d;hpb=8620fedb9b11c67f5eab4b07cbac9dce189f5858 diff --git a/rdpsrv.c b/rdpsrv.c index 43bf2a4..b1b5ea7 100644 --- a/rdpsrv.c +++ b/rdpsrv.c @@ -137,10 +137,33 @@ int vnc_init() printf("Server is %u x %u\n", ntohs(si.width), ntohs(si.height)); - if (read(vnc_sock, buf, si.name_len) != si.name_len) - error("short read on server name"); + if (read(vnc_sock, buf, ntohs(si.name_len)) != ntohs(si.name_len)) + error("short read on server name\n"); - printf("Server name is '%*s'\n", si.name_len, buf); + printf("Server name is '%*s'\n", ntohs(si.name_len), buf); + + // we can only accept raw encoding + buf[0] = 2; // message type + buf[1] = 0; // padding + buf[2] = 0; // number of encodings + buf[3] = 1; + buf[4] = 0; // raw encoding + + write(vnc_sock, buf, 5); + + // request the entire framebuffer + buf[0] = 3; // message type + buf[1] = 0; // incremental + buf[2] = 0; // xpos + buf[3] = 0; + buf[4] = 0; // ypos + buf[5] = 0; + buf[6] = 640 >> 8; // width + buf[7] = 640 % 0xff; + buf[8] = 480 >> 8; // height + buf[9] = 480 % 0xff; + + write(vnc_sock, buf, 10); printf("Connected to VNC!\n");