Software /
code /
prosody
Comparison
net/http.lua @ 617:b17fd66b7e10
HTTP request callbacks now: handler(code, content) (where code may be 0, and content an error message)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 12 Dec 2008 04:16:35 +0000 |
parent | 616:69bc5782b25e |
child | 618:69de678792d6 |
comparison
equal
deleted
inserted
replaced
616:69bc5782b25e | 617:b17fd66b7e10 |
---|---|
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 request.callback(t_concat(request.body)); | 30 request.callback(request.code, t_concat(request.body)); |
31 else | 31 else |
32 -- Error.. connection was closed prematurely | 32 -- Error.. connection was closed prematurely |
33 request.callback(nil, "connection-closed"); | 33 request.callback(0, "connection-closed"); |
34 end | 34 end |
35 destroy_request(request); | 35 destroy_request(request); |
36 return; | 36 return; |
37 end | 37 end |
38 if request.state == "body" then | 38 if request.state == "body" then |
45 if request.bodylength then | 45 if request.bodylength then |
46 request.havebodylength = request.havebodylength + #data; | 46 request.havebodylength = request.havebodylength + #data; |
47 if request.havebodylength >= request.bodylength then | 47 if request.havebodylength >= request.bodylength then |
48 -- We have the body | 48 -- We have the body |
49 if request.callback then | 49 if request.callback then |
50 request.callback(t_concat(request.body)); | 50 request.callback(request.code, t_concat(request.body)); |
51 end | 51 end |
52 end | 52 end |
53 print("", "Have "..request.havebodylength.." bytes out of "..request.bodylength); | 53 print("", "Have "..request.havebodylength.." bytes out of "..request.bodylength); |
54 end | 54 end |
55 elseif request.state == "headers" then | 55 elseif request.state == "headers" then |
76 end | 76 end |
77 elseif request.state == "status" then | 77 elseif request.state == "status" then |
78 print("Reading status...") | 78 print("Reading status...") |
79 local http, code, text, linelen = data:match("^HTTP/(%S+) (%d+) (.-)\r\n()", startpos); | 79 local http, code, text, linelen = data:match("^HTTP/(%S+) (%d+) (.-)\r\n()", startpos); |
80 if not code then | 80 if not code then |
81 return request.callback(nil, "invalid-status-line", data); | 81 return request.callback(0, "invalid-status-line"); |
82 end | 82 end |
83 | 83 |
84 request.responsecode, request.responseversion = code, http; | 84 request.responsecode, request.responseversion = code, http; |
85 | 85 |
86 if request.onlystatus or not expectbody(request, tonumber(code)) then | 86 if request.onlystatus or not expectbody(request, tonumber(code)) then |
87 if request.callback then | 87 if request.callback then |
88 request.callback(code); | 88 request.callback(code, nil); |
89 end | 89 end |
90 destroy_request(request); | 90 destroy_request(request); |
91 return; | 91 return; |
92 end | 92 end |
93 | 93 |