File

net/cqueues.lua @ 13278:aa17086a9c8a

mod_saslauth: Derive hash from certificate per tls-server-end-point This originally used a WIP implementation of cert:sigalg(), a method to retrieve certificate signature algorithm, but it was never submitted upstream. https://github.com/Zash/luasec/tree/zash/sigalg cert:getsignaturename() was merged in https://github.com/brunoos/luasec/commit/de393417b7c7566caf1e0a0ad54132942ac4f049 XEP-0440 v0.3.0 made implementing tls-server-end-point a MUST
author Kim Alvefur <zash@zash.se>
date Tue, 29 Jun 2021 00:22:36 +0200
parent 12974:ba409c67353b
line wrap: on
line source

-- Prosody IM
-- Copyright (C) 2014 Daurnimator
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
-- This module allows you to use cqueues with a net.server mainloop
--

local server = require "prosody.net.server";
local cqueues = require "cqueues";
local timer = require "prosody.util.timer";
assert(cqueues.VERSION >= 20150113, "cqueues newer than 20150113 required")

-- Create a single top level cqueue
local cq;

if server.cq then -- server provides cqueues object
	cq = server.cq;
elseif server.watchfd then
	cq = cqueues.new();
	local timeout = timer.add_task(cq:timeout() or 0, function ()
		-- FIXME It should be enough to reschedule this timeout instead of replacing it, but this does not work.  See https://issues.prosody.im/1572
		assert(cq:loop(0));
		return cq:timeout();
	end);
	server.watchfd(cq:pollfd(), function ()
		assert(cq:loop(0));
		local t = cq:timeout();
		if t then
			timer.stop(timeout);
			timeout = timer.add_task(cq:timeout(), function ()
				assert(cq:loop(0));
				return cq:timeout();
			end);
		end
	end);
else
	error "NYI"
end

return {
	cq = cq;
}