Software / code / prosody
File
tools/http-status-codes.lua @ 13794:471b676e64eb 13.0
util.adminstream: Fix traceback on double-close (fixes #1913)
In some circumstances, particularly with 'opportunistic_writes' and
'fatal_errors' enabled in the epoll backend, the connection may be closed
halfway through the session close process (because it contains debug logging,
which in the case of the watch:log() command, will trigger a write to the
socket).
The chosen fix is to cache session.conn in a local variable (we already did
this later on, but this pulls it up to the top of the function, which is
generally more correct anyway).
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 31 Mar 2025 16:25:09 +0100 |
| parent | 13142:879a6a33c21b |
line wrap: on
line source
-- Generate net/http/codes.lua from IANA HTTP status code registry if not pcall(require, "prosody.loader") then pcall(require, "loader"); end local xml = require "prosody.util.xml"; local registry = xml.parse(io.read("*a"), { allow_processing_instructions = true }); io.write([[ local response_codes = { -- Source: http://www.iana.org/assignments/http-status-codes ]]); for record in registry:get_child("registry"):childtags("record") do -- Extract values local value = record:get_child_text("value"); local description = record:get_child_text("description"); local ref = record:get_child_text("xref"); local code = tonumber(value); -- Space between major groups if code and code % 100 == 0 then io.write("\n"); end -- Reserved and Unassigned entries should be not be included if description == "Reserved" or description == "Unassigned" or description == "(Unused)" then code = nil; end -- Non-empty references become comments if ref and ref:find("%S") then ref = " -- " .. ref; else ref = ""; end io.write((code and "\t[%d] = %q;%s\n" or "\t-- [%s] = %q;%s\n"):format(code or value, description, ref)); end io.write([[}; for k,v in pairs(response_codes) do response_codes[k] = k.." "..v; end return setmetatable(response_codes, { __index = function(_, k) return k.." Unassigned"; end }) ]]);