From 440542c5358e1e5550341365d45c61ec544dcc00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20=C3=85strand?= Date: Thu, 7 Jan 2010 20:01:58 +0000 Subject: [PATCH] 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 --- constants.h | 16 +++++++++++++++- mcs.c | 17 +---------------- proto.h | 10 +++------- rdesktop.c | 5 ++--- rdp.c | 16 ++-------------- secure.c | 25 ++----------------------- 6 files changed, 25 insertions(+), 64 deletions(-) diff --git a/constants.h b/constants.h index a3b04d3..342ecf1 100644 --- a/constants.h +++ b/constants.h @@ -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, diff --git a/mcs.c b/mcs.c index 54a576f..e6f51c3 100644 --- a/mcs.c +++ b/mcs.c @@ -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) diff --git a/proto.h b/proto.h index 4dd6130..ee5620e 100644 --- a/proto.h +++ b/proto.h @@ -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 */ diff --git a/rdesktop.c b/rdesktop.c index f1652ce..dfafdc2 100644 --- a/rdesktop.c +++ b/rdesktop.c @@ -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 diff --git a/rdp.c b/rdp.c index cd1ee06..4ee87d8 100644 --- a/rdp.c +++ b/rdp.c @@ -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); diff --git a/secure.c b/secure.c index 2423cf1..111ba03 100644 --- a/secure.c +++ b/secure.c @@ -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); */