author | Matthew Wild <mwild1@gmail.com> |
Wed, 24 Apr 2024 11:50:13 +0100 | |
changeset 13488 | e22609460975 |
parent 13146 | 879a6a33c21b |
permissions | -rw-r--r-- |
12241
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 |
-- Generate util/dnsregistry.lua from IANA HTTP status code registry |
13146
879a6a33c21b
tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents:
12859
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:
12859
diff
changeset
|
3 |
pcall(require, "loader"); |
879a6a33c21b
tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents:
12859
diff
changeset
|
4 |
end |
879a6a33c21b
tools: Update imports to use new prosody.* namespace
Kim Alvefur <zash@zash.se>
parents:
12859
diff
changeset
|
5 |
local xml = require "prosody.util.xml"; |
12275
f31bb79f51d7
tools: Allow processing instructions in some XML parsing tools
Kim Alvefur <zash@zash.se>
parents:
12241
diff
changeset
|
6 |
local registries = xml.parse(io.read("*a"), { allow_processing_instructions = true }); |
12241
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 |
|
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
print("-- Source: https://www.iana.org/assignments/dns-parameters/dns-parameters.xml"); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
print(os.date("-- Generated on %Y-%m-%d")) |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
|
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
local registry_mapping = { |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 |
["dns-parameters-2"] = "classes"; |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
["dns-parameters-4"] = "types"; |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
["dns-parameters-6"] = "errors"; |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
}; |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 |
|
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
print("return {"); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 |
for registry in registries:childtags("registry") do |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 |
local registry_name = registry_mapping[registry.attr.id]; |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 |
if registry_name then |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 |
print("\t" .. registry_name .. " = {"); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
for record in registry:childtags("record") do |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
local record_name = record:get_child_text("name"); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 |
local record_type = record:get_child_text("type"); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
local record_desc = record:get_child_text("description"); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
local record_code = tonumber(record:get_child_text("value")); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 |
|
12859
3306807c0619
tools/dnsregistry: Fix to ignore unassigned entries
Kim Alvefur <zash@zash.se>
parents:
12275
diff
changeset
|
28 |
if tostring(record):lower():match("reserved") or tostring(record):lower():match("unassigned") then |
12241
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
record_code = nil; |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 |
end |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
|
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
if registry_name == "classes" and record_code then |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 |
record_type = record_desc and record_desc:match("%((%w+)%)$") |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 |
if record_type then |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 |
print(("\t\t[%q] = %d; [%d] = %q;"):format(record_type, record_code, record_code, record_type)) |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 |
end |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 |
elseif registry_name == "types" and record_type and record_code then |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 |
print(("\t\t[%q] = %d; [%d] = %q;"):format(record_type, record_code, record_code, record_type)) |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
elseif registry_name == "errors" and record_code and record_name then |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
print(("\t\t[%d] = %q; [%q] = %q;"):format(record_code, record_name, record_name, record_desc or record_name)); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 |
end |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
end |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 |
print("\t};"); |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
end |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 |
end |
b35714c57442
tools.dnsregistry: For converting IANA DNS registry data to Lua table
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 |
print("};"); |