diff options
author | Matthew Wild <mwild1@gmail.com> | 2013-03-20 20:34:38 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2013-03-20 20:34:38 +0000 |
commit | 74531442db8df026d362695700a9ff23345dde96 (patch) | |
tree | d2c50b12dcf99d03ae30b92a7b72a9ea2203b31b /plugins/mod_s2s/mod_s2s.lua | |
parent | 58049837e7a14744f37d0250c3a854bc312d9106 (diff) | |
parent | 0c46e400afa7fef669b2f3a9ea2ed76633e8652b (diff) | |
download | prosody-74531442db8df026d362695700a9ff23345dde96.tar.gz prosody-74531442db8df026d362695700a9ff23345dde96.zip |
Merge 0.9->trunk
Diffstat (limited to 'plugins/mod_s2s/mod_s2s.lua')
-rw-r--r-- | plugins/mod_s2s/mod_s2s.lua | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/plugins/mod_s2s/mod_s2s.lua b/plugins/mod_s2s/mod_s2s.lua index 6d4900fa..8d99b855 100644 --- a/plugins/mod_s2s/mod_s2s.lua +++ b/plugins/mod_s2s/mod_s2s.lua @@ -248,10 +248,7 @@ function stream_callbacks.streamopened(session, attr) if session.secure and not session.cert_chain_status then check_cert_status(session); end - send("<?xml version='1.0'?>"); - 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 function session_close(session, reason, remote_reason) local log = session.log or log; if session.conn then if session.notopen then - session.sends2s("<?xml version='1.0'?>"); - 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 @@ local function session_close(session, reason, remote_reason) 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("<?xml version='1.0'?>"); + 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 @@ local function initialize_session(session) session.notopen = true; session.stream:reset(); end + + session.open_stream = session_open_stream; local filter = session.filter; function session.data(data) |