Software /
code /
prosody
Comparison
util/dns.lua @ 12289:3a655adf1d0d
util.dns: Remove compat for pre-0.11 lack of inet_ntop binding
The inet_ntop binding was added in 8b612ec00e4a and included in 0.11.0
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 15 Feb 2022 13:04:24 +0100 |
parent | 12288:08a933450922 |
child | 12355:a0ff5c438e9d |
comparison
equal
deleted
inserted
replaced
12288:08a933450922 | 12289:3a655adf1d0d |
---|---|
8 local table = table; | 8 local table = table; |
9 local t_concat = table.concat; | 9 local t_concat = table.concat; |
10 local t_insert = table.insert; | 10 local t_insert = table.insert; |
11 local s_byte = string.byte; | 11 local s_byte = string.byte; |
12 local s_format = string.format; | 12 local s_format = string.format; |
13 local s_gsub = string.gsub; | |
14 local s_sub = string.sub; | 13 local s_sub = string.sub; |
15 local s_match = string.match; | |
16 local s_gmatch = string.gmatch; | |
17 | |
18 local have_net, net_util = pcall(require, "util.net"); | |
19 | 14 |
20 local iana_data = require "util.dnsregistry"; | 15 local iana_data = require "util.dnsregistry"; |
21 if have_net and not net_util.ntop then -- Added in Prosody 0.11 | |
22 have_net = false; | |
23 end | |
24 | |
25 local tohex = require "util.hex".to; | 16 local tohex = require "util.hex".to; |
17 local inet_ntop = require "util.net".ntop; | |
26 | 18 |
27 -- Simplified versions of Waqas DNS parsers | 19 -- Simplified versions of Waqas DNS parsers |
28 -- Only the per RR parsers are needed and only feed a single RR | 20 -- Only the per RR parsers are needed and only feed a single RR |
29 | 21 |
30 local parsers = {}; | 22 local parsers = {}; |
76 expire = e1*0x1000000 + e2*0x10000 + e3*0x100 + e4; | 68 expire = e1*0x1000000 + e2*0x10000 + e3*0x100 + e4; |
77 minimum = m1*0x1000000 + m2*0x10000 + m3*0x100 + m4; | 69 minimum = m1*0x1000000 + m2*0x10000 + m3*0x100 + m4; |
78 }, soa_mt); | 70 }, soa_mt); |
79 end | 71 end |
80 | 72 |
81 function parsers.A(packet) | 73 parsers.A = inet_ntop; |
82 return s_format("%d.%d.%d.%d", s_byte(packet, 1, 4)); | 74 parsers.AAAA = inet_ntop; |
83 end | |
84 | |
85 local aaaa = { nil, nil, nil, nil, nil, nil, nil, nil, }; | |
86 function parsers.AAAA(packet) | |
87 local hi, lo, ip, len, token; | |
88 for i = 1, 8 do | |
89 hi, lo = s_byte(packet, i * 2 - 1, i * 2); | |
90 aaaa[i] = s_format("%x", hi * 256 + lo); -- skips leading zeros | |
91 end | |
92 ip = t_concat(aaaa, ":", 1, 8); | |
93 len = (s_match(ip, "^0:[0:]+()") or 1) - 1; | |
94 for s in s_gmatch(ip, ":0:[0:]+") do | |
95 if len < #s then len, token = #s, s; end -- find longest sequence of zeros | |
96 end | |
97 return (s_gsub(ip, token or "^0:[0:]+", "::", 1)); | |
98 end | |
99 | |
100 if have_net then | |
101 parsers.A = net_util.ntop; | |
102 parsers.AAAA = net_util.ntop; | |
103 end | |
104 | 75 |
105 local mx_mt = { | 76 local mx_mt = { |
106 __tostring = function(rr) | 77 __tostring = function(rr) |
107 return s_format("%d %s", rr.pref, rr.mx) | 78 return s_format("%d %s", rr.pref, rr.mx) |
108 end | 79 end |