Comparison

core/s2smanager.lua @ 1796:5f7b2f940816

s2smanager: Timeout unauthed s2s connections
author Matthew Wild <mwild1@gmail.com>
date Sun, 20 Sep 2009 15:16:25 +0100
parent 1793:1fc6c2822e6b
child 1797:a3b0f21c4e37
child 1805:7e41ad68fe3c
comparison
equal deleted inserted replaced
1793:1fc6c2822e6b 1796:5f7b2f940816
37 37
38 local dialback_secret = uuid_gen(); 38 local dialback_secret = uuid_gen();
39 39
40 local adns, dns = require "net.adns", require "net.dns"; 40 local adns, dns = require "net.adns", require "net.dns";
41 41
42 local connect_timeout = config.get("*", "core", "s2s_timeout") or 60;
42 local dns_timeout = config.get("*", "core", "dns_timeout") or 60; 43 local dns_timeout = config.get("*", "core", "dns_timeout") or 60;
43 44
44 incoming_s2s = {}; 45 incoming_s2s = {};
45 local incoming_s2s = incoming_s2s; 46 local incoming_s2s = incoming_s2s;
46 47
126 end 127 end
127 open_sessions = open_sessions + 1; 128 open_sessions = open_sessions + 1;
128 local w, log = conn.write, logger_init("s2sin"..tostring(conn):match("[a-f0-9]+$")); 129 local w, log = conn.write, logger_init("s2sin"..tostring(conn):match("[a-f0-9]+$"));
129 session.sends2s = function (t) log("debug", "sending: %s", tostring(t)); w(tostring(t)); end 130 session.sends2s = function (t) log("debug", "sending: %s", tostring(t)); w(tostring(t)); end
130 incoming_s2s[session] = true; 131 incoming_s2s[session] = true;
132 add_task(connect_timeout, function ()
133 if session.conn ~= conn or
134 session.type == "s2sin" then
135 return; -- Ok, we're connect[ed|ing]
136 end
137 -- Not connected, need to close session and clean up
138 (session.log or log)("warn", "Destroying incomplete session %s->%s due to inactivity",
139 session.from_host or "(unknown)", session.to_host or "(unknown)");
140 session:close("connection-timeout");
141 end);
131 return session; 142 return session;
132 end 143 end
133 144
134 function new_outgoing(from_host, to_host) 145 function new_outgoing(from_host, to_host)
135 local host_session = { to_host = to_host, from_host = from_host, notopen = true, type = "s2sout_unauthed", direction = "outgoing" }; 146 local host_session = { to_host = to_host, from_host = from_host, notopen = true, type = "s2sout_unauthed", direction = "outgoing" };
298 local w = conn.write; 309 local w = conn.write;
299 host_session.sends2s = function (t) log("debug", "sending: %s", tostring(t)); w(tostring(t)); end 310 host_session.sends2s = function (t) log("debug", "sending: %s", tostring(t)); w(tostring(t)); end
300 311
301 conn.write(format([[<stream:stream xmlns='jabber:server' xmlns:db='jabber:server:dialback' xmlns:stream='http://etherx.jabber.org/streams' from='%s' to='%s' version='1.0' xml:lang='en'>]], from_host, to_host)); 312 conn.write(format([[<stream:stream xmlns='jabber:server' xmlns:db='jabber:server:dialback' xmlns:stream='http://etherx.jabber.org/streams' from='%s' to='%s' version='1.0' xml:lang='en'>]], from_host, to_host));
302 log("debug", "Connection attempt in progress..."); 313 log("debug", "Connection attempt in progress...");
314 add_task(connect_timeout, function ()
315 if host_session.conn ~= conn or
316 host_session.type == "s2sout" or
317 host_session.connecting then
318 return; -- Ok, we're connect[ed|ing]
319 end
320 -- Not connected, need to close session and clean up
321 (host_session.log or log)("warn", "Destroying incomplete session %s->%s due to inactivity",
322 host_session.from_host or "(unknown)", host_session.to_host or "(unknown)");
323 host_session:close("connection-timeout");
324 end);
303 return true; 325 return true;
304 end 326 end
305 327
306 function streamopened(session, attr) 328 function streamopened(session, attr)
307 local send = session.sends2s; 329 local send = session.sends2s;