http_driver: don't send empty chunks

This commit is contained in:
Emery Hemingway 2024-04-08 20:37:17 +01:00
parent 464043c8bf
commit 6a4854110c
1 changed files with 13 additions and 10 deletions

View File

@ -199,24 +199,27 @@ method message(e: Exchange; turn: var Turn; a: AssertionRef) =
e.stream.write(res.header.name, ": ", res.header.value, CRLF)
of HttpResponseKind.chunk:
if e.mode == HttpResponseKind.header:
e.stream.write("transfer-encoding: chunked" & CRLF & CRLF)
e.ses.send(move e.stream.data)
e.mode = res.orKind
if e.mode == res.orKind:
e.ses.send(res.chunk.chunk.lenLine)
e.ses.send(res.chunk.chunk)
e.ses.send(CRLF)
if res.chunk.chunk.len > 0:
if e.mode == HttpResponseKind.header:
e.stream.write("transfer-encoding: chunked" & CRLF & CRLF)
e.ses.send(move e.stream.data)
e.mode = res.orKind
if e.mode == res.orKind:
e.ses.send(res.chunk.chunk.lenLine)
e.ses.send(res.chunk.chunk)
e.ses.send(CRLF)
of HttpResponseKind.done:
if e.mode in {HttpResponseKind.header, HttpResponseKind.chunk}:
if e.mode == HttpResponseKind.header:
e.stream.write("content-length: ", $res.done.chunk.len & CRLF & CRLF)
e.ses.send(move e.stream.data)
e.ses.send(res.done.chunk)
if res.done.chunk.len > 0:
e.ses.send(res.done.chunk)
elif e.mode == HttpResponseKind.chunk:
e.ses.send(res.done.chunk.lenLine)
e.ses.send(res.done.chunk)
if res.done.chunk.len > 0:
e.ses.send(res.done.chunk)
e.ses.send(CRLF & "0" & CRLF & CRLF)
e.mode = res.orKind
e.ses.conn.endBatch()