diff --git a/libfreerdp/core/nego.c b/libfreerdp/core/nego.c index 59a715f90..b93e3f9ea 100644 --- a/libfreerdp/core/nego.c +++ b/libfreerdp/core/nego.c @@ -63,7 +63,9 @@ static const char PROTOCOL_SECURITY_STRINGS[9][4] = }; #endif /* WITH_DEBUG_NEGO */ -BOOL nego_security_connect(rdpNego* nego); +static int nego_transport_connect(rdpNego* nego); +static int nego_transport_disconnect(rdpNego* nego); +static BOOL nego_security_connect(rdpNego* nego); /** * Negotiate protocol security and connect. @@ -190,6 +192,13 @@ BOOL nego_connect(rdpNego* nego) return TRUE; } +BOOL nego_disconnect(rdpNego* nego) +{ + rdpSettings* settings = nego->transport->settings; + nego->state = NEGO_STATE_INITIAL; + return nego_transport_disconnect(nego); +} + /* connect to selected security layer */ BOOL nego_security_connect(rdpNego* nego) { diff --git a/libfreerdp/core/nego.h b/libfreerdp/core/nego.h index 513564d15..3475920ed 100644 --- a/libfreerdp/core/nego.h +++ b/libfreerdp/core/nego.h @@ -118,6 +118,7 @@ struct rdp_nego typedef struct rdp_nego rdpNego; BOOL nego_connect(rdpNego* nego); +BOOL nego_disconnect(rdpNego* nego); BOOL nego_send_preconnection_pdu(rdpNego* nego); @@ -137,7 +138,7 @@ void nego_process_negotiation_response(rdpNego* nego, wStream* s); void nego_process_negotiation_failure(rdpNego* nego, wStream* s); BOOL nego_send_negotiation_response(rdpNego* nego); -rdpNego* nego_new(struct rdp_transport * transport); +rdpNego* nego_new(struct rdp_transport* transport); void nego_free(rdpNego* nego); void nego_init(rdpNego* nego);