net.unbound: Show canonical name in textual format (e.g. in shell)
libunbound does not tell us the whole chain of CNAMEs, only the final
canonical name.
This is to aid in debugging since it will only be shown in the shell.
-- 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 })
]]);