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");