Changeset

1204:dea89234e545

s2smanager: Timeout DNS requests after 60 seconds (or dns_timeout in config)
author Matthew Wild <mwild1@gmail.com>
date Tue, 26 May 2009 21:59:28 +0100
parents 1203:23725bfdeed5
children 1205:23a079f50cab
files core/s2smanager.lua
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/core/s2smanager.lua	Tue May 26 21:48:32 2009 +0100
+++ b/core/s2smanager.lua	Tue May 26 21:59:28 2009 +0100
@@ -11,6 +11,7 @@
 local hosts = hosts;
 local sessions = sessions;
 local core_process_stanza = function(a, b) core_process_stanza(a, b); end
+local add_task = require "util.timer".add_task;
 local socket = require "socket";
 local format = string.format;
 local t_insert, t_sort = table.insert, table.sort;
@@ -38,6 +39,8 @@
 
 local adns = require "net.adns";
 
+local dns_timeout = config.get("*", "core", "dns_timeout") or 60;
+
 incoming_s2s = {};
 local incoming_s2s = incoming_s2s;
 
@@ -169,8 +172,9 @@
 	if not err then -- This is our first attempt
 		log("debug", "First attempt to connect to %s, starting with SRV lookup...", to_host);
 		host_session.connecting = true;
-		local answer = 
-		adns.lookup(function (answer)
+		local answer, handle;
+		handle = adns.lookup(function (answer)
+			handle = nil;
 			host_session.connecting = nil;
 			if answer then
 				log("debug", to_host.." has SRV records, handling...");
@@ -193,6 +197,14 @@
 			-- Try with SRV, or just the plain hostname if no SRV
 			return try_connect(host_session, connect_host, connect_port);
 		end, "_xmpp-server._tcp."..connect_host..".", "SRV");
+		
+		-- Set handler for DNS timeout
+		add_task(dns_timeout, function ()
+			if handle then
+				adns.cancel(handle, true);
+			end
+		end);
+		
 		log("debug", "DNS lookup for %s sent, waiting for response before we can connect", to_host);
 		return true; -- Attempt in progress
 	elseif host_session.srv_hosts and #host_session.srv_hosts > host_session.srv_choice then -- Not our first attempt, and we also have SRV