Software /
code /
prosody
File
net/resolvers/basic.lua @ 8699:580c13ed0ca1
util.startup: Initialize the 'prosody' global earlier (various things needs the global util.events instance)
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 29 Mar 2018 16:36:18 +0200 |
parent | 8531:601681acea73 |
child | 8775:ae7cf011e46a |
line wrap: on
line source
local adns = require "net.adns"; local methods = {}; local resolver_mt = { __index = methods }; -- Find the next target to connect to, and -- pass it to cb() function methods:next(cb) if self.targets then if #self.targets == 0 then cb(nil); return; end local next_target = table.remove(self.targets, 1); cb(unpack(next_target, 1, 4)); return; end local targets = {}; local n = 2; local function ready() n = n - 1; if n > 0 then return; end self.targets = targets; self:next(cb); end -- Resolve DNS to target list local dns_resolver = adns.resolver(); dns_resolver:lookup(function (answer) if answer then for _, record in ipairs(answer) do table.insert(targets, { self.conn_type, record.a, self.port, self.extra }); end end ready(); end, self.hostname, "A", "IN"); dns_resolver:lookup(function (answer) if answer then for _, record in ipairs(answer) do table.insert(targets, { self.conn_type.."6", record.aaaa, self.port, self.extra }); end end ready(); end, self.hostname, "AAAA", "IN"); end local function new(hostname, port, conn_type, extra) return setmetatable({ hostname = hostname; port = port; conn_type = conn_type or "tcp"; extra = extra; }, resolver_mt); end return { new = new; };