Software /
code /
prosody
Changeset
11185:409ce7686c11
net.http: Add support for streaming chunked/large responses
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 21 Oct 2020 10:40:11 +0100 |
parents | 11184:2ede7f43ccfe |
children | 11186:15fe9f0bb483 |
files | net/http.lua |
diffstat | 1 files changed, 18 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/net/http.lua Wed Oct 21 10:34:16 2020 +0100 +++ b/net/http.lua Wed Oct 21 10:40:11 2020 +0100 @@ -83,7 +83,24 @@ return; end + local finalize_sink; local function success_cb(r) + if r.partial then + -- Request should be streamed + log("debug", "Request '%s': partial response (%s%s)", + request.id, + r.chunked and "chunked, " or "", + r.body_length and ("%d bytes"):format(r.body_length) or "unknown length" + ); + if request.streaming_handler then + log("debug", "Request '%s': Streaming via handler"); + r.body_sink, finalize_sink = request.streaming_handler(r); + end + return; + elseif finalize_sink then + log("debug", "Request '%s': Finalizing response stream"); + finalize_sink(r); + end if request.callback then request.callback(r.body, r.code, r, request); request.callback = nil; @@ -256,6 +273,7 @@ end req.insecure = ex.insecure; req.suppress_errors = ex.suppress_errors; + req.streaming_handler = ex.streaming_handler; end log("debug", "Making %s %s request '%s' to %s", req.scheme:upper(), method or "GET", req.id, (ex and ex.suppress_url and host_header) or u);