aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2009-09-19 17:40:19 +0100
committerMatthew Wild <mwild1@gmail.com>2009-09-19 17:40:19 +0100
commit44ea588e9845a66134fe3bd4fab9e9c8ba4d66eb (patch)
treefc1abbb2105d8f799d7c15cc46a6491e49bc3b23 /core
parent97c697c83e00be46bb38e8b5e972f36aa900582e (diff)
downloadprosody-44ea588e9845a66134fe3bd4fab9e9c8ba4d66eb.tar.gz
prosody-44ea588e9845a66134fe3bd4fab9e9c8ba4d66eb.zip
s2smanager: Pass A-record lookups through adns module
Diffstat (limited to 'core')
-rw-r--r--core/s2smanager.lua30
1 files changed, 29 insertions, 1 deletions
diff --git a/core/s2smanager.lua b/core/s2smanager.lua
index 0589e024..b42662f3 100644
--- a/core/s2smanager.lua
+++ b/core/s2smanager.lua
@@ -173,7 +173,7 @@ 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, handle;
+ local handle;
handle = adns.lookup(function (answer)
handle = nil;
host_session.connecting = nil;
@@ -235,6 +235,34 @@ function attempt_connection(host_session, err)
end
function try_connect(host_session, connect_host, connect_port)
+ host_session.connecting = true;
+ local handle;
+ handle = adns.lookup(function (reply)
+ handle = nil;
+ host_session.connecting = nil;
+ if reply and reply[1] and reply[1].a then
+ log("debug", "DNS reply for %s gives us %s", connect_host, reply[1].a);
+ return make_connect(host_session, reply[1].a, connect_port);
+ else
+ log("debug", "DNS lookup failed to get a response for %s", connect_host);
+ if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can
+ log("debug", "No other records to try for %s - destroying", host_session.to_host);
+ destroy_session(host_session); -- End of the line, we can't
+ end
+ end
+ end, connect_host, "A", "IN");
+
+ -- Set handler for DNS timeout
+ add_task(dns_timeout, function ()
+ if handle then
+ adns.cancel(handle, true);
+ end
+ end);
+
+ return true;
+end
+
+function make_connect(host_session, connect_host, connect_port)
host_session.log("info", "Beginning new connection attempt to %s (%s:%d)", host_session.to_host, connect_host, connect_port);
-- Ok, we're going to try to connect