aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/httpserver.lua22
-rw-r--r--net/server.lua4
-rw-r--r--plugins/mod_bosh.lua12
-rw-r--r--plugins/mod_httpserver.lua12
4 files changed, 26 insertions, 24 deletions
diff --git a/net/httpserver.lua b/net/httpserver.lua
index d159202e..77cc5b98 100644
--- a/net/httpserver.lua
+++ b/net/httpserver.lua
@@ -17,7 +17,7 @@ local listener;
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
@@ -250,6 +250,26 @@ function new(params)
end
end
+function new_from_config(ports, handle_request)
+ for _, options in ipairs(ports) do
+ local port, base, ssl, interface = 5280, "http-bind", 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 "http-bind", 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;
diff --git a/net/server.lua b/net/server.lua
index 9418d388..78f79b56 100644
--- a/net/server.lua
+++ b/net/server.lua
@@ -546,7 +546,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport
socket:settimeout( 0 )
handler.readbuffer = handshake
handler.sendbuffer = handshake
- handshake( socket ) -- do handshake
+ if not handshake( socket ) then -- do handshake
+ return nil, nil, "ssl handshake failed";
+ end
else
-- We're not automatically doing SSL, so we're not secure (yet)
ssl = false
diff --git a/plugins/mod_bosh.lua b/plugins/mod_bosh.lua
index b07238bd..ccf08ec4 100644
--- a/plugins/mod_bosh.lua
+++ b/plugins/mod_bosh.lua
@@ -276,16 +276,6 @@ function on_timer()
end
local ports = config.get(module.host, "core", "bosh_ports") or { 5280 };
-for _, options in ipairs(ports) do
- local port, base, ssl, interface = 5280, "http-bind", 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 "http-bind", options.ssl or false, options.interface;
- elseif type(options) == "string" then
- base = options;
- end
- httpserver.new{ port = port, base = base, handler = handle_request, ssl = ssl }
-end
+httpserver.new_from_config(ports, handle_request);
server.addtimer(on_timer);
diff --git a/plugins/mod_httpserver.lua b/plugins/mod_httpserver.lua
index 98a3a36e..0f1d991c 100644
--- a/plugins/mod_httpserver.lua
+++ b/plugins/mod_httpserver.lua
@@ -28,14 +28,4 @@ local function handle_request(method, body, request)
end
local ports = config.get(module.host, "core", "http_ports") or { 5280 };
-for _, options in ipairs(ports) do
- local port, base, ssl, interface = 5280, "files", 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 "files", options.ssl or false, options.interface;
- elseif type(options) == "string" then
- base = options;
- end
- httpserver.new{ port = port, base = base, handler = handle_request, ssl = ssl }
-end
+httpserver.new_from_config(ports, handle_request);