diff options
author | Kim Alvefur <zash@zash.se> | 2019-11-24 04:30:32 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2019-11-24 04:30:32 +0100 |
commit | 42b9614fe2f8c1e248cea33f852d3a2639614996 (patch) | |
tree | 8dfb11678b089cc7186d0175f603f1ae1ffbbb46 /net | |
parent | 7ed435c0548a7c735c74234f081e267302970be6 (diff) | |
parent | 9c9722935aeb5040995f0dbf56af455a1b146310 (diff) | |
download | prosody-42b9614fe2f8c1e248cea33f852d3a2639614996.tar.gz prosody-42b9614fe2f8c1e248cea33f852d3a2639614996.zip |
Merge 0.11->trunk
Diffstat (limited to 'net')
-rw-r--r-- | net/resolvers/basic.lua | 28 |
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 |