File

net/resolvers/chain.lua @ 13408:d7857ef7843a 0.12

mod_disco: Advertise disco#info and #items on bare JIDs to fix #1664 Having to add these in *there* places seems less than ideal. I would also think that advertising disco#info is a bit redundant, since it is a requirement for everything in XMPP and if it was missing you would get an error back.
author Kim Alvefur <zash@zash.se>
date Sun, 17 Dec 2023 18:55:14 +0100
parent 12204:7c397a49d163
line wrap: on
line source


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.resolvers then
		if not self.resolver then
			if #self.resolvers == 0 then
				cb(nil);
				return;
			end
			local next_resolver = table.remove(self.resolvers, 1);
			self.resolver = next_resolver;
		end
		self.resolver:next(function (...)
			if self.resolver then
				self.last_error = self.resolver.last_error;
			end
			if ... == nil then
				self.resolver = nil;
				self:next(cb);
			else
				cb(...);
			end
		end);
		return;
	end
end

local function new(resolvers)
	return setmetatable({ resolvers = resolvers }, resolver_mt);
end

return {
	new = new;
};