From 44cb710496293e72381bbfd96e910eaee80a33ae Mon Sep 17 00:00:00 2001 From: Pavel Pautov <37922380+p-pautov@users.noreply.github.com> Date: Wed, 4 Apr 2018 19:06:59 -0700 Subject: [PATCH] Moved some repeated "read all" code into function. --- libfreerdp/core/gateway/rdg.c | 68 +++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 32 deletions(-) mode change 100644 => 100755 libfreerdp/core/gateway/rdg.c diff --git a/libfreerdp/core/gateway/rdg.c b/libfreerdp/core/gateway/rdg.c old mode 100644 new mode 100755 index 03bbe28..ce288f3 --- a/libfreerdp/core/gateway/rdg.c +++ b/libfreerdp/core/gateway/rdg.c @@ -75,57 +75,61 @@ static BOOL rdg_write_packet(rdpRdg* rdg, wStream* sPacket) return TRUE; } -static wStream* rdg_receive_packet(rdpRdg* rdg) +static BOOL rdg_read_all(rdpTls* tls, BYTE* buffer, int size) { int status; - wStream* s; - RdgPacketHeader* packet; - UINT32 readCount = 0; - s = Stream_New(NULL, 1024); - - if (!s) - return NULL; - - packet = (RdgPacketHeader*) Stream_Buffer(s); + int readCount = 0; - while (readCount < sizeof(RdgPacketHeader)) + while (readCount < size) { - status = BIO_read(rdg->tlsOut->bio, Stream_Pointer(s), sizeof(RdgPacketHeader) - readCount); + status = BIO_read(tls->bio, buffer, size - readCount); - if (status < 0) + if (status <= 0) { + if (!BIO_should_retry(tls->bio)) + return FALSE; + continue; } readCount += status; - Stream_Seek(s, readCount); } + return TRUE; +} - if (Stream_Capacity(s) < packet->packetLength) - { - if (!Stream_EnsureCapacity(s, packet->packetLength)) - { - Stream_Free(s, TRUE); - return NULL; - } +static wStream* rdg_receive_packet(rdpRdg* rdg) +{ + wStream* s; + size_t packetLength; - packet = (RdgPacketHeader*) Stream_Buffer(s); - } + s = Stream_New(NULL, 1024); + + if (!s) + return NULL; - while (readCount < packet->packetLength) + if (!rdg_read_all(rdg->tlsOut, Stream_Buffer(s), sizeof(RdgPacketHeader))) { - status = BIO_read(rdg->tlsOut->bio, Stream_Pointer(s), packet->packetLength - readCount); + Stream_Free(s, TRUE); + return NULL; + } - if (status < 0) - { - continue; - } + packetLength = ((RdgPacketHeader*)Stream_Buffer(s))->packetLength; - readCount += status; - Stream_Seek(s, readCount); + if (!Stream_EnsureCapacity(s, packetLength)) + { + Stream_Free(s, TRUE); + return NULL; } - Stream_SealLength(s); + if (!rdg_read_all(rdg->tlsOut, Stream_Buffer(s) + sizeof(RdgPacketHeader), + packetLength - sizeof(RdgPacketHeader))) + { + Stream_Free(s, TRUE); + return NULL; + } + + Stream_SetLength(s, packetLength); + return s; } -- 2.7.4