changeset 4894:bfa2cca2bdd5

mod_turn_external: Import from prosody trunk @ ed23bbf3b946
author Matthew Wild <mwild1@gmail.com>
date Mon, 14 Feb 2022 14:36:32 +0000
parents d4ce29c772ac
children 2542fd80cd15
files mod_turn_external/README.markdown mod_turn_external/mod_turn_external.lua
diffstat 2 files changed, 51 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_turn_external/README.markdown	Mon Feb 14 14:36:32 2022 +0000
@@ -0,0 +1,12 @@
+---
+summary: Advertise an external TURN service
+...
+
+This module advertises STUN/TURN service to clients via XEP-0215 (it utilizes
+mod_external_services to do so, which will be automatically loaded by this
+module and must be available).
+
+This module is included with Prosody 0.12 but made available here for older
+versions.
+
+Documentation is available on the [Prosody site][doc:modules:mod_turn_external].
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_turn_external/mod_turn_external.lua	Mon Feb 14 14:36:32 2022 +0000
@@ -0,0 +1,39 @@
+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_boolean("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