diff options
author | Matthew Wild <mwild1@gmail.com> | 2009-05-26 21:59:28 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2009-05-26 21:59:28 +0100 |
commit | 0172110483d17ebc356f031fc52b8f1f5b269081 (patch) | |
tree | 5d306020b42d1a621bf22f1e4295a3a648255d80 /core | |
parent | d2197f6ca335ee102665743a4efa157bf5b2dfa9 (diff) | |
download | prosody-0172110483d17ebc356f031fc52b8f1f5b269081.tar.gz prosody-0172110483d17ebc356f031fc52b8f1f5b269081.zip |
s2smanager: Timeout DNS requests after 60 seconds (or dns_timeout in config)
Diffstat (limited to 'core')
-rw-r--r-- | core/s2smanager.lua | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/core/s2smanager.lua b/core/s2smanager.lua index e9589340..386e0794 100644 --- a/core/s2smanager.lua +++ b/core/s2smanager.lua @@ -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 dialback_secret = sha256_hash(tostring{} .. math.random() .. socket.gettim 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 @@ function attempt_connection(host_session, err) 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 @@ function attempt_connection(host_session, err) -- 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 |