Elminate code duplication in rdp_reconnect and sec_connect.

git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/rdesktop/trunk@1528 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
Peter Åstrand 2010-01-07 20:01:58 +00:00
parent cf715c225c
commit 440542c535
6 changed files with 25 additions and 64 deletions

View File

@ -122,12 +122,26 @@ enum RDP_DATA_PDU_TYPE
RDP_DATA_PDU_SYNCHRONISE = 31,
RDP_DATA_PDU_BELL = 34,
RDP_DATA_PDU_CLIENT_WINDOW_STATUS = 35,
RDP_DATA_PDU_LOGON = 38,
RDP_DATA_PDU_LOGON = 38, /* PDUTYPE2_SAVE_SESSION_INFO */
RDP_DATA_PDU_FONT2 = 39,
RDP_DATA_PDU_KEYBOARD_INDICATORS = 41,
RDP_DATA_PDU_DISCONNECT = 47
};
enum RDP_SAVE_SESSION_PDU_TYPE
{
INFOTYPE_LOGON = 0,
INFOTYPE_LOGON_LONG = 1,
INFOTYPE_LOGON_PLAINNOTIFY = 2,
INFOTYPE_LOGON_EXTENDED_INF = 3
};
enum RDP_LOGON_INFO_EXTENDED_TYPE
{
LOGON_EX_AUTORECONNECTCOOKIE = 1,
LOGON_EX_LOGONERRORS = 2
};
enum RDP_CONTROL_PDU_TYPE
{
RDP_CTL_REQUEST_CONTROL = 1,

17
mcs.c
View File

@ -373,7 +373,7 @@ mcs_recv(uint16 * channel, uint8 * rdpver)
}
RD_BOOL
mcs_connect_common(char *server, STREAM mcs_data, char *username, RD_BOOL reconnect)
mcs_connect(char *server, STREAM mcs_data, char *username, RD_BOOL reconnect)
{
unsigned int i;
@ -412,21 +412,6 @@ mcs_connect_common(char *server, STREAM mcs_data, char *username, RD_BOOL reconn
return False;
}
/* Establish a connection up to the MCS layer */
RD_BOOL
mcs_connect(char *server, STREAM mcs_data, char *username)
{
return mcs_connect_common(server, mcs_data, username, False);
}
/* Establish a connection up to the MCS layer */
RD_BOOL
mcs_reconnect(char *server, STREAM mcs_data)
{
return mcs_connect_common(server, mcs_data, NULL, False);
}
/* Disconnect from the MCS layer */
void
mcs_disconnect(void)

10
proto.h
View File

@ -85,8 +85,7 @@ STREAM mcs_init(int length);
void mcs_send_to_channel(STREAM s, uint16 channel);
void mcs_send(STREAM s);
STREAM mcs_recv(uint16 * channel, uint8 * rdpver);
RD_BOOL mcs_connect(char *server, STREAM mcs_data, char *username);
RD_BOOL mcs_reconnect(char *server, STREAM mcs_data);
RD_BOOL mcs_connect(char *server, STREAM mcs_data, char *username, RD_BOOL reconnect);
void mcs_disconnect(void);
void mcs_reset_state(void);
/* orders.c */
@ -152,9 +151,7 @@ void process_disconnect_pdu(STREAM s, uint32 * ext_disc_reason);
void rdp_main_loop(RD_BOOL * deactivated, uint32 * ext_disc_reason);
RD_BOOL rdp_loop(RD_BOOL * deactivated, uint32 * ext_disc_reason);
RD_BOOL rdp_connect(char *server, uint32 flags, char *domain, char *password, char *command,
char *directory);
RD_BOOL rdp_reconnect(char *server, uint32 flags, char *domain, char *password, char *command,
char *directory, char *cookie);
char *directory, RD_BOOL reconnect);
void rdp_reset_state(void);
void rdp_disconnect(void);
/* rdpdr.c */
@ -190,8 +187,7 @@ void sec_send_to_channel(STREAM s, uint32 flags, uint16 channel);
void sec_send(STREAM s, uint32 flags);
void sec_process_mcs_data(STREAM s);
STREAM sec_recv(uint8 * rdpver);
RD_BOOL sec_connect(char *server, char *username);
RD_BOOL sec_reconnect(char *server);
RD_BOOL sec_connect(char *server, char *username, RD_BOOL reconnect);
void sec_disconnect(void);
void sec_reset_state(void);
/* serial.c */

View File

@ -963,11 +963,10 @@ main(int argc, char *argv[])
{
if (run_count == 0)
{
if (!rdp_connect(server, flags, domain, password, shell, directory))
if (!rdp_connect(server, flags, domain, password, shell, directory, False))
return EX_PROTOCOL;
}
else if (!rdp_reconnect
(server, flags, domain, password, shell, directory, g_redirect_cookie))
else if (!rdp_connect(server, flags, domain, password, shell, directory, True))
return EX_PROTOCOL;
/* By setting encryption to False here, we have an encrypted login

16
rdp.c
View File

@ -1513,21 +1513,9 @@ rdp_loop(RD_BOOL * deactivated, uint32 * ext_disc_reason)
/* Establish a connection up to the RDP layer */
RD_BOOL
rdp_connect(char *server, uint32 flags, char *domain, char *password,
char *command, char *directory)
char *command, char *directory, RD_BOOL reconnect)
{
if (!sec_connect(server, g_username))
return False;
rdp_send_logon_info(flags, domain, g_username, password, command, directory);
return True;
}
/* Establish a reconnection up to the RDP layer */
RD_BOOL
rdp_reconnect(char *server, uint32 flags, char *domain, char *password,
char *command, char *directory, char *cookie)
{
if (!sec_reconnect(server))
if (!sec_connect(server, g_username, reconnect))
return False;
rdp_send_logon_info(flags, domain, g_username, password, command, directory);

View File

@ -838,7 +838,7 @@ sec_recv(uint8 * rdpver)
/* Establish a secure connection */
RD_BOOL
sec_connect(char *server, char *username)
sec_connect(char *server, char *username, RD_BOOL reconnect)
{
struct stream mcs_data;
@ -847,28 +847,7 @@ sec_connect(char *server, char *username)
mcs_data.p = mcs_data.data = (uint8 *) xmalloc(mcs_data.size);
sec_out_mcs_data(&mcs_data);
if (!mcs_connect(server, &mcs_data, username))
return False;
/* sec_process_mcs_data(&mcs_data); */
if (g_encryption)
sec_establish_key();
xfree(mcs_data.data);
return True;
}
/* Establish a secure connection */
RD_BOOL
sec_reconnect(char *server)
{
struct stream mcs_data;
/* We exchange some RDP data during the MCS-Connect */
mcs_data.size = 512;
mcs_data.p = mcs_data.data = (uint8 *) xmalloc(mcs_data.size);
sec_out_mcs_data(&mcs_data);
if (!mcs_reconnect(server, &mcs_data))
if (!mcs_connect(server, &mcs_data, username, reconnect))
return False;
/* sec_process_mcs_data(&mcs_data); */