/[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 976 by astrand, Tue Aug 2 09:29:41 2005 UTC revision 977 by astrand, Mon Aug 8 19:15:57 2005 UTC
# Line 55  uint32 g_rdp_shareid; Line 55  uint32 g_rdp_shareid;
55    
56  extern RDPCOMP g_mppc_dict;  extern RDPCOMP g_mppc_dict;
57    
58    /* Session Directory support */
59    extern BOOL g_redirect;
60    extern char g_redirect_server[64];
61    extern char g_redirect_domain[16];
62    extern char g_redirect_password[64];
63    extern char g_redirect_username[64];
64    extern char g_redirect_cookie[128];
65    extern uint32 g_redirect_flags;
66    /* END Session Directory support */
67    
68  #if WITH_DEBUG  #if WITH_DEBUG
69  static uint32 g_packetno;  static uint32 g_packetno;
70  #endif  #endif
# Line 71  rdp_recv(uint8 * type) Line 81  rdp_recv(uint8 * type)
81          uint16 length, pdu_type;          uint16 length, pdu_type;
82          uint8 rdpver;          uint8 rdpver;
83    
84          if ((rdp_s == NULL) || (g_next_packet >= rdp_s->end))          if ((rdp_s == NULL) || (g_next_packet >= rdp_s->end) || (g_next_packet == NULL))
85          {          {
86                  rdp_s = sec_recv(&rdpver);                  rdp_s = sec_recv(&rdpver);
87                  if (rdp_s == NULL)                  if (rdp_s == NULL)
# Line 260  rdp_in_unistr(STREAM s, char *string, in Line 270  rdp_in_unistr(STREAM s, char *string, in
270                          g_iconv_works = False;                          g_iconv_works = False;
271                          return rdp_in_unistr(s, string, uni_len);                          return rdp_in_unistr(s, string, uni_len);
272                  }                  }
273    
274                    /* we must update the location of the current STREAM for future reads of s->p */
275                    s->p += uni_len;
276    
277                  return pout - string;                  return pout - string;
278          }          }
279          else          else
# Line 1284  process_data_pdu(STREAM s, uint32 * ext_ Line 1298  process_data_pdu(STREAM s, uint32 * ext_
1298          return False;          return False;
1299  }  }
1300    
1301    /* Process redirect PDU from Session Directory */
1302    static BOOL
1303    process_redirect_pdu(STREAM s /*, uint32 * ext_disc_reason */ )
1304    {
1305            uint32 len;
1306    
1307            /* these 2 bytes are unknown, seem to be zeros */
1308            in_uint8s(s, 2);
1309    
1310            /* read connection flags */
1311            in_uint32_le(s, g_redirect_flags);
1312    
1313            /* read length of ip string */
1314            in_uint32_le(s, len);
1315    
1316            /* read ip string */
1317            rdp_in_unistr(s, g_redirect_server, len);
1318    
1319            /* read length of cookie string */
1320            in_uint32_le(s, len);
1321    
1322            /* read cookie string (plain ASCII) */
1323            in_uint8a(s, g_redirect_cookie, len);
1324            g_redirect_cookie[len] = 0;
1325    
1326            /* read length of username string */
1327            in_uint32_le(s, len);
1328    
1329            /* read username string */
1330            rdp_in_unistr(s, g_redirect_username, len);
1331    
1332            /* read length of domain string */
1333            in_uint32_le(s, len);
1334    
1335            /* read domain string */
1336            rdp_in_unistr(s, g_redirect_domain, len);
1337    
1338            /* read length of password string */
1339            in_uint32_le(s, len);
1340    
1341            /* read password string */
1342            rdp_in_unistr(s, g_redirect_password, len);
1343    
1344            g_redirect = True;
1345    
1346            return True;
1347    }
1348    
1349  /* Process incoming packets */  /* Process incoming packets */
1350  /* nevers gets out of here till app is done */  /* nevers gets out of here till app is done */
1351  void  void
# Line 1317  rdp_loop(BOOL * deactivated, uint32 * ex Line 1379  rdp_loop(BOOL * deactivated, uint32 * ex
1379                                  DEBUG(("RDP_PDU_DEACTIVATE\n"));                                  DEBUG(("RDP_PDU_DEACTIVATE\n"));
1380                                  *deactivated = True;                                  *deactivated = True;
1381                                  break;                                  break;
1382                            case RDP_PDU_REDIRECT:
1383                                    return process_redirect_pdu(s);
1384                                    break;
1385                          case RDP_PDU_DATA:                          case RDP_PDU_DATA:
1386                                  disc = process_data_pdu(s, ext_disc_reason);                                  disc = process_data_pdu(s, ext_disc_reason);
1387                                  break;                                  break;
# Line 1344  rdp_connect(char *server, uint32 flags, Line 1409  rdp_connect(char *server, uint32 flags,
1409          return True;          return True;
1410  }  }
1411    
1412    /* Establish a reconnection up to the RDP layer */
1413    BOOL
1414    rdp_reconnect(char *server, uint32 flags, char *domain, char *password,
1415                  char *command, char *directory, char *cookie)
1416    {
1417            if (!sec_reconnect(server))
1418                    return False;
1419    
1420            rdp_send_logon_info(flags, domain, g_username, password, command, directory);
1421            return True;
1422    }
1423    
1424    /* Called during redirection to reset the state to support redirection */
1425    void
1426    rdp_reset_state(void)
1427    {
1428            g_next_packet = NULL;   /* reset the packet information */
1429            g_rdp_shareid = 0;
1430            sec_reset_state();
1431    }
1432    
1433  /* Disconnect from the RDP layer */  /* Disconnect from the RDP layer */
1434  void  void
1435  rdp_disconnect(void)  rdp_disconnect(void)

Legend:
Removed from v.976  
changed lines
  Added in v.977

  ViewVC Help
Powered by ViewVC 1.1.26