# HG changeset patch # User Kim Alvefur # Date 1338307368 -7200 # Node ID d1fdc545f8b2a61a0722053657ec6f402d2c68ad # Parent 9a01c6bc435ebb355d86c962c6bc974382dcb9c7 mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available. diff -r 9a01c6bc435e -r d1fdc545f8b2 plugins/mod_s2s/s2sout.lib.lua --- a/plugins/mod_s2s/s2sout.lib.lua Tue May 29 17:20:02 2012 +0200 +++ b/plugins/mod_s2s/s2sout.lib.lua Tue May 29 18:02:48 2012 +0200 @@ -25,6 +25,7 @@ local log = module._log; local sources = {}; +local has_ipv4, has_ipv6; local dns_timeout = module:get_option_number("dns_timeout", 15); dns.settimeout(dns_timeout); @@ -114,7 +115,7 @@ log("debug", "Best record found, will connect to %s:%d", connect_host, connect_port); end else - log("debug", to_host.." has no SRV records, falling back to A"); + log("debug", to_host.." has no SRV records, falling back to A/AAAA"); end -- Try with SRV, or just the plain hostname if no SRV local ok, err = s2sout.try_connect(host_session, connect_host, connect_port); @@ -171,6 +172,7 @@ local handle4, handle6; local has_other = false; + if has_ipv4 then handle4 = adns.lookup(function (reply, err) handle4 = nil; @@ -214,7 +216,11 @@ has_other = true; end end, connect_host, "A", "IN"); + else + has_other = true; + end + if has_ipv6 then handle6 = adns.lookup(function (reply, err) handle6 = nil; @@ -246,6 +252,9 @@ has_other = true; end end, connect_host, "AAAA", "IN"); + else + has_other = true; + end return true; elseif host_session.ip_hosts and #host_session.ip_hosts > host_session.ip_choice then -- Not our first attempt, and we also have IPs left to try @@ -347,6 +356,13 @@ sources[#sources + 1] = new_ip(source, (source:find(":") and "IPv6") or "IPv4"); end end + for i = 1,#sources do + if sources[i].proto == "IPv6" then + has_ipv6 = true; + elseif sources[i].proto == "IPv4" then + has_ipv4 = true; + end + end end); return s2sout;