Software /
code /
prosody
Comparison
net/http.lua @ 677:93e5309c5430
Fix to prevent calling HTTP request callback twice with the same data
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 08 Jan 2009 02:02:35 +0000 |
parent | 646:90da4c9b34b5 |
child | 678:1859edec2237 |
comparison
equal
deleted
inserted
replaced
676:5e2dfeba1f14 | 677:93e5309c5430 |
---|---|
25 end | 25 end |
26 | 26 |
27 local function request_reader(request, data, startpos) | 27 local function request_reader(request, data, startpos) |
28 if not data then | 28 if not data then |
29 if request.body then | 29 if request.body then |
30 log("debug", "Connection closed, but we have data, calling callback..."); | |
30 request.callback(t_concat(request.body), request.code, request); | 31 request.callback(t_concat(request.body), request.code, request); |
31 else | 32 elseif request.state ~= "completed" then |
32 -- Error.. connection was closed prematurely | 33 -- Error.. connection was closed prematurely |
33 request.callback("connection-closed", 0, request); | 34 request.callback("connection-closed", 0, request); |
34 end | 35 end |
35 destroy_request(request); | 36 destroy_request(request); |
36 return; | 37 return; |
44 t_insert(request.body, data); | 45 t_insert(request.body, data); |
45 if request.bodylength then | 46 if request.bodylength then |
46 request.havebodylength = request.havebodylength + #data; | 47 request.havebodylength = request.havebodylength + #data; |
47 if request.havebodylength >= request.bodylength then | 48 if request.havebodylength >= request.bodylength then |
48 -- We have the body | 49 -- We have the body |
50 log("debug", "Have full body, calling callback"); | |
49 if request.callback then | 51 if request.callback then |
50 request.callback(t_concat(request.body), request.code, request); | 52 request.callback(t_concat(request.body), request.code, request); |
51 end | 53 end |
54 request.body = nil; | |
55 request.state = "completed"; | |
56 else | |
57 print("", "Have "..request.havebodylength.." bytes out of "..request.bodylength); | |
52 end | 58 end |
53 print("", "Have "..request.havebodylength.." bytes out of "..request.bodylength); | |
54 end | 59 end |
55 elseif request.state == "headers" then | 60 elseif request.state == "headers" then |
56 print("Reading headers...") | 61 print("Reading headers...") |
57 local pos = startpos; | 62 local pos = startpos; |
58 local headers = request.responseheaders or {}; | 63 local headers = request.responseheaders or {}; |