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"
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: