changeset 1387:db2ff8f29472

mod_bidi: Add option for selectively not doing bidi with some hosts
author Kim Alvefur <zash@zash.se>
date Tue, 22 Apr 2014 19:19:58 +0200
parents 4557ac5c205d
children 6e1facedcb74
files mod_bidi/mod_bidi.lua
diffstat 1 files changed, 4 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mod_bidi/mod_bidi.lua	Sat Apr 19 15:16:19 2014 +0200
+++ b/mod_bidi/mod_bidi.lua	Tue Apr 22 19:19:58 2014 +0200
@@ -13,6 +13,7 @@
 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
@@ -69,6 +70,7 @@
 	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
 		module:log("debug", "Announcing support for bidirectional streams");
@@ -79,6 +81,7 @@
 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);
@@ -91,6 +94,7 @@
 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