--- sourceforge.net/trunk/rdesktop/mcs.c 2005/08/04 13:39:57 976 +++ sourceforge.net/trunk/rdesktop/mcs.c 2005/08/08 19:15:57 977 @@ -412,9 +412,58 @@ return False; } +/* Establish a connection up to the MCS layer */ +BOOL +mcs_reconnect(char *server, STREAM mcs_data) +{ + unsigned int i; + + if (!iso_reconnect(server)) + return False; + + mcs_send_connect_initial(mcs_data); + if (!mcs_recv_connect_response(mcs_data)) + goto error; + + mcs_send_edrq(); + + mcs_send_aurq(); + if (!mcs_recv_aucf(&g_mcs_userid)) + goto error; + + mcs_send_cjrq(g_mcs_userid + MCS_USERCHANNEL_BASE); + + if (!mcs_recv_cjcf()) + goto error; + + mcs_send_cjrq(MCS_GLOBAL_CHANNEL); + if (!mcs_recv_cjcf()) + goto error; + + for (i = 0; i < g_num_channels; i++) + { + mcs_send_cjrq(g_channels[i].mcs_id); + if (!mcs_recv_cjcf()) + goto error; + } + return True; + + error: + iso_disconnect(); + return False; +} + /* Disconnect from the MCS layer */ void mcs_disconnect(void) { iso_disconnect(); } + +/* reset the state of the mcs layer */ +void +mcs_reset_state(void) +{ + g_mcs_userid = 0; + iso_reset_state(); +}