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.
local function parse(arg, config)
local short_params = config and config.short_params or {};
local value_params = config and config.value_params or {};
local parsed_opts = {};
if #arg == 0 then
return parsed_opts;
end
while true do
local raw_param = arg[1];
if not raw_param then
break;
end
local prefix = raw_param:match("^%-%-?");
if not prefix then
break;
elseif prefix == "--" and raw_param == "--" then
table.remove(arg, 1);
break;
end
local param = table.remove(arg, 1):sub(#prefix+1);
if #param == 1 and short_params then
param = short_params[param];
end
if not param then
return nil, "param-not-found", raw_param;
end
local param_k, param_v;
if value_params[param] then
param_k, param_v = param, table.remove(arg, 1);
if not param_v then
return nil, "missing-value", raw_param;
end
else
param_k, param_v = param:match("^([^=]+)=(.+)$");
if not param_k then
if param:match("^no%-") then
param_k, param_v = param:sub(4), false;
else
param_k, param_v = param, true;
end
end
end
parsed_opts[param_k] = param_v;
end
for i = 1, #arg do
parsed_opts[i] = arg[i];
end
return parsed_opts;
end
return {
parse = parse;
}