/[rdesktop]/sourceforge.net/trunk/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/trunk/rdesktop/rdesktop.c

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

revision 33 by matty, Sat Sep 15 12:34:34 2001 UTC revision 107 by astrand, Sun Sep 1 11:27:58 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            printf("   -w: window title\n");
71  }  }
72    
73  /* Client program */  /* Client program */
# Line 68  main(int argc, char *argv[]) Line 77  main(int argc, char *argv[])
77          char fullhostname[64];          char fullhostname[64];
78          char domain[16];          char domain[16];
79          char password[16];          char password[16];
80            char *askpass_result;
81          char shell[32];          char shell[32];
82          char directory[32];          char directory[32];
         char title[32];  
83          struct passwd *pw;          struct passwd *pw;
84          char *server, *p;          char *server, *p;
85          uint32 flags;          uint32 flags;
# Line 82  main(int argc, char *argv[]) Line 91  main(int argc, char *argv[])
91    
92          flags = RDP_LOGON_NORMAL;          flags = RDP_LOGON_NORMAL;
93          domain[0] = password[0] = shell[0] = directory[0] = 0;          domain[0] = password[0] = shell[0] = directory[0] = 0;
94            strcpy(keymapname, "us");
95    
96          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:fbemlKw:h?")) != -1)
97          {          {
98                  switch (c)                  switch (c)
99                  {                  {
# Line 108  main(int argc, char *argv[]) Line 118  main(int argc, char *argv[])
118                                  flags |= RDP_LOGON_AUTO;                                  flags |= RDP_LOGON_AUTO;
119                                  break;                                  break;
120    
121                            case 'P':
122                                    askpass_result = askpass(optarg, "Enter password");
123                                    if (askpass_result == NULL)
124                                            exit(1);
125    
126                                    STRNCPY(password, askpass_result, sizeof(password));
127                                    free(askpass_result);
128                                    flags |= RDP_LOGON_AUTO;
129                                    break;
130    
131                          case 'n':                          case 'n':
132                                  STRNCPY(hostname, optarg, sizeof(hostname));                                  STRNCPY(hostname, optarg, sizeof(hostname));
133                                  break;                                  break;
134    
135                          case 'k':                          case 'k':
136                                  keylayout = strtol(optarg, NULL, 16);                                  STRNCPY(keymapname, optarg, sizeof(keymapname));
                                 if (keylayout == 0)  
                                 {  
                                         error("invalid keyboard layout\n");  
                                         return 1;  
                                 }  
137                                  break;                                  break;
138    
139                          case 'g':                          case 'g':
140                                  width = strtol(optarg, &p, 10);                                  width = strtol(optarg, &p, 10);
141                                  if (*p == 'x')                                  if (*p == 'x')
142                                          height = strtol(p+1, NULL, 10);                                          height = strtol(p + 1, NULL, 10);
143    
144                                  if ((width == 0) || (height == 0))                                  if ((width == 0) || (height == 0))
145                                  {                                  {
# Line 153  main(int argc, char *argv[]) Line 168  main(int argc, char *argv[])
168                                  licence = False;                                  licence = False;
169                                  break;                                  break;
170    
171                            case 't':
172                                    tcp_port_rdp = strtol(optarg, NULL, 10);
173                                    break;
174    
175                            case 'K':
176                                    grab_keyboard = False;
177                                    break;
178    
179                            case 'w':
180                                    strncpy(title, optarg, sizeof(title));
181                                    break;
182    
183                          case 'h':                          case 'h':
184                          case '?':                          case '?':
185                          default:                          default:
# Line 212  main(int argc, char *argv[]) Line 239  main(int argc, char *argv[])
239                  width = 800;                  width = 800;
240                  height = 600;                  height = 600;
241          }          }
242            else
243            {
244                    /* make sure width is a multiple of 4 */
245                    width = (width + 3) & ~3;
246            }
247    
248          strcpy(title, "rdesktop - ");          if (!strlen(title))
         strncat(title, server, sizeof(title) - sizeof("rdesktop - "));  
   
         if (ui_create_window(title))  
249          {          {
250                  if (!rdp_connect(server, flags, domain, password, shell,                  strcpy(title, "rdesktop - ");
251                                   directory))                  strncat(title, server, sizeof(title) - sizeof("rdesktop - "));
252                          return 1;          }
253    
254            xkeymap_init1();
255            if (!ui_init())
256                    return 1;
257    
258            if (!rdp_connect(server, flags, domain, password, shell, directory))
259                    return 1;
260    
261                  printf("Connection successful.\n");          printf("Connection successful.\n");
262    
263            if (ui_create_window())
264            {
265                  rdp_main_loop();                  rdp_main_loop();
                 printf("Disconnecting...\n");  
266                  ui_destroy_window();                  ui_destroy_window();
267          }          }
268    
269            printf("Disconnecting...\n");
270          rdp_disconnect();          rdp_disconnect();
271          return 0;          return 0;
272  }  }
273    
274  /* Generate a 32-byte random for the secure transport code. */  /* Generate a 32-byte random for the secure transport code. */
275  void  void
276  generate_random(uint8 *random)  generate_random(uint8 * random)
277  {  {
278          struct stat st;          struct stat st;
279          struct tms tmsbuf;          struct tms tmsbuf;
# Line 339  hexdump(unsigned char *p, unsigned int l Line 378  hexdump(unsigned char *p, unsigned int l
378                          printf("%02x ", line[i]);                          printf("%02x ", line[i]);
379    
380                  for (; i < 16; i++)                  for (; i < 16; i++)
381                                  printf("   ");                          printf("   ");
382    
383                  for (i = 0; i < thisline; i++)                  for (i = 0; i < thisline; i++)
384                          printf("%c",                          printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
                                (line[i] >= 0x20  
                                 && line[i] < 0x7f) ? line[i] : '.');  
385    
386                  printf("\n");                  printf("\n");
387                  offset += thisline;                  offset += thisline;
388                  line += thisline;                  line += thisline;
389          }          }
390  }  }
391    
392    int
393    load_licence(unsigned char **data)
394    {
395            char path[PATH_MAX];
396            char *home;
397            struct stat st;
398            int fd;
399    
400            home = getenv("HOME");
401            if (home == NULL)
402                    return -1;
403    
404            STRNCPY(path, home, sizeof(path));
405            strncat(path, "/.rdesktop/licence", sizeof(path) - strlen(path) - 1);
406    
407            fd = open(path, O_RDONLY);
408            if (fd == -1)
409                    return -1;
410    
411            if (fstat(fd, &st))
412                    return -1;
413    
414            *data = xmalloc(st.st_size);
415            return read(fd, *data, st.st_size);
416    }
417    
418    void
419    save_licence(unsigned char *data, int length)
420    {
421            char path[PATH_MAX];
422            char *home;
423            int fd;
424    
425            home = getenv("HOME");
426            if (home == NULL)
427                    return;
428    
429            STRNCPY(path, home, sizeof(path));
430            strncat(path, "/.rdesktop", sizeof(path) - strlen(path) - 1);
431            mkdir(path, 0700);
432    
433            strncat(path, "/licence", sizeof(path) - strlen(path) - 1);
434    
435            fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0600);
436            if (fd == -1)
437            {
438                    perror("open");
439                    return;
440            }
441    
442            write(fd, data, length);
443            close(fd);
444    }

Legend:
Removed from v.33  
changed lines
  Added in v.107

  ViewVC Help
Powered by ViewVC 1.1.26