From 8afa7cf22720e8d5a514473c733a15b965c7f77d Mon Sep 17 00:00:00 2001 From: Vic Lee Date: Mon, 4 Jul 2011 10:11:14 +0800 Subject: [PATCH] libfreerdp-core/transport: process PDU (if any) only after sending has completed. --- libfreerdp-core/transport.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/libfreerdp-core/transport.c b/libfreerdp-core/transport.c index 5e54e656b..5593cc653 100644 --- a/libfreerdp-core/transport.c +++ b/libfreerdp-core/transport.c @@ -90,10 +90,13 @@ transport_connect_nla(rdpTransport * transport) return True; } +static int +transport_recv(rdpTransport * transport); + static int transport_delay(rdpTransport * transport) { - transport_check_fds(transport); + transport_recv(transport); nanosleep(&transport->ts, NULL); return 0; } @@ -140,10 +143,17 @@ transport_send_tcp(rdpTransport * transport, STREAM * stream) int transport_send(rdpTransport * transport, STREAM * stream) { + int r; + if (transport->state == TRANSPORT_STATE_TLS) - return transport_send_tls(transport, stream); + r = transport_send_tls(transport, stream); else - return transport_send_tcp(transport, stream); + r = transport_send_tcp(transport, stream); + + if (r == 0) + r = transport_check_fds(transport); + + return r; } static int @@ -175,6 +185,15 @@ transport_recv_tcp(rdpTransport * transport) return bytes; } +static int +transport_recv(rdpTransport * transport) +{ + if (transport->state == TRANSPORT_STATE_TLS) + return transport_recv_tls(transport); + else + return transport_recv_tcp(transport); +} + int transport_check_fds(rdpTransport * transport) { @@ -183,10 +202,7 @@ transport_check_fds(rdpTransport * transport) uint16 length; STREAM * received; - if (transport->state == TRANSPORT_STATE_TLS) - bytes = transport_recv_tls(transport); - else - bytes = transport_recv_tcp(transport); + bytes = transport_recv(transport); if (bytes <= 0) return bytes;