2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
9 local log = require "util.logger".init("httpclient_listener");
10 local t_concat = table.concat;
12 local connlisteners_register = require "net.connlisteners".register;
14 local requests = {}; -- Open requests
15 local buffers = {}; -- Buffers of partial lines
17 local httpclient = { default_port = 80, default_mode = "*a" };
19 function httpclient.onconnect(conn)
20 local req = requests[conn];
22 local request_line = { req.method or "GET", " ", req.path, " HTTP/1.1\r\n" };
24 t_insert(request_line, 4, "?"..req.query);
27 conn:write(t_concat(request_line));
28 local t = { [2] = ": ", [4] = "\r\n" };
29 for k, v in pairs(req.headers) do
31 conn:write(t_concat(t));
40 function httpclient.onincoming(conn, data)
41 local request = requests[conn];
44 log("warn", "Received response from connection %s with no request attached!", tostring(conn));
48 if data and request.reader then
53 function httpclient.ondisconnect(conn, err)
54 local request = requests[conn];
55 if request and err ~= "closed" then
61 function httpclient.register_request(conn, req)
62 log("debug", "Attaching request %s to connection %s", tostring(req.id or req), tostring(conn));
66 connlisteners_register("httpclient", httpclient);