Mercurial > prosody-hg
comparison net/http/server.lua @ 11373:ad3b5384fc03
net.http.server: Don't pause early streaming uploads
Fixes that otherwise it would wait for the request to be done after
receiving the head of the request, when it's meant to select a target
for where to store the data, instead of waiting after receiving the
request for when the request has been handled.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 13 Feb 2021 13:38:56 +0100 |
| parents | b877bd74d65e |
| children | d30c44a829c1 |
comparison
equal
deleted
inserted
replaced
| 11372:b877bd74d65e | 11373:ad3b5384fc03 |
|---|---|
| 107 log("error", "Traceback[httpserver]: %s", err); | 107 log("error", "Traceback[httpserver]: %s", err); |
| 108 self.data.conn:write("HTTP/1.0 500 Internal Server Error\r\n\r\n"..events.fire_event("http-error", { code = 500, private_message = err })); | 108 self.data.conn:write("HTTP/1.0 500 Internal Server Error\r\n\r\n"..events.fire_event("http-error", { code = 500, private_message = err })); |
| 109 self.data.conn:close(); | 109 self.data.conn:close(); |
| 110 end | 110 end |
| 111 | 111 |
| 112 local function noop() end | |
| 112 function listener.onconnect(conn) | 113 function listener.onconnect(conn) |
| 113 local session = { conn = conn }; | 114 local session = { conn = conn }; |
| 114 local secure = conn:ssl() and true or nil; | 115 local secure = conn:ssl() and true or nil; |
| 115 session.thread = async.runner(function (request) | 116 session.thread = async.runner(function (request) |
| 116 local wait, done = async.waiter(); | 117 local wait, done; |
| 118 if request.partial == true then | |
| 119 -- Have the header for a request, we want to receive the rest | |
| 120 -- when we've decided where the data should go. | |
| 121 wait, done = noop, noop; | |
| 122 else -- Got the entire request | |
| 123 -- Hold off on receiving more incoming requests until this one has been handled. | |
| 124 wait, done = async.waiter(); | |
| 125 end | |
| 117 handle_request(conn, request, done); wait(); | 126 handle_request(conn, request, done); wait(); |
| 118 end, runner_callbacks, session); | 127 end, runner_callbacks, session); |
| 119 local function success_cb(request) | 128 local function success_cb(request) |
| 120 --log("debug", "success_cb: %s", request.path); | 129 --log("debug", "success_cb: %s", request.path); |
| 121 request.secure = secure; | 130 request.secure = secure; |
