]> git.sesse.net Git - rdpsrv/blobdiff - rdpsrv.c
Barely recognize some RDP data PDUs.
[rdpsrv] / rdpsrv.c
index 5b1603d12f1919f0575a094b4523ba9dfd07ca67..e001cd24cd6e99672738ee2248a3ccf3ab544e2e 100644 (file)
--- a/rdpsrv.c
+++ b/rdpsrv.c
@@ -6,26 +6,20 @@
 #include <sys/ioctl.h>
 #include <arpa/inet.h>
 
+#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);
+                       };
+               }
        }
 }