-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
+-- luacheck: ignore 431/log
module:set_global();
+local add_task = require "util.timer".add_task;
local add_filter = require "util.filters".add_filter;
local sha1 = require "util.hashes".sha1;
local base64 = require "util.encodings".base64.encode;
local st = require "util.stanza";
local parse_xml = require "util.xml".parse;
local portmanager = require "core.portmanager";
-local sm_destroy_session = sessionmanager.destroy_session;
+local sm_destroy_session = require"core.sessionmanager".destroy_session;
local log = module._log;
local websocket_frames = require"net.websocket.frames";
local t_concat = table.concat;
+local stream_close_timeout = module:get_option_number("c2s_close_timeout", 5);
local consider_websocket_secure = module:get_option_boolean("consider_websocket_secure");
local cross_domain = module:get_option("cross_domain_websocket");
if cross_domain then
return data;
end
-function handle_request(event, path)
+function handle_request(event)
local request, response = event.request, event.response;
local conn = response.conn;
frame.opcode = 0xA;
conn:write(build_frame(frame));
return "";
- elseif opcode == 0xA then -- Pong frame
- module:log("warn", "Received unexpected pong frame: " .. tostring(frame.data));
+ elseif opcode == 0xA then -- Pong frame, MAY be sent unsolicited, eg as keepalive
return "";
else
log("warn", "Received frame with unsupported opcode %i", opcode);
attr["xmlns:stream"] = attr["xmlns:stream"] or xmlns_streams;
end
return stanza;
- end);
+ end, -1000);
add_filter(session, "bytes/out", function(data)
return build_frame({ FIN = true, opcode = 0x01, data = tostring(data)});
return "";
end
+local function keepalive(event)
+ local session = event.session;
+ if session.open_stream == session_open_stream then
+ return session.conn:write(build_frame({ opcode = 0x9, }));
+ end
+end
+
+module:hook("c2s-read-timeout", keepalive, -0.9);
+
function module.add_host(module)
module:depends("http");
module:provides("http", {
["GET /"] = handle_request;
};
});
+ module:hook("c2s-read-timeout", keepalive, -0.9);
end