aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2018-06-10 17:45:49 +0200
committerKim Alvefur <zash@zash.se>2018-06-10 17:45:49 +0200
commit5788d3bc5349809fa94420b7cd3a04e5f7df37b2 (patch)
treedf38c9c89512c9037ff809bc98df7608f7a3816e
parentcd282219c21e96492614b393407ee25841f57b58 (diff)
downloadprosody-5788d3bc5349809fa94420b7cd3a04e5f7df37b2.tar.gz
prosody-5788d3bc5349809fa94420b7cd3a04e5f7df37b2.zip
net.dns: Lazily generate unknown RR type names
-rw-r--r--net/dns.lua15
1 files changed, 12 insertions, 3 deletions
diff --git a/net/dns.lua b/net/dns.lua
index 8a7d4e7a..563c81a6 100644
--- a/net/dns.lua
+++ b/net/dns.lua
@@ -86,13 +86,22 @@ local function highbyte(i) -- - - - - - - - - - - - - - - - - - - highbyte
end
-local function augment (t) -- - - - - - - - - - - - - - - - - - - - augment
+local function augment (t, prefix) -- - - - - - - - - - - - - - - - - augment
local a = {};
for i,s in pairs(t) do
a[i] = s;
a[s] = s;
a[string.lower(s)] = s;
end
+ setmetatable(a, {
+ __index = function (_, i)
+ if type(i) == "number" then
+ return ("%s%d"):format(prefix, i);
+ elseif type(i) == "string" then
+ return i:upper();
+ end
+ end;
+ })
return a;
end
@@ -119,8 +128,8 @@ dns.types = {
dns.classes = { 'IN', 'CS', 'CH', 'HS', [255] = '*' };
-dns.type = augment (dns.types);
-dns.class = augment (dns.classes);
+dns.type = augment (dns.types, "TYPE");
+dns.class = augment (dns.classes, "CLASS");
dns.typecode = encode (dns.types);
dns.classcode = encode (dns.classes);