X-Git-Url: https://git.sesse.net/?p=rdpsrv;a=blobdiff_plain;f=rdpsrv.c;h=9b198ef41d04c489a8d90402c2040b60b77ed897;hp=b1b5ea78663c4e7ad06e87a9da73e1ec91d5e573;hb=cb78b4571e17e9c6c5463f871c69c1fd0603cf60;hpb=c4492bda58aeb19b75e7188014dfcadc7cc56a9d diff --git a/rdpsrv.c b/rdpsrv.c index b1b5ea7..9b198ef 100644 --- a/rdpsrv.c +++ b/rdpsrv.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -182,24 +183,39 @@ int serve_client() uint8 type, data_pdu_type; STREAM s; - while ((s = rdp_recv(&type)) != NULL) { - if (type != RDP_PDU_DATA) { - printf("Unknown RDP packet of type %u\n", type); - continue; + fd_set readfs; + FD_ZERO(&readfs); + FD_SET(tcp_get_socket(), &readfs); + FD_SET(vnc_sock, &readfs); + + select(FD_SETSIZE, &readfs, NULL, NULL, NULL); + + // activity on RDP socket? + if (FD_ISSET(tcp_get_socket(), &readfs)) { + if ((s = rdp_recv(&type)) != NULL) { + if (type != RDP_PDU_DATA) { + printf("Unknown RDP packet of type %u\n", type); + continue; + } + + in_uint8s(s, 8); /* shareid, pad, streamid, length */ + in_uint8(s, data_pdu_type); + in_uint8s(s, 3); /* compress_type, compress_len */ + + switch (data_pdu_type) { + case RDP_DATA_PDU_INPUT: + printf("Input PDU\n"); + handle_input_pdu(s); + break; + default: + printf("Unknown data PDU type %u\n", data_pdu_type); + }; } + } - in_uint8s(s, 8); /* shareid, pad, streamid, length */ - in_uint8(s, data_pdu_type); - in_uint8s(s, 3); /* compress_type, compress_len */ - - switch (data_pdu_type) { - case RDP_DATA_PDU_INPUT: - printf("Input PDU\n"); - handle_input_pdu(s); - break; - default: - printf("Unknown data PDU type %u\n", data_pdu_type); - }; + // activity on VNC socket? + if (FD_ISSET(vnc_sock, &readfs)) { + printf("Activity on VNC socket!\n"); } } }