Changeset

6030:036b85acf2ff

mod_bidi: Obsolete mod_bidi.lua
author Menel <menel@snikket.de>
date Thu, 31 Oct 2024 13:19:10 +0100
parents 6029:4ac59707bcfb
children 6031:2c6b14207271
files mod_bidi/README.md mod_bidi/mod_bidi.lua
diffstat 2 files changed, 3 insertions(+), 154 deletions(-) [+]
line wrap: on
line diff
--- a/mod_bidi/README.md	Wed Oct 30 12:54:11 2024 +0100
+++ b/mod_bidi/README.md	Thu Oct 31 13:19:10 2024 +0100
@@ -1,26 +1,10 @@
 ---
 labels:
-- Stage-Stable
+- Stage-Obsolete
+superseded_by: mod_s2s_bidi
 summary: "XEP-0288: Bidirectional Server-to-Server Connections"
 ---
 
 ::: {.alert .alert-warning}
-This module is unreliable when used with Prosody 0.12, switch to
-[mod_s2s_bidi][doc:modules:mod_s2s_bidi]
+This module is obsolete, see [mod_s2s_bidi][doc:modules:mod_s2s_bidi] that is shipped with prosody since Version 0.12.
 :::
-
-# Introduction
-
-This module implements [XEP-0288: Bidirectional Server-to-Server
-Connections](http://xmpp.org/extensions/xep-0288.html). It allows
-servers to use a single connection for sending stanzas to each other,
-instead of two connections (one for stanzas in each direction).
-
-Install and enable it like any other module. It has no configuration.
-
-# Compatibility
-
-  ------ -------------------------------------------
-  0.12   Bidi available natively with [mod_s2s_bidi][doc:modules:mod_s2s_bidi]
-  0.11   Works
-  ------ -------------------------------------------
--- a/mod_bidi/mod_bidi.lua	Wed Oct 30 12:54:11 2024 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
--- Bidirectional Server-to-Server Connections
--- http://xmpp.org/extensions/xep-0288.html
--- Copyright (C) 2013 Kim Alvefur
---
--- This file is MIT/X11 licensed.
---
-local add_filter = require "util.filters".add_filter;
-local st = require "util.stanza";
-local jid_split = require"util.jid".prepped_split;
-local core_process_stanza = prosody.core_process_stanza;
-local traceback = debug.traceback;
-local hosts = hosts;
-local xmlns_bidi_feature = "urn:xmpp:features:bidi"
-local xmlns_bidi = "urn:xmpp:bidi";
-local secure_only = module:get_option_boolean("secure_bidi_only", true);
-local disable_bidi_for = module:get_option_set("no_bidi_with", { });
-local bidi_sessions = module:shared"sessions-cache";
-
-local function handleerr(err) log("error", "Traceback[s2s]: %s: %s", tostring(err), traceback()); end
-local function handlestanza(session, stanza)
-	if stanza.attr.xmlns == "jabber:client" then --COMPAT: Prosody pre-0.6.2 may send jabber:client
-		stanza.attr.xmlns = nil;
-	end
-	-- stanza = session.filter("stanzas/in", stanza);
-	if stanza then
-		return xpcall(function () return core_process_stanza(session, stanza) end, handleerr);
-	end
-end
-
-local function new_bidi(origin)
-	if origin.type == "s2sin" then -- then we create an "outgoing" bidirectional session
-		local conflicting_session = hosts[origin.to_host].s2sout[origin.from_host]
-		if conflicting_session then
-			conflicting_session.log("info", "We already have an outgoing connection to %s, closing it...", origin.from_host);
-			conflicting_session:close{ condition = "conflict", text = "Replaced by bidirectional stream" }
-		end
-		bidi_sessions[origin.from_host] = origin;
-		origin.is_bidi = true;
-		origin.outgoing = true;
-	elseif origin.type == "s2sout" then -- handle incoming stanzas correctly
-		local bidi_session = {
-			type = "s2sin"; direction = "incoming";
-			incoming = true;
-			is_bidi = true; orig_session = origin;
-			to_host = origin.from_host;
-			from_host = origin.to_host;
-			hosts = {};
-		}
-		origin.bidi_session = bidi_session;
-		setmetatable(bidi_session, { __index = origin });
-		module:fire_event("s2s-authenticated", { session = bidi_session, host = origin.to_host });
-		local remote_host = origin.to_host;
-		add_filter(origin, "stanzas/in", function(stanza)
-			if stanza.attr.xmlns ~= nil then return stanza end
-			local _, host = jid_split(stanza.attr.from);
-			if host ~= remote_host then return stanza end
-			handlestanza(bidi_session, stanza);
-		end, 1);
-	end
-end
-
-module:hook("route/remote", function(event)
-	local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza;
-	if from_host ~= module.host then return end
-	local to_session = bidi_sessions[to_host];
-	if not to_session or to_session.type ~= "s2sin" then return end
-	if to_session.sends2s(stanza) then return true end
-end, -2);
-
--- Incoming s2s
-module:hook("s2s-stream-features", function(event)
-	local origin, features = event.origin, event.features;
-	if not origin.is_bidi and not origin.bidi_session and not origin.do_bidi
-	and not hosts[module.host].s2sout[origin.from_host]
-	and not disable_bidi_for:contains(origin.from_host)
-	and (not secure_only or (origin.cert_chain_status == "valid"
-	and origin.cert_identity_status == "valid")) then
-		if origin.incoming == true then
-			module:log("warn", "This module can now be replaced by mod_s2s_bidi which is included with Prosody");
-		end
-		module:log("debug", "Announcing support for bidirectional streams");
-		features:tag("bidi", { xmlns = xmlns_bidi_feature }):up();
-	end
-end);
-
-module:hook("stanza/urn:xmpp:bidi:bidi", function(event)
-	local origin = event.session or event.origin;
-	if not origin.is_bidi and not origin.bidi_session
-	and not disable_bidi_for:contains(origin.from_host)
-	and (not secure_only or origin.cert_chain_status == "valid"
-	and origin.cert_identity_status == "valid") then
-		module:log("debug", "%s requested bidirectional stream", origin.from_host);
-		origin.do_bidi = true;
-		return true;
-	end
-end);
-
--- Outgoing s2s
-module:hook("stanza/http://etherx.jabber.org/streams:features", function(event)
-	local origin = event.session or event.origin;
-	if not ( origin.bidi_session or origin.is_bidi or origin.do_bidi)
-	and not disable_bidi_for:contains(origin.to_host)
-	and event.stanza:get_child("bidi", xmlns_bidi_feature)
-	and (not secure_only or origin.cert_chain_status == "valid"
-	and origin.cert_identity_status == "valid") then
-		if origin.outgoing == true then
-			module:log("warn", "This module can now be replaced by mod_s2s_bidi which is included with Prosody");
-		end
-		module:log("debug", "%s supports bidirectional streams", origin.to_host);
-		origin.sends2s(st.stanza("bidi", { xmlns = xmlns_bidi }));
-		origin.do_bidi = true;
-	end
-end, 160);
-
-function enable_bidi(event)
-	local session = event.session;
-	if session.do_bidi and not ( session.is_bidi or session.bidi_session ) then
-		session.do_bidi = nil;
-		new_bidi(session);
-	end
-end
-
-module:hook("s2sin-established", enable_bidi);
-module:hook("s2sout-established", enable_bidi);
-
-function disable_bidi(event)
-	local session = event.session;
-	if session.type == "s2sin" then
-		bidi_sessions[session.from_host] = nil;
-	end
-end
-
-module:hook("s2sin-destroyed", disable_bidi);
-module:hook("s2sout-destroyed", disable_bidi);
-