Even more imports. Link to OpenSSL.
[rdpsrv] / rdpsrv.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <errno.h>
5 #include <sys/socket.h>
6 #include <sys/ioctl.h>
7 #include <arpa/inet.h>
8
9 #include "rdesktop.h"
10
11 const int tcp_port_rdp = 3389;
12 int create_server_socket();
13 int serve_client(int sock);
14
15 int main()
16 {
17         int server_sock = create_server_socket();
18         for ( ;; ) {
19                 struct sockaddr_in sin;
20                 socklen_t len;
21                 int sock = accept(server_sock, (struct sockaddr *)&sin, &len);
22         
23                 if (sock == -1) {
24                         perror("accept()");
25                         exit(1);
26                 }
27
28                 serve_client(sock);
29
30                 close(sock);
31         }
32 }
33
34 int create_server_socket()
35 {
36         int server_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
37         const unsigned int one = 1, zero = 0;
38         struct sockaddr_in addr;
39         int err;
40
41         setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
42         ioctl(server_sock, FIONBIO, &zero);
43
44         addr.sin_family = AF_INET;
45         addr.sin_addr.s_addr = INADDR_ANY;
46         addr.sin_port = htons(tcp_port_rdp);
47
48         do {
49                 err = bind(server_sock, (struct sockaddr *)&addr, sizeof(struct sockaddr));
50
51                 if (err == -1) {
52                         perror("bind()");
53
54                         /* try to recover from recoverable errors... */
55                         if (errno == ENOMEM || errno == EADDRINUSE) {
56                                 puts("Waiting 1 sec before trying again...");
57                                 sleep(1);
58                         } else {
59                                 puts("Giving up.");
60                                 exit(1);
61                         }
62                 }
63         } while (err == -1);
64
65         listen(server_sock, 20);
66         return server_sock;
67 }
68
69
70 int serve_client(int sock)
71 {
72         for ( ;; ) {
73                 unsigned char buf[4096];
74                 short channel;
75                 
76                 /* receive ISO packets */
77                 mcs_recv(&channel);
78         }
79 }