tools/http-status-codes.lua
author Kim Alvefur <zash@zash.se>
Sat, 23 Mar 2024 20:48:19 +0100
changeset 13465 c673ff1075bd
parent 13146 879a6a33c21b
permissions -rw-r--r--
mod_posix: Move everything to util.startup This allows greater control over the order of events. Notably, the internal ordering between daemonization, initialization of libunbound and setup of signal handling is sensitive. libunbound starts a separate thread for processing DNS requests. If this thread is started before signal handling has been set up, it will not inherit the signal handlers and instead behave as it would have before signal handlers were set up, i.e. cause the whole process to immediately exit. libunbound is usually initialized on the first DNS request, usually triggered by an outgoing s2s connection attempt. If daemonization happens before signals have been set up, signals may not be processed at all.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9169
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
-- Generate net/http/codes.lua from IANA HTTP status code registry
13146
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12275
diff changeset
     2
if not pcall(require, "prosody.loader") then
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12275
diff changeset
     3
	pcall(require, "loader");
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12275
diff changeset
     4
end
9169
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
13146
879a6a33c21b tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents: 12275
diff changeset
     6
local xml = require "prosody.util.xml";
12275
f31bb79f51d7 tools: Allow processing instructions in some XML parsing tools
Kim Alvefur <zash@zash.se>
parents: 9169
diff changeset
     7
local registry = xml.parse(io.read("*a"), { allow_processing_instructions = true });
9169
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
io.write([[
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
local response_codes = {
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	-- Source: http://www.iana.org/assignments/http-status-codes
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
]]);
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
for record in registry:get_child("registry"):childtags("record") do
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
	-- Extract values
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
	local value = record:get_child_text("value");
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
	local description = record:get_child_text("description");
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
	local ref = record:get_child_text("xref");
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
	local code = tonumber(value);
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
	-- Space between major groups
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
	if code and code % 100 == 0 then
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
		io.write("\n");
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
	end
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
	-- Reserved and Unassigned entries should be not be included
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
	if description == "Reserved" or description == "Unassigned" or description == "(Unused)" then
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
		code = nil;
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
	end
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
	-- Non-empty references become comments
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
	if ref and ref:find("%S") then
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
		ref = " -- " .. ref;
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
	else
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
		ref = "";
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
	end
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
	io.write((code and "\t[%d] = %q;%s\n" or "\t-- [%s] = %q;%s\n"):format(code or value, description, ref));
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
end
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
io.write([[};
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
for k,v in pairs(response_codes) do response_codes[k] = k.." "..v; end
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
return setmetatable(response_codes, { __index = function(_, k) return k.." Unassigned"; end })
cce55767004a tools: Add a tool to generate net.http.codes from IANA registry
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
]]);