aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2021-01-21 23:13:37 +0100
committerKim Alvefur <zash@zash.se>2021-01-21 23:13:37 +0100
commitf36c48ffb0f7cfc18da8ab32c9f5dc61be9ff3f5 (patch)
tree819e60bbcfb85ce575545d46bfde37e7d1db1a34
parentcf5c477c8f18defebe4ab13a237115740b652bed (diff)
downloadprosody-f36c48ffb0f7cfc18da8ab32c9f5dc61be9ff3f5.tar.gz
prosody-f36c48ffb0f7cfc18da8ab32c9f5dc61be9ff3f5.zip
mod_turn_external: Simple module to offer TURN(+STUN) via mod_external_services
-rw-r--r--CHANGES3
-rw-r--r--plugins/mod_turn_external.lua28
2 files changed, 30 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 9a6cb1d4..266d1cbe 100644
--- a/CHANGES
+++ b/CHANGES
@@ -17,7 +17,8 @@ TRUNK
- `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)
diff --git a/plugins/mod_turn_external.lua b/plugins/mod_turn_external.lua
new file mode 100644
index 00000000..63b36175
--- /dev/null
+++ b/plugins/mod_turn_external.lua
@@ -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