net.adns: Call handler for records already cached

Sat, 18 Apr 2009 17:48:30 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Sat, 18 Apr 2009 17:48:30 +0100
changeset 1010
0eed5db7758d
parent 1009
0c3ea09d6d6e
child 1011
943f2cd7e480
child 1012
9166d7a8c3c0

net.adns: Call handler for records already cached

net/adns.lua file | annotate | diff | comparison | revisions
--- a/net/adns.lua	Sat Apr 18 14:18:50 2009 +0100
+++ b/net/adns.lua	Sat Apr 18 17:48:30 2009 +0100
@@ -8,17 +8,21 @@
 module "adns"
 
 function lookup(handler, qname, qtype, qclass)
-	return dns.peek(qname, qtype, qclass) or
-		coroutine.wrap(function ()
-				log("debug", "Records for "..qname.." not in cache, sending query (%s)...", tostring(coroutine.running()));
+	return coroutine.wrap(function (peek)
+				if peek then
+					log("debug", "Records for %s already cached, using those...", qname);
+					handler(peek);
+					return;
+				end
+				log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running()));
 				dns.query(qname, qtype, qclass);
 				coroutine.yield(nil); -- Wait for reply
-				log("debug", "Reply for "..qname.." (%s)", tostring(coroutine.running()));
+				log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running()));
 				local ok, err = pcall(handler, dns.peek(qname, qtype, qclass));
 				if not ok then
 					log("debug", "Error in DNS response handler: %s", tostring(err));
 				end
-			end)();
+			end)(dns.peek(qname, qtype, qclass));
 end
 
 function new_async_socket(sock)

mercurial