/[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 683 by n-ki, Tue Apr 27 12:55:33 2004 UTC revision 717 by astrand, Thu Jun 17 09:42:58 2004 UTC
# Line 38  extern BOOL g_bitmap_cache; Line 38  extern BOOL g_bitmap_cache;
38  uint8 *g_next_packet;  uint8 *g_next_packet;
39  uint32 g_rdp_shareid;  uint32 g_rdp_shareid;
40    
41  extern RDPCOMP mppc_dict;  extern RDPCOMP g_mppc_dict;
42    
43  #if WITH_DEBUG  #if WITH_DEBUG
44  static uint32 g_packetno;  static uint32 g_packetno;
# Line 176  rdp_send_logon_info(uint32 flags, char * Line 176  rdp_send_logon_info(uint32 flags, char *
176          time_t t = time(NULL);          time_t t = time(NULL);
177          time_t tzone;          time_t tzone;
178    
179    #if 0
180            /* enable rdp compression */
181            /* some problems still exist with rdp5 */
182            flags |= RDP_COMPRESSION;
183    #endif
184    
185          if (!g_use_rdp5 || 1 == g_server_rdp_version)          if (!g_use_rdp5 || 1 == g_server_rdp_version)
186          {          {
187                  DEBUG_RDP5(("Sending RDP4-style Logon packet\n"));                  DEBUG_RDP5(("Sending RDP4-style Logon packet\n"));
188    
 #if 0  
                 /* enable rdp compression */  
                 /* decompression also works with rdp5 */  
                 /* but there are some unknown opcodes */  
                 flags |= RDP_COMPRESSION;  
 #endif  
189                  s = sec_init(sec_flags, 18 + len_domain + len_user + len_password                  s = sec_init(sec_flags, 18 + len_domain + len_user + len_password
190                               + len_program + len_directory + 10);                               + len_program + len_directory + 10);
191    
# Line 651  rdp_process_bitmap_caps(STREAM s) Line 651  rdp_process_bitmap_caps(STREAM s)
651           * The server may limit bpp and change the size of the desktop (for           * The server may limit bpp and change the size of the desktop (for
652           * example when shadowing another session).           * example when shadowing another session).
653           */           */
654          g_server_bpp = bpp;          if (g_server_bpp != bpp)
655          g_width = width;          {
656          g_height = height;                  warning("colour depth changed from %d to %d\n", g_server_bpp, bpp);
657                    g_server_bpp = bpp;
658          ui_resize_window();          }
659            if (g_width != width || g_height != height)
660            {
661                    warning("screen size changed from %dx%d to %dx%d\n", g_width, g_height,
662                            width, height);
663                    g_width = width;
664                    g_height = height;
665                    ui_resize_window();
666            }
667  }  }
668    
669  /* Respond to a demand active PDU */  /* Respond to a demand active PDU */
# Line 916  process_update_pdu(STREAM s) Line 924  process_update_pdu(STREAM s)
924    
925          in_uint16_le(s, update_type);          in_uint16_le(s, update_type);
926    
927            ui_begin_update();
928          switch (update_type)          switch (update_type)
929          {          {
930                  case RDP_UPDATE_ORDERS:                  case RDP_UPDATE_ORDERS:
# Line 939  process_update_pdu(STREAM s) Line 948  process_update_pdu(STREAM s)
948                  default:                  default:
949                          unimpl("update %d\n", update_type);                          unimpl("update %d\n", update_type);
950          }          }
951            ui_end_update();
952  }  }
953    
954  /* Process a disconnect PDU */  /* Process a disconnect PDU */
# Line 962  process_data_pdu(STREAM s, uint32 * ext_ Line 971  process_data_pdu(STREAM s, uint32 * ext_
971    
972          uint32 roff, rlen;          uint32 roff, rlen;
973    
974          struct stream *ns = &(mppc_dict.ns);          struct stream *ns = &(g_mppc_dict.ns);
         uint8 *dict = (mppc_dict.hist);  
975    
976          in_uint8s(s, 6);        /* shareid, pad, streamid */          in_uint8s(s, 6);        /* shareid, pad, streamid */
977          in_uint16(s, len);          in_uint16(s, len);
# Line 978  process_data_pdu(STREAM s, uint32 * ext_ Line 986  process_data_pdu(STREAM s, uint32 * ext_
986                  if (mppc_expand(s->p, clen, ctype, &roff, &rlen) == -1)                  if (mppc_expand(s->p, clen, ctype, &roff, &rlen) == -1)
987                          error("error while decompressing packet\n");                          error("error while decompressing packet\n");
988    
989                  len -= 18;                  //len -= 18;
   
                 /* this should never happen */  
                 if (len != rlen)  
                         error("decompression error len != rlen\n");  
990    
991                  /* allocate memory and copy the uncompressed data into the temporary stream */                  /* allocate memory and copy the uncompressed data into the temporary stream */
992                  ns->data = xrealloc(ns->data, len);                  ns->data = (uint8 *) xrealloc(ns->data, rlen);
993    
994                  memcpy((ns->data), (unsigned char *) (mppc_dict.hist + roff), len);                  memcpy((ns->data), (unsigned char *) (g_mppc_dict.hist + roff), rlen);
995    
996                  ns->size = len;                  ns->size = rlen;
997                  ns->end = (ns->data + ns->size);                  ns->end = (ns->data + ns->size);
998                  ns->p = ns->data;                  ns->p = ns->data;
999                  ns->rdp_hdr = ns->p;                  ns->rdp_hdr = ns->p;
# Line 1075  rdp_main_loop(BOOL * deactivated, uint32 Line 1079  rdp_main_loop(BOOL * deactivated, uint32
1079          return;          return;
1080  }  }
1081    
1082    /* used in uiports, processes the rdp packets waiting */
1083    BOOL
1084    rdp_loop(BOOL * deactivated, uint32 * ext_disc_reason)
1085    {
1086            uint8 type;
1087            BOOL disc = False;      /* True when a disconnect PDU was received */
1088            BOOL cont = True;
1089            STREAM s;
1090    
1091            while (cont)
1092            {
1093                    s = rdp_recv(&type);
1094                    if (s == NULL)
1095                            return False;
1096                    switch (type)
1097                    {
1098                            case RDP_PDU_DEMAND_ACTIVE:
1099                                    process_demand_active(s);
1100                                    *deactivated = False;
1101                                    break;
1102                            case RDP_PDU_DEACTIVATE:
1103                                    DEBUG(("RDP_PDU_DEACTIVATE\n"));
1104                                    *deactivated = True;
1105                                    break;
1106                            case RDP_PDU_DATA:
1107                                    disc = process_data_pdu(s, ext_disc_reason);
1108                                    break;
1109                            case 0:
1110                                    break;
1111                            default:
1112                                    unimpl("PDU %d\n", type);
1113                    }
1114                    if (disc)
1115                            return False;
1116                    cont = g_next_packet < s->end;
1117            }
1118            return True;
1119    }
1120    
1121  /* Establish a connection up to the RDP layer */  /* Establish a connection up to the RDP layer */
1122  BOOL  BOOL
1123  rdp_connect(char *server, uint32 flags, char *domain, char *password,  rdp_connect(char *server, uint32 flags, char *domain, char *password,

Legend:
Removed from v.683  
changed lines
  Added in v.717

  ViewVC Help
Powered by ViewVC 1.1.26