diff options
author | Kim Alvefur <zash@zash.se> | 2018-02-08 17:35:42 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2018-02-08 17:35:42 +0100 |
commit | 880077c1333c8386989a795cb08ef2cd93846f60 (patch) | |
tree | a127f737df0be02545230a398cc728487addc6aa | |
parent | bee67a520425b68c7d84581ee7ed7cdd19602c8f (diff) | |
download | prosody-880077c1333c8386989a795cb08ef2cd93846f60.tar.gz prosody-880077c1333c8386989a795cb08ef2cd93846f60.zip |
tools: Add a tool to generate net.http.codes from IANA registry
-rw-r--r-- | tools/http-status-codes.lua | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tools/http-status-codes.lua b/tools/http-status-codes.lua new file mode 100644 index 00000000..39bee74c --- /dev/null +++ b/tools/http-status-codes.lua @@ -0,0 +1,43 @@ +-- Generate net/http/codes.lua from IANA HTTP status code registry + +local xml = require "util.xml"; +local registry = xml.parse(io.read("*a")); + +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 }) +]]); |