# HG changeset patch # User Kim Alvefur # Date 1363452403 -3600 # Node ID 901ed253bbf703beeb77cb15920f421aaadab0ef # Parent fba042a2c2286a0d16d1c7887e5fd82d0c278aaf mod_s2s, mod_saslauth, mod_compression: Refactor to have common code for opening streams diff -r fba042a2c228 -r 901ed253bbf7 plugins/mod_compression.lua --- a/plugins/mod_compression.lua Fri Mar 15 09:51:43 2013 +0100 +++ b/plugins/mod_compression.lua Sat Mar 16 17:46:43 2013 +0100 @@ -141,10 +141,7 @@ -- setup decompression for session.data setup_decompression(session, inflate_stream); session:reset_stream(); - local default_stream_attr = {xmlns = "jabber:server", ["xmlns:stream"] = "http://etherx.jabber.org/streams", - ["xmlns:db"] = 'jabber:server:dialback', version = "1.0", to = session.to_host, from = session.from_host}; - session.sends2s(""); - session.sends2s(st.stanza("stream:stream", default_stream_attr):top_tag()); + session:open_stream(); session.compressed = true; return true; end diff -r fba042a2c228 -r 901ed253bbf7 plugins/mod_s2s/mod_s2s.lua --- a/plugins/mod_s2s/mod_s2s.lua Fri Mar 15 09:51:43 2013 +0100 +++ b/plugins/mod_s2s/mod_s2s.lua Sat Mar 16 17:46:43 2013 +0100 @@ -248,10 +248,7 @@ if session.secure and not session.cert_chain_status then check_cert_status(session); end - send(""); - send(st.stanza("stream:stream", { xmlns='jabber:server', - ["xmlns:db"]= hosts[to].modules.dialback and 'jabber:server:dialback' or nil, - ["xmlns:stream"]='http://etherx.jabber.org/streams', id=session.streamid, from=to, to=from, version=(session.version > 0 and "1.0" or nil) }):top_tag()); + session:open_stream() if session.version >= 1.0 then local features = st.stanza("stream:features"); @@ -348,8 +345,7 @@ local log = session.log or log; if session.conn then if session.notopen then - session.sends2s(""); - session.sends2s(st.stanza("stream:stream", default_stream_attr):top_tag()); + session:open_stream() end if reason then -- nil == no err, initiated by us, false == initiated by remote if type(reason) == "string" then -- assume stream error @@ -396,6 +392,27 @@ end end +function session_open_stream(session, from, to) + local from = from or session.from_host; + local to = to or session.to_host; + local attr = { + ["xmlns:stream"] = 'http://etherx.jabber.org/streams', + xmlns = 'jabber:server', + version = session.version and (session.version > 0 and "1.0" or nil), + ["xml:lang"] = 'en', + id = session.streamid, + from = from, to = to, + } + local local_host = session.direction == "outgoing" and from or to; + if not local_host or hosts[local_host].modules.dialback then + attr["xmlns:db"] = 'jabber:server:dialback'; + end + + session.sends2s(""); + session.sends2s(st.stanza("stream:stream", attr):top_tag()); + return true; +end + -- Session initialization logic shared by incoming and outgoing local function initialize_session(session) local stream = new_xmpp_stream(session, stream_callbacks); @@ -407,6 +424,8 @@ session.notopen = true; session.stream:reset(); end + + session.open_stream = session_open_stream; local filter = session.filter; function session.data(data) diff -r fba042a2c228 -r 901ed253bbf7 plugins/mod_s2s/s2sout.lib.lua --- a/plugins/mod_s2s/s2sout.lib.lua Fri Mar 15 09:51:43 2013 +0100 +++ b/plugins/mod_s2s/s2sout.lib.lua Sat Mar 16 17:46:43 2013 +0100 @@ -44,15 +44,9 @@ return a.priority < b.priority or (a.priority == b.priority and a.weight > b.weight); end -local function session_open_stream(session, from, to) - session.sends2s(st.stanza("stream:stream", { - xmlns='jabber:server', ["xmlns:db"]='jabber:server:dialback', - ["xmlns:stream"]='http://etherx.jabber.org/streams', - from=from, to=to, version='1.0', ["xml:lang"]='en'}):top_tag()); -end - function s2sout.initiate_connection(host_session) initialize_filters(host_session); + host_session.version = 1; host_session.open_stream = session_open_stream; -- Kick the connection attempting machine into life diff -r fba042a2c228 -r 901ed253bbf7 plugins/mod_saslauth.lua --- a/plugins/mod_saslauth.lua Fri Mar 15 09:51:43 2013 +0100 +++ b/plugins/mod_saslauth.lua Sat Mar 16 17:46:43 2013 +0100 @@ -88,11 +88,7 @@ module:log("debug", "SASL EXTERNAL with %s succeeded", session.to_host); session.external_auth = "succeeded" session:reset_stream(); - - local default_stream_attr = {xmlns = "jabber:server", ["xmlns:stream"] = "http://etherx.jabber.org/streams", - ["xmlns:db"] = 'jabber:server:dialback', version = "1.0", to = session.to_host, from = session.from_host}; - session.sends2s(""); - session.sends2s(st.stanza("stream:stream", default_stream_attr):top_tag()); + session:open_stream(); s2s_make_authenticated(session, session.to_host); return true;