Comparison

net/http/server.lua @ 4688:8d275c86a04f

net.http.server: Remove legacy compatibility
author Matthew Wild <mwild1@gmail.com>
date Wed, 25 Apr 2012 14:58:10 +0100
parent 4683:c1374e083c97
child 4689:e8c357259993
comparison
equal deleted inserted replaced
4687:bd3a852b949a 4688:8d275c86a04f
158 if not request.headers.host then 158 if not request.headers.host then
159 response.status_code = 400; 159 response.status_code = 400;
160 response.headers.content_type = "text/html"; 160 response.headers.content_type = "text/html";
161 response:send("<html><head>400 Bad Request</head><body>400 Bad Request: No Host header.</body></html>"); 161 response:send("<html><head>400 Bad Request</head><body>400 Bad Request: No Host header.</body></html>");
162 else 162 else
163 -- TODO call handler
164 --response.headers.content_type = "text/plain";
165 --response:send("host="..(request.headers.host or "").."\npath="..request.path.."\n"..(request.body or ""));
166 local host = request.headers.host; 163 local host = request.headers.host;
167 if host then 164 if host then
168 host = host:match("[^:]*"):lower(); 165 host = host:match("[^:]*"):lower();
169 local event = request.method.." "..host..request.path:match("[^?]*"); 166 local event = request.method.." "..host..request.path:match("[^?]*");
170 local payload = { request = request, response = response }; 167 local payload = { request = request, response = response };
189 end 186 end
190 return; 187 return;
191 end 188 end
192 end 189 end
193 190
194 -- if handler not called, fallback to legacy httpserver handlers 191 -- if handler not called, return 404
195 _M.legacy_handler(request, response); 192 response.status_code = 404;
193 response.headers.content_type = "text/html";
194 response:send("<html><head><title>404 Not Found</title></head><body>404 Not Found: No such page.</body></html>");
196 end 195 end
197 end 196 end
198 function _M.send_response(response, body) 197 function _M.send_response(response, body)
199 local status_line = "HTTP/"..response.request.httpversion.." "..(response.status or codes[response.status_code]); 198 local status_line = "HTTP/"..response.request.httpversion.." "..(response.status or codes[response.status_code]);
200 local headers = response.headers; 199 local headers = response.headers;
213 response:finish_cb(); 212 response:finish_cb();
214 else 213 else
215 response.conn:close(); 214 response.conn:close();
216 end 215 end
217 end 216 end
218 function _M.legacy_handler(request, response)
219 log("debug", "Invoking legacy handler");
220 local base = request.path:match("^/([^/?]+)");
221 local legacy_server = legacy_httpserver and legacy_httpserver.new.http_servers[5280];
222 local handler = legacy_server and legacy_server.handlers[base];
223 if not handler then handler = legacy_httpserver and legacy_httpserver.set_default_handler.default_handler; end
224 if handler then
225 -- add legacy properties to request object
226 request.url = { path = request.path };
227 request.handler = response.conn;
228 request.id = tostring{}:match("%x+$");
229 local headers = {};
230 for k,v in pairs(request.headers) do
231 headers[k:gsub("_", "-")] = v;
232 end
233 request.headers = headers;
234 function request:send(resp)
235 if self.destroyed then return; end
236 if resp.body or resp.headers then
237 if resp.headers then
238 for k,v in pairs(resp.headers) do response.headers[k] = v; end
239 end
240 response:send(resp.body)
241 else
242 response:send(resp)
243 end
244 self.sent = true;
245 self:destroy();
246 end
247 function request:destroy()
248 if self.destroyed then return; end
249 if not self.sent then return self:send(""); end
250 self.destroyed = true;
251 if self.on_destroy then
252 log("debug", "Request has destroy callback");
253 self:on_destroy();
254 else
255 log("debug", "Request has no destroy callback");
256 end
257 end
258 local r = handler(request.method, request.body, request);
259 if r ~= true then
260 request:send(r);
261 end
262 else
263 log("debug", "No handler found");
264 response.status_code = 404;
265 response.headers.content_type = "text/html";
266 response:send("<html><head><title>404 Not Found</title></head><body>404 Not Found: No such page.</body></html>");
267 end
268 end
269
270 function _M.add_handler(event, handler, priority) 217 function _M.add_handler(event, handler, priority)
271 events.add_handler(event, handler, priority); 218 events.add_handler(event, handler, priority);
272 end 219 end
273 function _M.remove_handler(event, handler) 220 function _M.remove_handler(event, handler)
274 events.remove_handler(event, handler); 221 events.remove_handler(event, handler);