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

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

revision 522 by matthewc, Wed Oct 29 04:18:00 2003 UTC revision 554 by stargo, Tue Dec 9 09:57:44 2003 UTC
# Line 18  Line 18 
18     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */  */
20    
21    #include <time.h>
22  #include "rdesktop.h"  #include "rdesktop.h"
23    
24  extern uint16 g_mcs_userid;  extern uint16 g_mcs_userid;
# Line 29  extern BOOL g_desktop_save; Line 30  extern BOOL g_desktop_save;
30  extern BOOL g_use_rdp5;  extern BOOL g_use_rdp5;
31  extern uint16 g_server_rdp_version;  extern uint16 g_server_rdp_version;
32  extern int g_server_bpp;  extern int g_server_bpp;
33    extern time_t timezone;
34    
35  uint8 *g_next_packet;  uint8 *g_next_packet;
36  uint32 g_rdp_shareid;  uint32 g_rdp_shareid;
# Line 146  rdp_send_logon_info(uint32 flags, char * Line 148  rdp_send_logon_info(uint32 flags, char *
148          int packetlen = 0;          int packetlen = 0;
149          uint32 sec_flags = g_encryption ? (SEC_LOGON_INFO | SEC_ENCRYPT) : SEC_LOGON_INFO;          uint32 sec_flags = g_encryption ? (SEC_LOGON_INFO | SEC_ENCRYPT) : SEC_LOGON_INFO;
150          STREAM s;          STREAM s;
151            tzset();
152    
153          if (!g_use_rdp5 || 1 == g_server_rdp_version)          if (!g_use_rdp5 || 1 == g_server_rdp_version)
154          {          {
# Line 171  rdp_send_logon_info(uint32 flags, char * Line 174  rdp_send_logon_info(uint32 flags, char *
174          {          {
175                  flags |= RDP_LOGON_BLOB;                  flags |= RDP_LOGON_BLOB;
176                  DEBUG_RDP5(("Sending RDP5-style Logon packet\n"));                  DEBUG_RDP5(("Sending RDP5-style Logon packet\n"));
177                  packetlen = 4 + // Unknown uint32                  packetlen = 4 + /* Unknown uint32 */
178                          4 +     // flags                          4 +     /* flags */
179                          2 +     // len_domain                          2 +     /* len_domain */
180                          2 +     // len_user                          2 +     /* len_user */
181                          (flags & RDP_LOGON_AUTO ? 2 : 0) +      // len_password                          (flags & RDP_LOGON_AUTO ? 2 : 0) +      /* len_password */
182                          (flags & RDP_LOGON_BLOB ? 2 : 0) +      // Length of BLOB                          (flags & RDP_LOGON_BLOB ? 2 : 0) +      /* Length of BLOB */
183                          2 +     // len_program                          2 +     /* len_program */
184                          2 +     // len_directory                          2 +     /* len_directory */
185                          (0 < len_domain ? len_domain : 2) +     // domain                          (0 < len_domain ? len_domain : 2) +     /* domain */
186                          len_user + (flags & RDP_LOGON_AUTO ? len_password : 0) + 0 +    // We have no 512 byte BLOB. Perhaps we must?                          len_user + (flags & RDP_LOGON_AUTO ? len_password : 0) + 0 +    /* We have no 512 byte BLOB. Perhaps we must? */
187                          (flags & RDP_LOGON_BLOB && !(flags & RDP_LOGON_AUTO) ? 2 : 0) + // After the BLOB is a unknown int16. If there is a BLOB, that is.                          (flags & RDP_LOGON_BLOB && !(flags & RDP_LOGON_AUTO) ? 2 : 0) + /* After the BLOB is a unknown int16. If there is a BLOB, that is. */
188                          (0 < len_program ? len_program : 2) + (0 < len_directory ? len_directory : 2) + 2 +     // Unknown (2)                          (0 < len_program ? len_program : 2) + (0 < len_directory ? len_directory : 2) + 2 +     /* Unknown (2) */
189                          2 +     // Client ip length                          2 +     /* Client ip length */
190                          len_ip +        // Client ip                          len_ip +        /* Client ip */
191                          2 +     // DLL string length                          2 +     /* DLL string length */
192                          len_dll +       // DLL string                          len_dll +       /* DLL string */
193                          2 +     // Unknown                          2 +     /* Unknown */
194                          2 +     // Unknown                          2 +     /* Unknown */
195                          64 +    // Time zone #0                          64 +    /* Time zone #0 */
196                          2 +     // Unknown                          2 +     /* Unknown */
197                          64 +    // Time zone #1                          64 +    /* Time zone #1 */
198                          32;     // Unknown                          32;     /* Unknown */
199    
200                  s = sec_init(sec_flags, packetlen);                  s = sec_init(sec_flags, packetlen);
201                  DEBUG_RDP5(("Called sec_init with packetlen %d\n", packetlen));                  DEBUG_RDP5(("Called sec_init with packetlen %d\n", packetlen));
202    
203                  out_uint32(s, 0);       // Unknown                  out_uint32(s, 0);       /* Unknown */
204                  out_uint32_le(s, flags);                  out_uint32_le(s, flags);
205                  out_uint16_le(s, len_domain);                  out_uint16_le(s, len_domain);
206                  out_uint16_le(s, len_user);                  out_uint16_le(s, len_user);
# Line 243  rdp_send_logon_info(uint32 flags, char * Line 246  rdp_send_logon_info(uint32 flags, char *
246                          out_uint16_le(s, 0);                          out_uint16_le(s, 0);
247                  }                  }
248                  out_uint16_le(s, 2);                  out_uint16_le(s, 2);
249                  out_uint16_le(s, len_ip + 2);   // Length of client ip                  out_uint16_le(s, len_ip + 2);   /* Length of client ip */
250                  rdp_out_unistr(s, "127.0.0.1", len_ip);                  rdp_out_unistr(s, "127.0.0.1", len_ip);
251                  out_uint16_le(s, len_dll + 2);                  out_uint16_le(s, len_dll + 2);
252                  rdp_out_unistr(s, "C:\\WINNT\\System32\\mstscax.dll", len_dll);                  rdp_out_unistr(s, "C:\\WINNT\\System32\\mstscax.dll", len_dll);
253                  out_uint16_le(s, 0xffc4);                  out_uint16_le(s, timezone/60);
254                  out_uint16_le(s, 0xffff);                  out_uint16_le(s, 0x0000);
255                  rdp_out_unistr(s, "GTB, normaltid", 2 * strlen("GTB, normaltid"));                  rdp_out_unistr(s, "GTB, normaltid", 2 * strlen("GTB, normaltid"));
256                  out_uint8s(s, 62 - 2 * strlen("GTB, normaltid"));                  out_uint8s(s, 62 - 2 * strlen("GTB, normaltid"));
257    
# Line 600  process_demand_active(STREAM s) Line 603  process_demand_active(STREAM s)
603          rdp_recv(&type);        /* RDP_PDU_SYNCHRONIZE */          rdp_recv(&type);        /* RDP_PDU_SYNCHRONIZE */
604          rdp_recv(&type);        /* RDP_CTL_COOPERATE */          rdp_recv(&type);        /* RDP_CTL_COOPERATE */
605          rdp_recv(&type);        /* RDP_CTL_GRANT_CONTROL */          rdp_recv(&type);        /* RDP_CTL_GRANT_CONTROL */
606          rdp_send_input(0, RDP_INPUT_SYNCHRONIZE, 0, 0, 0);          rdp_send_input(0, RDP_INPUT_SYNCHRONIZE, 0, ui_get_numlock_state(read_keyboard_state()), 0);
607          rdp_send_fonts(1);          rdp_send_fonts(1);
608          rdp_send_fonts(2);          rdp_send_fonts(2);
609          rdp_recv(&type);        /* RDP_PDU_UNKNOWN 0x28 */          rdp_recv(&type);        /* RDP_PDU_UNKNOWN 0x28 */
# Line 725  process_bitmap_updates(STREAM s) Line 728  process_bitmap_updates(STREAM s)
728                         left, top, right, bottom, width, height, Bpp, compress));                         left, top, right, bottom, width, height, Bpp, compress));
729    
730                  /* Server may limit bpp - this is how we find out */                  /* Server may limit bpp - this is how we find out */
731                  if (g_server_bpp != bpp) {                  if (g_server_bpp != bpp)
732                    {
733                          warning("Server limited colour depth to %d bits\n", bpp);                          warning("Server limited colour depth to %d bits\n", bpp);
734                          g_server_bpp = bpp;                          g_server_bpp = bpp;
735                  }                  }

Legend:
Removed from v.522  
changed lines
  Added in v.554

  ViewVC Help
Powered by ViewVC 1.1.26