Comparison

plugins/s2s/mod_s2s.lua @ 4568:aae7a62671de

mod_s2s: port functionality once in s2smanager.
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 24 Feb 2012 15:21:21 +0000
parent 4555:3dce04129693
child 4570:9612abc89dd1
comparison
equal deleted inserted replaced
4567:24617f360200 4568:aae7a62671de
12 local xpcall, traceback = xpcall, debug.traceback; 12 local xpcall, traceback = xpcall, debug.traceback;
13 13
14 local add_task = require "util.timer".add_task; 14 local add_task = require "util.timer".add_task;
15 local st = require "util.stanza"; 15 local st = require "util.stanza";
16 local initialize_filters = require "util.filters".initialize; 16 local initialize_filters = require "util.filters".initialize;
17 local nameprep = require "util.encodings".stringprep.nameprep;
17 local new_xmpp_stream = require "util.xmppstream".new; 18 local new_xmpp_stream = require "util.xmppstream".new;
18 local s2s_new_incoming = require "core.s2smanager".new_incoming; 19 local s2s_new_incoming = require "core.s2smanager".new_incoming;
19 local s2s_new_outgoing = require "core.s2smanager".new_outgoing; 20 local s2s_new_outgoing = require "core.s2smanager".new_outgoing;
20 local s2s_destroy_session = require "core.s2smanager".destroy_session; 21 local s2s_destroy_session = require "core.s2smanager".destroy_session;
22 local uuid_gen = require "util.uuid".generate;
21 23
22 local s2sout = module:require("s2sout"); 24 local s2sout = module:require("s2sout");
23 25
24 local connect_timeout = module:get_option_number("s2s_timeout", 60); 26 local connect_timeout = module:get_option_number("s2s_timeout", 60);
25 27
92 94
93 -- Store in buffer 95 -- Store in buffer
94 host_session.bounce_sendq = bounce_sendq; 96 host_session.bounce_sendq = bounce_sendq;
95 host_session.sendq = { {tostring(stanza), stanza.attr.type ~= "error" and stanza.attr.type ~= "result" and st.reply(stanza)} }; 97 host_session.sendq = { {tostring(stanza), stanza.attr.type ~= "error" and stanza.attr.type ~= "result" and st.reply(stanza)} };
96 log("debug", "stanza [%s] queued until connection complete", tostring(stanza.name)); 98 log("debug", "stanza [%s] queued until connection complete", tostring(stanza.name));
99 s2sout.initiate_connection(host_session);
97 if (not host_session.connecting) and (not host_session.conn) then 100 if (not host_session.connecting) and (not host_session.conn) then
98 log("warn", "Connection to %s failed already, destroying session...", to_host); 101 log("warn", "Connection to %s failed already, destroying session...", to_host);
99 if not s2s_destroy_session(host_session, "Connection failed") then 102 if not s2s_destroy_session(host_session, "Connection failed") then
100 -- Already destroyed, we need to bounce our stanza 103 -- Already destroyed, we need to bounce our stanza
101 host_session:bounce_sendq(host_session.destruction_reason); 104 host_session:bounce_sendq(host_session.destruction_reason);
102 end 105 end
103 return false; 106 return false;
104 end 107 end
105 s2sout.initiate_connection(host_session);
106 end 108 end
107 return true; 109 return true;
108 end 110 end
109 111
110 module:hook("route/remote", function (event) 112 module:hook("route/remote", function (event)
187 end 189 end
188 190
189 if session.secure and not session.cert_chain_status then check_cert_status(session); end 191 if session.secure and not session.cert_chain_status then check_cert_status(session); end
190 192
191 send("<?xml version='1.0'?>"); 193 send("<?xml version='1.0'?>");
192 send(stanza("stream:stream", { xmlns='jabber:server', ["xmlns:db"]='jabber:server:dialback', 194 send(stanza.stanza("stream:stream", { xmlns='jabber:server', ["xmlns:db"]='jabber:server:dialback',
193 ["xmlns:stream"]='http://etherx.jabber.org/streams', id=session.streamid, from=session.to_host, to=session.from_host, version=(session.version > 0 and "1.0" or nil) }):top_tag()); 195 ["xmlns:stream"]='http://etherx.jabber.org/streams', id=session.streamid, from=session.to_host, to=session.from_host, version=(session.version > 0 and "1.0" or nil) }):top_tag());
194 if session.version >= 1.0 then 196 if session.version >= 1.0 then
195 local features = st.stanza("stream:features"); 197 local features = st.stanza("stream:features");
196 198
197 if session.to_host then 199 if session.to_host then
233 s2s_mark_connected(session); 235 s2s_mark_connected(session);
234 end 236 end
235 end 237 end
236 end 238 end
237 session.notopen = nil; 239 session.notopen = nil;
240 session.send = function(stanza) send_to_host(session.to_host, session.from_host, stanza); end;
238 end 241 end
239 242
240 function stream_callbacks.streamclosed(session) 243 function stream_callbacks.streamclosed(session)
241 (session.log or log)("debug", "Received </stream:stream>"); 244 (session.log or log)("debug", "Received </stream:stream>");
242 session:close(); 245 session:close();