#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");
}
}
}
-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);
+ };
+
+// rdp_send_bitmap_update();
+ }
}
}