fix messages with multiple empty frames (#61)

This commit is contained in:
Dmitriy Ryajov 2021-06-11 20:14:53 -06:00 committed by GitHub
parent 1188bf3c0b
commit deb46fef31
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 18 deletions

View File

@ -354,28 +354,26 @@ proc recv*(
trace "Setting binary flag" trace "Setting binary flag"
let len = min(ws.frame.remainder.int, size - consumed) let len = min(ws.frame.remainder.int, size - consumed)
if len <= 0: if len > 0:
trace "Nothing left to read, breaking!" trace "Reading bytes from frame stream", len
break 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 trace "Read data from frame", read
let read = await ws.stream.reader.readOnce(addr pbuffer[consumed], len)
if read <= 0:
trace "Didn't read any bytes, breaking"
break
if ws.frame.mask: if ws.frame.mask:
trace "Unmasking frame" trace "Unmasking frame"
# unmask data using offset # unmask data using offset
mask( mask(
pbuffer.toOpenArray(consumed, (consumed + read) - 1), pbuffer.toOpenArray(consumed, (consumed + read) - 1),
ws.frame.maskKey, ws.frame.maskKey,
ws.frame.consumed.int) ws.frame.consumed.int)
consumed += read consumed += read
ws.frame.consumed += read.uint64 ws.frame.consumed += read.uint64
trace "Read data from frame", read
# all has been consumed from the frame # all has been consumed from the frame
# read the next frame # read the next frame
if ws.frame.remainder <= 0: if ws.frame.remainder <= 0: