/[rdesktop]/sourceforge.net/branches/seamlessrdp-branch/rdesktop/rdesktop.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/branches/seamlessrdp-branch/rdesktop/rdesktop.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 30 by matty, Fri Sep 14 13:51:38 2001 UTC revision 103 by matthewc, Thu Aug 29 14:18:24 2002 UTC
# Line 2  Line 2 
2     rdesktop: A Remote Desktop Protocol client.     rdesktop: A Remote Desktop Protocol client.
3     Entrypoint and utility functions     Entrypoint and utility functions
4     Copyright (C) Matthew Chapman 1999-2001     Copyright (C) Matthew Chapman 1999-2001
5      
6     This program is free software; you can redistribute it and/or modify     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.     (at your option) any later version.
10      
11     This program is distributed in the hope that it will be useful,     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.     GNU General Public License for more details.
15      
16     You should have received a copy of the GNU General Public License     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software     along with this program; if not, write to the Free Software
18     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# Line 23  Line 23 
23  #include <unistd.h>             /* read close getuid getgid getpid getppid gethostname */  #include <unistd.h>             /* read close getuid getgid getpid getppid gethostname */
24  #include <fcntl.h>              /* open */  #include <fcntl.h>              /* open */
25  #include <pwd.h>                /* getpwuid */  #include <pwd.h>                /* getpwuid */
26    #include <limits.h>             /* PATH_MAX */
27  #include <sys/stat.h>           /* stat */  #include <sys/stat.h>           /* stat */
28  #include <sys/time.h>           /* gettimeofday */  #include <sys/time.h>           /* gettimeofday */
29  #include <sys/times.h>          /* times */  #include <sys/times.h>          /* times */
30  #include "rdesktop.h"  #include "rdesktop.h"
31    
32    char title[32];
33  char username[16];  char username[16];
34  char hostname[16];  char hostname[16];
35    char keymapname[16];
36    int keylayout = 0x409;          /* Defaults to US keyboard layout */
37  int width;  int width;
38  int height;  int height;
39  int keylayout = 0x409;  int tcp_port_rdp = TCP_PORT_RDP;
40  BOOL bitmap_compression = True;  BOOL bitmap_compression = True;
41  BOOL sendmotion = True;  BOOL sendmotion = True;
42  BOOL orders = True;  BOOL orders = True;
# Line 40  BOOL licence = True; Line 44  BOOL licence = True;
44  BOOL encryption = True;  BOOL encryption = True;
45  BOOL desktop_save = True;  BOOL desktop_save = True;
46  BOOL fullscreen = False;  BOOL fullscreen = False;
47    BOOL grab_keyboard = True;
48    
49  /* Display usage information */  /* Display usage information */
50  static void  static void
# Line 51  usage(char *program) Line 56  usage(char *program)
56          printf("   -s: shell\n");          printf("   -s: shell\n");
57          printf("   -c: working directory\n");          printf("   -c: working directory\n");
58          printf("   -p: password (autologon)\n");          printf("   -p: password (autologon)\n");
59            printf("   -P: askpass-program (autologon)\n");
60          printf("   -n: client hostname\n");          printf("   -n: client hostname\n");
61          printf("   -k: keyboard layout (hex)\n");          printf("   -k: keyboard layout on terminal server (us,sv,gr etc.)\n");
62          printf("   -g: desktop geometry (WxH)\n");          printf("   -g: desktop geometry (WxH)\n");
63          printf("   -f: full-screen mode\n");          printf("   -f: full-screen mode\n");
64          printf("   -b: force bitmap updates\n");          printf("   -b: force bitmap updates\n");
65          printf("   -e: disable encryption (French TS)\n");          printf("   -e: disable encryption (French TS)\n");
66          printf("   -m: do not send motion events\n");          printf("   -m: do not send motion events\n");
67          printf("   -l: do not request licence\n\n");          printf("   -l: do not request licence\n");
68            printf("   -t: rdp tcp port\n");
69            printf("   -K: keep window manager key bindings\n");
70  }  }
71    
72  /* Client program */  /* Client program */
# Line 68  main(int argc, char *argv[]) Line 76  main(int argc, char *argv[])
76          char fullhostname[64];          char fullhostname[64];
77          char domain[16];          char domain[16];
78          char password[16];          char password[16];
79            char *askpass_result;
80          char shell[32];          char shell[32];
81          char directory[32];          char directory[32];
         char title[32];  
82          struct passwd *pw;          struct passwd *pw;
83          char *server, *p;          char *server, *p;
84          uint32 flags;          uint32 flags;
# Line 82  main(int argc, char *argv[]) Line 90  main(int argc, char *argv[])
90    
91          flags = RDP_LOGON_NORMAL;          flags = RDP_LOGON_NORMAL;
92          domain[0] = password[0] = shell[0] = directory[0] = 0;          domain[0] = password[0] = shell[0] = directory[0] = 0;
93            strcpy(keymapname, "us");
94    
95          while ((c = getopt(argc, argv, "u:d:s:c:p:n:k:g:fbemlh?")) != -1)          while ((c = getopt(argc, argv, "u:d:s:c:p:P:n:k:g:t:fbemlKh?")) != -1)
96          {          {
97                  switch (c)                  switch (c)
98                  {                  {
# Line 108  main(int argc, char *argv[]) Line 117  main(int argc, char *argv[])
117                                  flags |= RDP_LOGON_AUTO;                                  flags |= RDP_LOGON_AUTO;
118                                  break;                                  break;
119    
120                            case 'P':
121                                    askpass_result = askpass(optarg, "Enter password");
122                                    if (askpass_result == NULL)
123                                            exit(1);
124    
125                                    STRNCPY(password, askpass_result, sizeof(password));
126                                    free(askpass_result);
127                                    flags |= RDP_LOGON_AUTO;
128                                    break;
129    
130                          case 'n':                          case 'n':
131                                  STRNCPY(hostname, optarg, sizeof(hostname));                                  STRNCPY(hostname, optarg, sizeof(hostname));
132                                  break;                                  break;
133    
134                          case 'k':                          case 'k':
135                                  keylayout = strtol(optarg, NULL, 16);                                  STRNCPY(keymapname, optarg, sizeof(keymapname));
                                 if (keylayout == 0)  
                                 {  
                                         error("invalid keyboard layout\n");  
                                         return 1;  
                                 }  
136                                  break;                                  break;
137    
138                          case 'g':                          case 'g':
139                                  width = strtol(optarg, &p, 10);                                  width = strtol(optarg, &p, 10);
140                                  if (*p == 'x')                                  if (*p == 'x')
141                                          height = strtol(p+1, NULL, 10);                                          height = strtol(p + 1, NULL, 10);
142    
143                                  if ((width == 0) || (height == 0))                                  if ((width == 0) || (height == 0))
144                                  {                                  {
# Line 153  main(int argc, char *argv[]) Line 167  main(int argc, char *argv[])
167                                  licence = False;                                  licence = False;
168                                  break;                                  break;
169    
170                            case 't':
171                                    tcp_port_rdp = strtol(optarg, NULL, 10);
172                                    break;
173    
174                            case 'K':
175                                    grab_keyboard = False;
176                                    break;
177    
178                          case 'h':                          case 'h':
179                          case '?':                          case '?':
180                          default:                          default:
# Line 212  main(int argc, char *argv[]) Line 234  main(int argc, char *argv[])
234                  width = 800;                  width = 800;
235                  height = 600;                  height = 600;
236          }          }
237            else
238            {
239                    /* make sure width is a multiple of 4 */
240                    width = (width + 3) & ~3;
241            }
242    
243          strcpy(title, "rdesktop - ");          strcpy(title, "rdesktop - ");
244          strncat(title, server, sizeof(title) - sizeof("rdesktop - "));          strncat(title, server, sizeof(title) - sizeof("rdesktop - "));
245    
246          if (ui_create_window(title))          xkeymap_init1();
247          {          if (!ui_init())
248                  if (!rdp_connect(server, flags, domain, password, shell,                  return 1;
249                                   directory))  
250                          return 1;          if (!rdp_connect(server, flags, domain, password, shell, directory))
251                    return 1;
252    
253                  printf("Connection successful.\n");          printf("Connection successful.\n");
254    
255            if (ui_create_window())
256            {
257                  rdp_main_loop();                  rdp_main_loop();
258                  ui_destroy_window();                  ui_destroy_window();
259          }          }
260    
261            printf("Disconnecting...\n");
262          rdp_disconnect();          rdp_disconnect();
263          return 0;          return 0;
264  }  }
265    
266  /* Generate a 32-byte random for the secure transport code. */  /* Generate a 32-byte random for the secure transport code. */
267  void  void
268  generate_random(uint8 *random)  generate_random(uint8 * random)
269  {  {
270          struct stat st;          struct stat st;
271          struct tms tmsbuf;          struct tms tmsbuf;
# Line 338  hexdump(unsigned char *p, unsigned int l Line 370  hexdump(unsigned char *p, unsigned int l
370                          printf("%02x ", line[i]);                          printf("%02x ", line[i]);
371    
372                  for (; i < 16; i++)                  for (; i < 16; i++)
373                                  printf("   ");                          printf("   ");
374    
375                  for (i = 0; i < thisline; i++)                  for (i = 0; i < thisline; i++)
376                          printf("%c",                          printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
                                (line[i] >= 0x20  
                                 && line[i] < 0x7f) ? line[i] : '.');  
377    
378                  printf("\n");                  printf("\n");
379                  offset += thisline;                  offset += thisline;
380                  line += thisline;                  line += thisline;
381          }          }
382  }  }
383    
384    int
385    load_licence(unsigned char **data)
386    {
387            char path[PATH_MAX];
388            char *home;
389            struct stat st;
390            int fd;
391    
392            home = getenv("HOME");
393            if (home == NULL)
394                    return -1;
395    
396            STRNCPY(path, home, sizeof(path));
397            strncat(path, "/.rdesktop/licence", sizeof(path) - strlen(path) - 1);
398    
399            fd = open(path, O_RDONLY);
400            if (fd == -1)
401                    return -1;
402    
403            if (fstat(fd, &st))
404                    return -1;
405    
406            *data = xmalloc(st.st_size);
407            return read(fd, *data, st.st_size);
408    }
409    
410    void
411    save_licence(unsigned char *data, int length)
412    {
413            char path[PATH_MAX];
414            char *home;
415            int fd;
416    
417            home = getenv("HOME");
418            if (home == NULL)
419                    return;
420    
421            STRNCPY(path, home, sizeof(path));
422            strncat(path, "/.rdesktop", sizeof(path) - strlen(path) - 1);
423            mkdir(path, 0700);
424    
425            strncat(path, "/licence", sizeof(path) - strlen(path) - 1);
426    
427            fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0600);
428            if (fd == -1)
429            {
430                    perror("open");
431                    return;
432            }
433    
434            write(fd, data, length);
435            close(fd);
436    }

Legend:
Removed from v.30  
changed lines
  Added in v.103

  ViewVC Help
Powered by ViewVC 1.1.26