mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
authorKim Alvefur <zash@zash.se>
Thu, 21 Jan 2021 23:13:37 +0100
changeset 11603 ed405b6357a8
parent 11602 081e550b973a
child 11604 a02c277eb97a
mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
CHANGES
plugins/mod_turn_external.lua
--- a/CHANGES	Thu Jun 10 15:33:52 2021 +0200
+++ b/CHANGES	Thu Jan 21 23:13:37 2021 +0100
@@ -17,7 +17,8 @@
 -   `daemonize` option deprecated
 -   SASL DIGEST-MD5 removed
 -   Switch to libunbound for DNS queries
--   mod_external_services (XEP-0215)
+-   mod_external_services (generic XEP-0215)
+-   mod_turn_external for easy STUN+TURN XEP-0215 setup
 -   util.error for encapsulating errors
 -   MUC: support for XEP-0421 occupant identifiers
 -   mod_http_file_share: File sharing via HTTP (XEP-0363)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/mod_turn_external.lua	Thu Jan 21 23:13:37 2021 +0100
@@ -0,0 +1,28 @@
+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 services = module:get_option_set("turn_external_services", {"stun-udp"; "turn-udp"});
+
+if not secret then error("mod_" .. module.name .. " requires that 'turn_external_secret' be set") end
+
+module:depends "external_services";
+
+for _, type in ipairs({"stun"; "turn"}) 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 = 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