From a286ed0a57ae9b2f0cceb0fc0756a8db95708cc4 Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Sun, 24 Nov 2019 04:23:51 +0100
Subject: net.resolvers.basic: Move IP literal check to constructor

This is to prepare for fixing #1459. An IPv6 literal in [ ] brackets
does not pass IDNA and resolving it fails there.
---
 net/resolvers/basic.lua | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/net/resolvers/basic.lua b/net/resolvers/basic.lua
index f37e74a2..e3a94382 100644
--- a/net/resolvers/basic.lua
+++ b/net/resolvers/basic.lua
@@ -33,16 +33,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)
@@ -65,11 +55,24 @@ 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 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
 
-- 
cgit v1.2.3