X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=net%2Fadns.lua;h=34ef5d770dae27d19ca867f555ef8165176e56b3;hb=4e16323f2a78a2f20bcd75957f2ada27a5d8b90f;hp=07d4fe5424054def245140c956154bc41b4ed96a;hpb=fd53d968c7e477888ef88c3668d56a22c568a83f;p=prosody.git diff --git a/net/adns.lua b/net/adns.lua index 07d4fe54..34ef5d77 100644 --- a/net/adns.lua +++ b/net/adns.lua @@ -1,3 +1,11 @@ +-- Prosody IM +-- Copyright (C) 2008-2009 Matthew Wild +-- Copyright (C) 2008-2009 Waqas Hussain +-- +-- This project is MIT/X11 licensed. Please see the +-- COPYING file in the source package for more information. +-- + local server = require "net.server"; local dns = require "net.dns"; @@ -16,7 +24,7 @@ function lookup(handler, qname, qtype, qclass) 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 + coroutine.yield({ qclass or "IN", qtype or "A", qname, coroutine.running()}); -- Wait for reply log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running())); local ok, err = pcall(handler, dns.peek(qname, qtype, qclass)); if not ok then @@ -25,6 +33,14 @@ function lookup(handler, qname, qtype, qclass) end)(dns.peek(qname, qtype, qclass)); end +function cancel(handle, call_handler) + log("warn", "Cancelling DNS lookup for %s", tostring(handle[3])); + dns.cancel(handle); + if call_handler then + coroutine.resume(handle[4]); + end +end + function new_async_socket(sock) local newconn = {}; local listener = {};