Mercurial > prosody-modules
diff mod_bidi/mod_bidi.lua @ 893:602e4c509095
mod_bidi: Close conflicting outgoing sessions when bidi is initiated, not requested.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 12 Jan 2013 02:36:30 +0100 |
parents | 148865199003 |
children | d066987e00b7 |
line wrap: on
line diff
--- a/mod_bidi/mod_bidi.lua Fri Jan 11 01:08:31 2013 +0100 +++ b/mod_bidi/mod_bidi.lua Sat Jan 12 02:36:30 2013 +0100 @@ -28,10 +28,16 @@ local function new_bidi(origin) local bidi_session, remote_host; origin.log("debug", "Creating bidirectional session wrapper"); - if origin.direction == "incoming" then + if origin.direction == "incoming" 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("warn", "We already have an outgoing connection to %s, closing it...", origin.from_host); + conflicting_session:close{ condition = "conflict", text = "Replaced by bidirectional stream" } + s2smanager.destroy_session(conflicting_session); + end remote_host = origin.from_host; bidi_session = s2smanager.new_outgoing(origin.to_host, origin.from_host) - else -- outgoing + else -- outgoing -- then we create an "incoming" bidirectional session remote_host = origin.to_host; bidi_session = s2smanager.new_incoming(origin.conn) bidi_session.to_host = origin.from_host; @@ -75,12 +81,6 @@ local origin = event.session or event.origin; if not origin.is_bidi and not origin.bidi_session then module:log("debug", "%s requested bidirectional stream", origin.from_host); - if hosts[module.host].s2sout[origin.from_host] then - local conflicting_session = hosts[module.host].s2sout[origin.from_host] - conflicting_session.log("warn", "We already have an outgoing connection to %s, closing it...", origin.from_host); - conflicting_session:close{ condition = "conflict", text = "Replaced by bidirectional stream" } - s2smanager.destroy_session(conflicting_session); - end origin.do_bidi = true; return true; end