aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2019-11-24 04:30:32 +0100
committerKim Alvefur <zash@zash.se>2019-11-24 04:30:32 +0100
commit42b9614fe2f8c1e248cea33f852d3a2639614996 (patch)
tree8dfb11678b089cc7186d0175f603f1ae1ffbbb46 /net
parent7ed435c0548a7c735c74234f081e267302970be6 (diff)
parent9c9722935aeb5040995f0dbf56af455a1b146310 (diff)
downloadprosody-42b9614fe2f8c1e248cea33f852d3a2639614996.tar.gz
prosody-42b9614fe2f8c1e248cea33f852d3a2639614996.zip
Merge 0.11->trunk
Diffstat (limited to 'net')
-rw-r--r--net/resolvers/basic.lua28
1 files changed, 17 insertions, 11 deletions
diff --git a/net/resolvers/basic.lua b/net/resolvers/basic.lua
index 2499178a..147d2858 100644
--- a/net/resolvers/basic.lua
+++ b/net/resolvers/basic.lua
@@ -34,16 +34,6 @@ function methods:next(cb)
self:next(cb);
end
- local is_ip = inet_pton(self.hostname);
- if is_ip then
- if #is_ip == 16 then
- cb(self.conn_type.."6", self.hostname, self.port, self.extra);
- elseif #is_ip == 4 then
- cb(self.conn_type.."4", self.hostname, self.port, self.extra);
- end
- return;
- end
-
-- Resolve DNS to target list
local dns_resolver = adns.resolver();
dns_resolver:lookup(function (answer)
@@ -66,11 +56,27 @@ function methods:next(cb)
end
local function new(hostname, port, conn_type, extra)
+ local ascii_host = idna_to_ascii(hostname);
+ local targets = nil;
+
+ local is_ip = inet_pton(hostname);
+ if not is_ip and hostname:sub(1,1) == '[' then
+ is_ip = inet_pton(hostname:sub(2,-2));
+ end
+ if is_ip then
+ if #is_ip == 16 then
+ targets = { { conn_type.."6", hostname, port, extra } };
+ elseif #is_ip == 4 then
+ targets = { { conn_type.."4", hostname, port, extra } };
+ end
+ end
+
return setmetatable({
- hostname = idna_to_ascii(hostname);
+ hostname = ascii_host;
port = port;
conn_type = conn_type or "tcp";
extra = extra;
+ targets = targets;
}, resolver_mt);
end