sessionmanager, s2smanager: Destroyed sessions are now simply resting (not dead)...
[prosody.git] / net / dns.lua
index 01807d9d961d66f5bcefa43c4382fcfb2fa075e3..8855cc61546954b3e0b4ba9b6526c85dd9f422d3 100644 (file)
@@ -532,14 +532,19 @@ function resolver:adddefaultnameservers()    -- - - - -  adddefaultnameservers
                if not self.server or #self.server == 0 then
                        -- TODO log warning about no nameservers, adding opendns servers as fallback
                        self:addnameserver("208.67.222.222");
-                       self:addnameserver("208.67.220.220") ;  
+                       self:addnameserver("208.67.220.220");
                end
        else -- posix
                local resolv_conf = io.open("/etc/resolv.conf");
                if resolv_conf then
                        for line in resolv_conf:lines() do
-                               local address = line:gsub("#.*$", ""):match('^%s*nameserver%s+(%d+%.%d+%.%d+%.%d+)%s*$');
-                               if address then self:addnameserver(address) end
+                               line = line:gsub("#.*$", "")
+                                       :match('^%s*nameserver%s+(.*)%s*$');
+                               if line then
+                                       line:gsub("%f[%d.](%d+%.%d+%.%d+%.%d+)%f[^%d.]", function (address)
+                                               self:addnameserver(address)
+                                       end);
+                               end
                        end
                end
                if not self.server or #self.server == 0 then
@@ -594,17 +599,18 @@ end
 
 function resolver:remember(rr, type)    -- - - - - - - - - - - - - -  remember
        --print ('remember', type, rr.class, rr.type, rr.name)
+       local qname, qtype, qclass = standardize(rr.name, rr.type, rr.class);
 
        if type ~= '*' then
-               type = rr.type;
-               local all = get(self.cache, rr.class, '*', rr.name);
+               type = qtype;
+               local all = get(self.cache, qclass, '*', qname);
                --print('remember all', all);
                if all then append(all, rr); end
        end
 
        self.cache = self.cache or setmetatable({}, cache_metatable);
-       local rrs = get(self.cache, rr.class, type, rr.name) or
-               set(self.cache, rr.class, type, rr.name, setmetatable({}, rrs_metatable));
+       local rrs = get(self.cache, qclass, type, qname) or
+               set(self.cache, qclass, type, qname, setmetatable({}, rrs_metatable));
        append(rrs, rr);
 
        if type == 'MX' then self.unsorted[rrs] = true; end
@@ -723,7 +729,7 @@ function resolver:receive(rset)    -- - - - - - - - - - - - - - - - -  receive
        for i,sock in pairs(rset) do
 
                if self.socketset[sock] then
-                       local packet = sock.receive();
+                       local packet = sock:receive();
                        if packet then
                                response = self:decode(packet);
                                if response and self.active[response.header.id]
@@ -795,7 +801,7 @@ function resolver:feed(sock, packet)
                                set(self.wanted, q.class, q.type, q.name, nil);
                        end
                end
-       end 
+       end
 
        return response;
 end
@@ -912,11 +918,6 @@ end
 -- module api ------------------------------------------------------ module api
 
 
-local function resolve(func, ...)    -- - - - - - - - - - - - - - resolver_get
-       return func(dns._resolver, ...);
-end
-
-
 function dns.resolver ()    -- - - - - - - - - - - - - - - - - - - - - resolver
        -- this function seems to be redundant with resolver.new ()
 
@@ -927,37 +928,35 @@ function dns.resolver ()    -- - - - - - - - - - - - - - - - - - - - - resolver
        return r;
 end
 
+local _resolver = dns.resolver();
+dns._resolver = _resolver;
 
 function dns.lookup(...)    -- - - - - - - - - - - - - - - - - - - - -  lookup
-       return resolve(resolver.lookup, ...);
+       return _resolver:lookup(...);
 end
 
-
 function dns.purge(...)    -- - - - - - - - - - - - - - - - - - - - - -  purge
-       return resolve(resolver.purge, ...);
+       return _resolver:purge(...);
 end
 
 function dns.peek(...)    -- - - - - - - - - - - - - - - - - - - - - - -  peek
-       return resolve(resolver.peek, ...);
+       return _resolver:peek(...);
 end
 
-
 function dns.query(...)    -- - - - - - - - - - - - - - - - - - - - - -  query
-       return resolve(resolver.query, ...);
+       return _resolver:query(...);
 end
 
-function dns.feed(...)    -- - - - - - - - - - - - - - - - - - - - - -  feed
-       return resolve(resolver.feed, ...);
+function dns.feed(...)    -- - - - - - - - - - - - - - - - - - - - - -  feed
+       return _resolver:feed(...);
 end
 
-function dns.cancel(...)   -- - - - - - - - - - - - - - - - - - - - - -  cancel
-       return resolve(resolver.cancel, ...);
+function dns.cancel(...)  -- - - - - - - - - - - - - - - - - - - - - -  cancel
+       return _resolver:cancel(...);
 end
 
-function dns:socket_wrapper_set(...)    -- - - - - - - - -  socket_wrapper_set
-       return resolve(resolver.socket_wrapper_set, ...);
+function dns.socket_wrapper_set(...)    -- - - - - - - - -  socket_wrapper_set
+       return _resolver:socket_wrapper_set(...);
 end
 
-dns._resolver = dns.resolver();
-
 return dns;