X-Git-Url: https://git.sesse.net/?p=rdpsrv;a=blobdiff_plain;f=rdpsrv.c;h=e001cd24cd6e99672738ee2248a3ccf3ab544e2e;hp=5b1603d12f1919f0575a094b4523ba9dfd07ca67;hb=279bf2004603e87c531ac696ee7f88f9d4b8a754;hpb=46f3372353ccdd654ef45f0b73128c16fb057e58 diff --git a/rdpsrv.c b/rdpsrv.c index 5b1603d..e001cd2 100644 --- a/rdpsrv.c +++ b/rdpsrv.c @@ -6,26 +6,20 @@ #include #include +#include "rdesktop.h" + const int tcp_port_rdp = 3389; int create_server_socket(); -int serve_client(int sock); +int serve_client(); int main() { int server_sock = create_server_socket(); for ( ;; ) { - struct sockaddr_in sin; - socklen_t len; - int sock = accept(server_sock, (struct sockaddr *)&sin, &len); - - if (sock == -1) { - perror("accept()"); - exit(1); - } - - serve_client(sock); - - close(sock); + iso_recv_connect(server_sock); + printf("Got connection.\n"); + serve_client(); + printf("Client closed.\n"); } } @@ -65,12 +59,33 @@ int create_server_socket() } -int serve_client(int sock) +int serve_client() { + if (!mcs_recv_connect_initial()) + error("MCS_CONNECT_INITIAL recv failed"); + mcs_send_connect_response(); + for ( ;; ) { - unsigned char buf[4096]; - - /* receive ISO packets */ - + 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; + } + + 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"); + break; + default: + printf("Unknown data PDU type %u\n", data_pdu_type); + }; + } } }