net/resolvers/basic.lua
branch0.11
changeset 10440 0d702ec77f0c
parent 10404 4c2d789a106b
child 10441 fcfc8f4d14a8
equal deleted inserted replaced
10437:7777f25d5266 10440:0d702ec77f0c
    31 		if n > 0 then return; end
    31 		if n > 0 then return; end
    32 		self.targets = targets;
    32 		self.targets = targets;
    33 		self:next(cb);
    33 		self:next(cb);
    34 	end
    34 	end
    35 
    35 
    36 	local is_ip = inet_pton(self.hostname);
       
    37 	if is_ip then
       
    38 		if #is_ip == 16 then
       
    39 			cb(self.conn_type.."6", self.hostname, self.port, self.extra);
       
    40 		elseif #is_ip == 4 then
       
    41 			cb(self.conn_type.."4", self.hostname, self.port, self.extra);
       
    42 		end
       
    43 		return;
       
    44 	end
       
    45 
       
    46 	-- Resolve DNS to target list
    36 	-- Resolve DNS to target list
    47 	local dns_resolver = adns.resolver();
    37 	local dns_resolver = adns.resolver();
    48 	dns_resolver:lookup(function (answer)
    38 	dns_resolver:lookup(function (answer)
    49 		if answer then
    39 		if answer then
    50 			for _, record in ipairs(answer) do
    40 			for _, record in ipairs(answer) do
    63 		ready();
    53 		ready();
    64 	end, self.hostname, "AAAA", "IN");
    54 	end, self.hostname, "AAAA", "IN");
    65 end
    55 end
    66 
    56 
    67 local function new(hostname, port, conn_type, extra)
    57 local function new(hostname, port, conn_type, extra)
       
    58 	local ascii_host = idna_to_ascii(hostname);
       
    59 	local targets = nil;
       
    60 
       
    61 	local is_ip = inet_pton(hostname);
       
    62 	if is_ip then
       
    63 		if #is_ip == 16 then
       
    64 			targets = { { conn_type.."6", hostname, port, extra } };
       
    65 		elseif #is_ip == 4 then
       
    66 			targets = { { conn_type.."4", hostname, port, extra } };
       
    67 		end
       
    68 	end
       
    69 
    68 	return setmetatable({
    70 	return setmetatable({
    69 		hostname = idna_to_ascii(hostname);
    71 		hostname = ascii_host;
    70 		port = port;
    72 		port = port;
    71 		conn_type = conn_type or "tcp";
    73 		conn_type = conn_type or "tcp";
    72 		extra = extra;
    74 		extra = extra;
       
    75 		targets = targets;
    73 	}, resolver_mt);
    76 	}, resolver_mt);
    74 end
    77 end
    75 
    78 
    76 return {
    79 return {
    77 	new = new;
    80 	new = new;