/[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 53 by matthewc, Tue May 28 11:48:55 2002 UTC revision 159 by matthewc, Sun Sep 15 12:36:55 2002 UTC
# Line 1  Line 1 
1  /*  /*
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-2002
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 29  Line 29 
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];  char keymapname[16];
36  int keylayout;  int keylayout = 0x409;          /* Defaults to US keyboard layout */
37  int width;  int width;
38  int height;  int height;
39    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 42  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
51  usage(char *program)  usage(char *program)
52  {  {
53          printf("Usage: %s [options] server\n", program);          fprintf(stderr, "rdesktop: A Remote Desktop Protocol client.\n");
54          printf("   -u: user name\n");          fprintf(stderr, "Version " VERSION ". Copyright (C) 1999-2002 Matt Chapman.\n");
55          printf("   -d: domain\n");          fprintf(stderr, "See http://www.rdesktop.org/ for more information.\n\n");
56          printf("   -s: shell\n");  
57          printf("   -c: working directory\n");          fprintf(stderr, "Usage: %s [options] server\n", program);
58          printf("   -p: password (autologon)\n");          fprintf(stderr, "   -u: user name\n");
59          printf("   -n: client hostname\n");          fprintf(stderr, "   -d: domain\n");
60          printf("   -k: keyboard layout\n");          fprintf(stderr, "   -s: shell\n");
61          printf("   -g: desktop geometry (WxH)\n");          fprintf(stderr, "   -c: working directory\n");
62          printf("   -f: full-screen mode\n");          fprintf(stderr, "   -p: password (autologon)\n");
63          printf("   -b: force bitmap updates\n");          fprintf(stderr, "   -P: askpass-program (autologon)\n");
64          printf("   -e: disable encryption (French TS)\n");          fprintf(stderr, "   -n: client hostname\n");
65          printf("   -m: do not send motion events\n");          fprintf(stderr, "   -k: keyboard layout on terminal server (us,sv,gr etc.)\n");
66          printf("   -l: do not request licence\n\n");          fprintf(stderr, "   -g: desktop geometry (WxH)\n");
67            fprintf(stderr, "   -f: full-screen mode\n");
68            fprintf(stderr, "   -b: force bitmap updates\n");
69            fprintf(stderr, "   -e: disable encryption (French TS)\n");
70            fprintf(stderr, "   -m: do not send motion events\n");
71            fprintf(stderr, "   -l: do not request licence\n");
72            fprintf(stderr, "   -t: rdp tcp port\n");
73            fprintf(stderr, "   -K: keep window manager key bindings\n");
74            fprintf(stderr, "   -w: window title\n");
75  }  }
76    
77  /* Client program */  /* Client program */
# Line 70  main(int argc, char *argv[]) Line 81  main(int argc, char *argv[])
81          char fullhostname[64];          char fullhostname[64];
82          char domain[16];          char domain[16];
83          char password[16];          char password[16];
84            char *askpass_result;
85          char shell[32];          char shell[32];
86          char directory[32];          char directory[32];
         char title[32];  
87          struct passwd *pw;          struct passwd *pw;
88          char *server, *p;          char *server, *p;
89          uint32 flags;          uint32 flags;
90          int c;          int c;
91    
         printf("rdesktop: A Remote Desktop Protocol client.\n");  
         printf("Version " VERSION ". Copyright (C) 1999-2001 Matt Chapman.\n");  
         printf("See http://www.rdesktop.org/ for more information.\n\n");  
   
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");          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 111  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;
# Line 122  main(int argc, char *argv[]) Line 139  main(int argc, char *argv[])
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 151  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 210  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))
249          strncat(title, server, sizeof(title) - sizeof("rdesktop - "));          {
250                    strcpy(title, "rdesktop - ");
251                    strncat(title, server, sizeof(title) - sizeof("rdesktop - "));
252            }
253    
254            if (!ui_init())
255                    return 1;
256    
257          if (!rdp_connect(server, flags, domain, password, shell, directory))          if (!rdp_connect(server, flags, domain, password, shell, directory))
258                  return 1;                  return 1;
259    
260          printf("Connection successful.\n");          DEBUG(("Connection successful.\n"));
261    
262          if (ui_create_window(title))          if (ui_create_window())
263          {          {
264                  rdp_main_loop();                  rdp_main_loop();
265                  ui_destroy_window();                  ui_destroy_window();
266          }          }
267    
268          printf("Disconnecting...\n");          DEBUG(("Disconnecting...\n"));
269          rdp_disconnect();          rdp_disconnect();
270          return 0;          return 0;
271  }  }
272    
273  /* Generate a 32-byte random for the secure transport code. */  /* Generate a 32-byte random for the secure transport code. */
274  void  void
275  generate_random(uint8 *random)  generate_random(uint8 * random)
276  {  {
277          struct stat st;          struct stat st;
278          struct tms tmsbuf;          struct tms tmsbuf;
# Line 328  hexdump(unsigned char *p, unsigned int l Line 368  hexdump(unsigned char *p, unsigned int l
368    
369          while (offset < len)          while (offset < len)
370          {          {
371                  printf("%04x ", offset);                  fprintf(stderr, "%04x ", offset);
372                  thisline = len - offset;                  thisline = len - offset;
373                  if (thisline > 16)                  if (thisline > 16)
374                          thisline = 16;                          thisline = 16;
375    
376                  for (i = 0; i < thisline; i++)                  for (i = 0; i < thisline; i++)
377                          printf("%02x ", line[i]);                          fprintf(stderr, "%02x ", line[i]);
378    
379                  for (; i < 16; i++)                  for (; i < 16; i++)
380                                  printf("   ");                          fprintf(stderr, "   ");
381    
382                  for (i = 0; i < thisline; i++)                  for (i = 0; i < thisline; i++)
383                          printf("%c",                          fprintf(stderr, "%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
                                (line[i] >= 0x20  
                                 && line[i] < 0x7f) ? line[i] : '.');  
384    
385                  printf("\n");                  fprintf(stderr, "\n");
386                  offset += thisline;                  offset += thisline;
387                  line += thisline;                  line += thisline;
388          }          }
389  }  }
390    
391    #ifdef SAVE_LICENCE
392  int  int
393  load_licence(unsigned char **data)  load_licence(unsigned char **data)
394  {  {
# Line 363  load_licence(unsigned char **data) Line 402  load_licence(unsigned char **data)
402                  return -1;                  return -1;
403    
404          STRNCPY(path, home, sizeof(path));          STRNCPY(path, home, sizeof(path));
405          strncat(path, "/.rdesktop/licence", sizeof(path)-strlen(path)-1);          strncat(path, "/.rdesktop/licence", sizeof(path) - strlen(path) - 1);
406    
407          fd = open(path, O_RDONLY);          fd = open(path, O_RDONLY);
408          if (fd == -1)          if (fd == -1)
# Line 388  save_licence(unsigned char *data, int le Line 427  save_licence(unsigned char *data, int le
427                  return;                  return;
428    
429          STRNCPY(path, home, sizeof(path));          STRNCPY(path, home, sizeof(path));
430          strncat(path, "/.rdesktop", sizeof(path)-strlen(path)-1);          strncat(path, "/.rdesktop", sizeof(path) - strlen(path) - 1);
431          mkdir(path, 0700);          mkdir(path, 0700);
432    
433          strncat(path, "/licence", sizeof(path)-strlen(path)-1);          strncat(path, "/licence", sizeof(path) - strlen(path) - 1);
434    
435          fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0600);          fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0600);
436          if (fd == -1)          if (fd == -1)
437          {          {
438                  perror("open");                  perror("open");
# Line 403  save_licence(unsigned char *data, int le Line 442  save_licence(unsigned char *data, int le
442          write(fd, data, length);          write(fd, data, length);
443          close(fd);          close(fd);
444  }  }
445    #endif

Legend:
Removed from v.53  
changed lines
  Added in v.159

  ViewVC Help
Powered by ViewVC 1.1.26