From deb46fef31faa29fc24ca1488fbd2efb22ebd380 Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Fri, 11 Jun 2021 20:14:53 -0600 Subject: [PATCH] fix messages with multiple empty frames (#61) --- ws/session.nim | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/ws/session.nim b/ws/session.nim index 10fb620..904ab2d 100644 --- a/ws/session.nim +++ b/ws/session.nim @@ -354,28 +354,26 @@ proc recv*( trace "Setting binary flag" let len = min(ws.frame.remainder.int, size - consumed) - if len <= 0: - trace "Nothing left to read, breaking!" - break + if len > 0: + trace "Reading bytes from frame stream", len + let read = await ws.stream.reader.readOnce(addr pbuffer[consumed], len) + if read <= 0: + trace "Didn't read any bytes, breaking" + break - trace "Reading bytes from frame stream", len - let read = await ws.stream.reader.readOnce(addr pbuffer[consumed], len) - if read <= 0: - trace "Didn't read any bytes, breaking" - break + trace "Read data from frame", read - if ws.frame.mask: - trace "Unmasking frame" - # unmask data using offset - mask( - pbuffer.toOpenArray(consumed, (consumed + read) - 1), - ws.frame.maskKey, - ws.frame.consumed.int) + if ws.frame.mask: + trace "Unmasking frame" + # unmask data using offset + mask( + pbuffer.toOpenArray(consumed, (consumed + read) - 1), + ws.frame.maskKey, + ws.frame.consumed.int) - consumed += read - ws.frame.consumed += read.uint64 + consumed += read + ws.frame.consumed += read.uint64 - trace "Read data from frame", read # all has been consumed from the frame # read the next frame if ws.frame.remainder <= 0: