Diff

net/dns.lua @ 6632:855085439f7f

Merge 0.9->0.10
author Kim Alvefur <zash@zash.se>
date Sun, 26 Apr 2015 00:06:44 +0200
parent 6510:8273236a995f
parent 6631:45222bfb206f
child 6646:9795b8cf14f1
line wrap: on
line diff
--- a/net/dns.lua	Sun Apr 26 00:06:11 2015 +0200
+++ b/net/dns.lua	Sun Apr 26 00:06:44 2015 +0200
@@ -701,15 +701,20 @@
 end
 
 
-function resolver:peek (qname, qtype, qclass)    -- - - - - - - - - - - -  peek
+function resolver:peek (qname, qtype, qclass, n)    -- - - - - - - - - - - -  peek
 	qname, qtype, qclass = standardize(qname, qtype, qclass);
 	local rrs = get(self.cache, qclass, qtype, qname);
-	if not rrs then return nil; end
+	if not rrs then
+		if n then if n <= 0 then return end else n = 3 end
+		rrs = get(self.cache, qclass, "CNAME", qname);
+		if not (rrs and rrs[1]) then return end
+		return self:peek(rrs[1].cname, qtype, qclass, n - 1);
+	end
 	if prune(rrs, socket.gettime()) and qtype == '*' or not next(rrs) then
 		set(self.cache, qclass, qtype, qname, nil);
 		return nil;
 	end
-	if self.unsorted[rrs] then table.sort (rrs, comp_mx); end
+	if self.unsorted[rrs] then table.sort (rrs, comp_mx); self.unsorted[rrs] = nil; end
 	return rrs;
 end