17 |
17 |
18 |
18 |
19 local coroutine, io, math, socket, string, table = |
19 local coroutine, io, math, socket, string, table = |
20 coroutine, io, math, socket, string, table |
20 coroutine, io, math, socket, string, table |
21 |
21 |
22 local ipairs, next, pairs, print, setmetatable, tostring = |
22 local ipairs, next, pairs, print, setmetatable, tostring, assert, error = |
23 ipairs, next, pairs, print, setmetatable, tostring |
23 ipairs, next, pairs, print, setmetatable, tostring, assert, error |
24 |
24 |
25 local get, set = ztact.get, ztact.set |
25 local get, set = ztact.get, ztact.set |
26 |
26 |
27 |
27 |
28 -------------------------------------------------- module dns |
28 -------------------------------------------------- module dns |
128 end |
128 end |
129 |
129 |
130 |
130 |
131 local rrs_metatable = {} -- - - - - - - - - - - - - - - - - - rrs_metatable |
131 local rrs_metatable = {} -- - - - - - - - - - - - - - - - - - rrs_metatable |
132 function rrs_metatable.__tostring (rrs) |
132 function rrs_metatable.__tostring (rrs) |
133 t = {} |
133 local t = {} |
134 for i,rr in pairs (rrs) do append (t, tostring (rr)..'\n') end |
134 for i,rr in pairs (rrs) do append (t, tostring (rr)..'\n') end |
135 return table.concat (t) |
135 return table.concat (t) |
136 end |
136 end |
137 |
137 |
138 |
138 |
502 |
502 |
503 function resolver:adddefaultnameservers () -- - - - - adddefaultnameservers |
503 function resolver:adddefaultnameservers () -- - - - - adddefaultnameservers |
504 local resolv_conf = io.open("/etc/resolv.conf"); |
504 local resolv_conf = io.open("/etc/resolv.conf"); |
505 if not resolv_conf then return nil; end |
505 if not resolv_conf then return nil; end |
506 for line in resolv_conf:lines() do |
506 for line in resolv_conf:lines() do |
507 address = string.match (line, 'nameserver%s+(%d+%.%d+%.%d+%.%d+)') |
507 local address = string.match (line, 'nameserver%s+(%d+%.%d+%.%d+%.%d+)') |
508 if address then self:addnameserver (address) end |
508 if address then self:addnameserver (address) end |
509 end end |
509 end end |
510 |
510 |
511 |
511 |
512 function resolver:getsocket (servernum) -- - - - - - - - - - - - - getsocket |
512 function resolver:getsocket (servernum) -- - - - - - - - - - - - - getsocket |
580 if soft == 'soft' then |
580 if soft == 'soft' then |
581 self.time = socket.gettime () |
581 self.time = socket.gettime () |
582 for class,types in pairs (self.cache or {}) do |
582 for class,types in pairs (self.cache or {}) do |
583 for type,names in pairs (types) do |
583 for type,names in pairs (types) do |
584 for name,rrs in pairs (names) do |
584 for name,rrs in pairs (names) do |
585 prune (rrs, time, 'soft') |
585 prune (rrs, self.time, 'soft') |
586 end end end |
586 end end end |
587 else self.cache = {} end |
587 else self.cache = {} end |
588 end |
588 end |
589 |
589 |
590 |
590 |
592 |
592 |
593 qname, qtype, qclass = standardize (qname, qtype, qclass) |
593 qname, qtype, qclass = standardize (qname, qtype, qclass) |
594 |
594 |
595 if not self.server then self:adddefaultnameservers () end |
595 if not self.server then self:adddefaultnameservers () end |
596 |
596 |
597 local question = question or encodeQuestion (qname, qtype, qclass) |
597 local question = encodeQuestion (qname, qtype, qclass) |
598 local peek = self:peek (qname, qtype, qclass) |
598 local peek = self:peek (qname, qtype, qclass) |
599 if peek then return peek end |
599 if peek then return peek end |
600 |
600 |
601 local header, id = encodeHeader () |
601 local header, id = encodeHeader () |
602 -- print ('query id', id, qclass, qtype, qname) |
602 -- print ('query id', id, qclass, qtype, qname) |
765 |
765 |
766 function dns.resolver () -- - - - - - - - - - - - - - - - - - - - - resolver |
766 function dns.resolver () -- - - - - - - - - - - - - - - - - - - - - resolver |
767 |
767 |
768 -- this function seems to be redundant with resolver.new () |
768 -- this function seems to be redundant with resolver.new () |
769 |
769 |
770 r = { active = {}, cache = {}, unsorted = {}, wanted = {}, yielded = {} } |
770 local r = { active = {}, cache = {}, unsorted = {}, wanted = {}, yielded = {} } |
771 setmetatable (r, resolver) |
771 setmetatable (r, resolver) |
772 setmetatable (r.cache, cache_metatable) |
772 setmetatable (r.cache, cache_metatable) |
773 setmetatable (r.unsorted, { __mode = 'kv' }) |
773 setmetatable (r.unsorted, { __mode = 'kv' }) |
774 return r |
774 return r |
775 end |
775 end |