File

plugins/mod_turn_external.lua @ 12352:bad813103cd4

prosody.cfg.lua.dist: Remove comment about mod_*.lua above modules_enabled This is a very old statement, but people generally don't need to check for the files, and shouldn't be encouraged to put them in Prosody's source dir. The installer will be the way forward for most people, and hg for the rest. Manually moving files into the right place is not something most users should be doing.
author Matthew Wild <mwild1@gmail.com>
date Thu, 03 Mar 2022 10:24:59 +0000
parent 12290:aa7a8aa64d3f
child 12437:9f5d0b77e3df
line wrap: on
line source

local set = require "util.set";

local secret = module:get_option_string("turn_external_secret");
local host = module:get_option_string("turn_external_host", module.host);
local user = module:get_option_string("turn_external_user");
local port = module:get_option_number("turn_external_port", 3478);
local ttl = module:get_option_number("turn_external_ttl", 86400);
local tcp = module:get_option_boolean("turn_external_tcp", false);
local tls_port = module:get_option_number("turn_external_tls_port");

if not secret then error("mod_" .. module.name .. " requires that 'turn_external_secret' be set") end

local services = set.new({ "stun-udp"; "turn-udp" });
if tcp then
	services:add("stun-tcp");
	services:add("turn-tcp");
end
if tls_port then
	services:add("turns-tcp");
end

module:depends "external_services";

for _, type in ipairs({ "stun"; "turn"; "turns" }) do
	for _, transport in ipairs({"udp"; "tcp"}) do
		if services:contains(type .. "-" .. transport) then
			module:add_item("external_service", {
				type = type;
				transport = transport;
				host = host;
				port = type == "turns" and tls_port or port;

				username = type == "turn" and user or nil;
				secret = type == "turn" and secret or nil;
				ttl = type == "turn" and ttl or nil;
			})
		end
	end
end