mod_websocket: Fire pre-session-close event (fixes #1800)
This event was added in a7c183bb4e64 and is required to make mod_smacks know
that a session was intentionally closed and shouldn't be hibernated (see
fcea4d9e7502).
Because this was missing from mod_websocket's session.close(), mod_smacks
would always attempt to hibernate websocket sessions even if they closed
cleanly.
That mod_websocket has its own copy of session.close() is something to fix
another day (probably not in the stable branch). So for now this commit makes
the minimal change to get things working again.
Thanks to Damian and the Jitsi team for reporting.
-- Generate util/dnsregistry.lua from IANA HTTP status code registry
local xml = require "util.xml";
local registries = xml.parse(io.read("*a"), { allow_processing_instructions = true });
print("-- Source: https://www.iana.org/assignments/dns-parameters/dns-parameters.xml");
print(os.date("-- Generated on %Y-%m-%d"))
local registry_mapping = {
["dns-parameters-2"] = "classes";
["dns-parameters-4"] = "types";
["dns-parameters-6"] = "errors";
};
print("return {");
for registry in registries:childtags("registry") do
local registry_name = registry_mapping[registry.attr.id];
if registry_name then
print("\t" .. registry_name .. " = {");
for record in registry:childtags("record") do
local record_name = record:get_child_text("name");
local record_type = record:get_child_text("type");
local record_desc = record:get_child_text("description");
local record_code = tonumber(record:get_child_text("value"));
if tostring(record):lower():match("reserved") or tostring(record):lower():match("reserved") then
record_code = nil;
end
if registry_name == "classes" and record_code then
record_type = record_desc and record_desc:match("%((%w+)%)$")
if record_type then
print(("\t\t[%q] = %d; [%d] = %q;"):format(record_type, record_code, record_code, record_type))
end
elseif registry_name == "types" and record_type and record_code then
print(("\t\t[%q] = %d; [%d] = %q;"):format(record_type, record_code, record_code, record_type))
elseif registry_name == "errors" and record_code and record_name then
print(("\t\t[%d] = %q; [%q] = %q;"):format(record_code, record_name, record_name, record_desc or record_name));
end
end
print("\t};");
end
end
print("};");