Comparison

net/adns.lua @ 1005:0eed5db7758d

net.adns: Call handler for records already cached
author Matthew Wild <mwild1@gmail.com>
date Sat, 18 Apr 2009 17:48:30 +0100
parent 980:b52d442161f2
child 1203:23725bfdeed5
comparison
equal deleted inserted replaced
1004:0c3ea09d6d6e 1005:0eed5db7758d
6 local coroutine, tostring, pcall = coroutine, tostring, pcall; 6 local coroutine, tostring, pcall = coroutine, tostring, pcall;
7 7
8 module "adns" 8 module "adns"
9 9
10 function lookup(handler, qname, qtype, qclass) 10 function lookup(handler, qname, qtype, qclass)
11 return dns.peek(qname, qtype, qclass) or 11 return coroutine.wrap(function (peek)
12 coroutine.wrap(function () 12 if peek then
13 log("debug", "Records for "..qname.." not in cache, sending query (%s)...", tostring(coroutine.running())); 13 log("debug", "Records for %s already cached, using those...", qname);
14 handler(peek);
15 return;
16 end
17 log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running()));
14 dns.query(qname, qtype, qclass); 18 dns.query(qname, qtype, qclass);
15 coroutine.yield(nil); -- Wait for reply 19 coroutine.yield(nil); -- Wait for reply
16 log("debug", "Reply for "..qname.." (%s)", tostring(coroutine.running())); 20 log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running()));
17 local ok, err = pcall(handler, dns.peek(qname, qtype, qclass)); 21 local ok, err = pcall(handler, dns.peek(qname, qtype, qclass));
18 if not ok then 22 if not ok then
19 log("debug", "Error in DNS response handler: %s", tostring(err)); 23 log("debug", "Error in DNS response handler: %s", tostring(err));
20 end 24 end
21 end)(); 25 end)(dns.peek(qname, qtype, qclass));
22 end 26 end
23 27
24 function new_async_socket(sock) 28 function new_async_socket(sock)
25 local newconn = {}; 29 local newconn = {};
26 local listener = {}; 30 local listener = {};