diff options
author | Matthew Wild <mwild1@gmail.com> | 2020-10-21 10:40:11 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2020-10-21 10:40:11 +0100 |
commit | 4cca54ff5a9d9ce4a318032b57213db0294f1e24 (patch) | |
tree | a2b3a0622c904b161f4594ea6f363534c3b51d9a /net/http.lua | |
parent | 4e5bc0fa34033cc6582f65220a814e7c82b49aa6 (diff) | |
download | prosody-4cca54ff5a9d9ce4a318032b57213db0294f1e24.tar.gz prosody-4cca54ff5a9d9ce4a318032b57213db0294f1e24.zip |
net.http: Add support for streaming chunked/large responses
Diffstat (limited to 'net/http.lua')
-rw-r--r-- | net/http.lua | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/net/http.lua b/net/http.lua index 31157afa..bb247d18 100644 --- a/net/http.lua +++ b/net/http.lua @@ -83,7 +83,24 @@ local function request_reader(request, data, err) 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 @@ local function request(self, u, ex, callback) 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); |