+-- Prosody IM
+-- Copyright (C) 2008-2009 Matthew Wild
+-- Copyright (C) 2008-2009 Waqas Hussain
+--
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
local socket = require "socket"
local server = require "net.server"
local t_insert, t_concat = table.insert, table.concat;
local s_match, s_gmatch = string.match, string.gmatch;
-local tonumber, tostring, pairs = tonumber, tostring, pairs;
+local tonumber, tostring, pairs, ipairs, type = tonumber, tostring, pairs, ipairs, type;
local urlencode = function (s) return s and (s:gsub("%W", function (c) return string.format("%%%02x", c:byte()); end)); end
end
else
-- Response we have is just a string (the body)
- log("debug", "Sending response to %s: %s", request.id, response);
+ log("debug", "Sending response to %s: %s", request.id or "<none>", response or "<none>");
resp = { "HTTP/1.0 200 OK\r\n" };
t_insert(resp, "Connection: close\r\n");
end
end
+function new_from_config(ports, default_base, handle_request)
+ for _, options in ipairs(ports) do
+ local port, base, ssl, interface = 5280, default_base, false, nil;
+ if type(options) == "number" then
+ port = options;
+ elseif type(options) == "table" then
+ port, base, ssl, interface = options.port or 5280, options.path or default_base, options.ssl or false, options.interface;
+ elseif type(options) == "string" then
+ base = options;
+ end
+
+ if ssl then
+ ssl.mode = "server";
+ ssl.protocol = "sslv23";
+ end
+
+ new{ port = port, base = base, handler = handle_request, ssl = ssl, type = (ssl and "ssl") or "tcp" }
+ end
+end
+
_M.request_reader = request_reader;
_M.send_response = send_response;
_M.urlencode = urlencode;