Software /
code /
prosody
Comparison
net/adns.lua @ 973:b091a1a7273b
net.adns: Catch errors in DNS response callbacks
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 10 Apr 2009 10:30:50 +0100 |
parent | 886:96de7f0a41cc |
child | 980:b52d442161f2 |
comparison
equal
deleted
inserted
replaced
971:dd736391bd41 | 973:b091a1a7273b |
---|---|
1 local server = require "net.server"; | 1 local server = require "net.server"; |
2 local dns = require "net.dns"; | 2 local dns = require "net.dns"; |
3 | 3 |
4 local log = require "util.logger".init("adns"); | 4 local log = require "util.logger".init("adns"); |
5 | 5 |
6 local coroutine, tostring = coroutine, tostring; | 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 dns.peek(qname, qtype, qclass) or |
12 coroutine.wrap(function () | 12 coroutine.wrap(function () |
13 log("debug", "Records for "..qname.." not in cache, sending query (%s)...", tostring(coroutine.running())); | 13 log("debug", "Records for "..qname.." not in cache, sending query (%s)...", tostring(coroutine.running())); |
14 dns.query(qname, qtype, qclass); | 14 dns.query(qname, qtype, qclass); |
15 coroutine.yield(nil); -- Wait for reply | 15 coroutine.yield(nil); -- Wait for reply |
16 log("debug", "Reply for "..qname.." (%s)", tostring(coroutine.running())); | 16 log("debug", "Reply for "..qname.." (%s)", tostring(coroutine.running())); |
17 handler(dns.peek(qname, qtype, qclass)); | 17 local ok, err = pcall(handler, dns.peek(qname, qtype, qclass)); |
18 if not ok then | |
19 log("debug", "Error in DNS response handler: %s", tostring(err)); | |
20 end | |
18 end)(); | 21 end)(); |
19 end | 22 end |
20 | 23 |
21 function new_async_socket(sock) | 24 function new_async_socket(sock) |
22 local newconn = {}; | 25 local newconn = {}; |