diff options
author | Matthew Wild <mwild1@gmail.com> | 2009-04-18 17:48:30 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2009-04-18 17:48:30 +0100 |
commit | cface37b4928e922a43ef37d1bc49ab3a4009479 (patch) | |
tree | b49b47ada1753b19ed5d9442dcf6e6c53ee326ff /net/adns.lua | |
parent | b6bc449cd394bb14b5674e920eaddd3d37255bdb (diff) | |
download | prosody-cface37b4928e922a43ef37d1bc49ab3a4009479.tar.gz prosody-cface37b4928e922a43ef37d1bc49ab3a4009479.zip |
net.adns: Call handler for records already cached
Diffstat (limited to 'net/adns.lua')
-rw-r--r-- | net/adns.lua | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/net/adns.lua b/net/adns.lua index 4c0e5c38..07d4fe54 100644 --- a/net/adns.lua +++ b/net/adns.lua @@ -8,17 +8,21 @@ local coroutine, tostring, pcall = coroutine, tostring, pcall; 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) |