Software / code / prosody
Comparison
net/dns.lua @ 6312:1940a014aeca
Merge 0.9->0.10
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 25 Jul 2014 13:01:57 +0100 |
| parent | 6289:a29cc79295e6 |
| parent | 6310:d232bb1bbe1e |
| child | 6464:737c81bd898e |
comparison
equal
deleted
inserted
replaced
| 6306:c6d9e21cd5f2 | 6312:1940a014aeca |
|---|---|
| 750 self.active[id][question] = o; | 750 self.active[id][question] = o; |
| 751 | 751 |
| 752 -- remember which coroutine wants the answer | 752 -- remember which coroutine wants the answer |
| 753 if co then | 753 if co then |
| 754 set(self.wanted, qclass, qtype, qname, co, true); | 754 set(self.wanted, qclass, qtype, qname, co, true); |
| 755 --set(self.yielded, co, qclass, qtype, qname, true); | |
| 756 end | 755 end |
| 757 | 756 |
| 758 local conn, err = self:getsocket(o.server) | 757 local conn, err = self:getsocket(o.server) |
| 759 if not conn then | 758 if not conn then |
| 760 return nil, err; | 759 return nil, err; |
| 775 conn:send(o.packet); | 774 conn:send(o.packet); |
| 776 return self.timeout; | 775 return self.timeout; |
| 777 end | 776 end |
| 778 end | 777 end |
| 779 -- Tried everything, failed | 778 -- Tried everything, failed |
| 780 self:cancel(qclass, qtype, qname, co, true); | 779 self:cancel(qclass, qtype, qname); |
| 781 end | 780 end |
| 782 end) | 781 end) |
| 783 end | 782 end |
| 784 return true; | 783 return true; |
| 785 end | 784 end |
| 863 -- was the query on the wanted list? | 862 -- was the query on the wanted list? |
| 864 local q = response.question[1]; | 863 local q = response.question[1]; |
| 865 local cos = get(self.wanted, q.class, q.type, q.name); | 864 local cos = get(self.wanted, q.class, q.type, q.name); |
| 866 if cos then | 865 if cos then |
| 867 for co in pairs(cos) do | 866 for co in pairs(cos) do |
| 868 set(self.yielded, co, q.class, q.type, q.name, nil); | |
| 869 if coroutine.status(co) == "suspended" then coroutine.resume(co); end | 867 if coroutine.status(co) == "suspended" then coroutine.resume(co); end |
| 870 end | 868 end |
| 871 set(self.wanted, q.class, q.type, q.name, nil); | 869 set(self.wanted, q.class, q.type, q.name, nil); |
| 872 end | 870 end |
| 873 end | 871 end |
| 904 local q = response.question[1]; | 902 local q = response.question[1]; |
| 905 if q then | 903 if q then |
| 906 local cos = get(self.wanted, q.class, q.type, q.name); | 904 local cos = get(self.wanted, q.class, q.type, q.name); |
| 907 if cos then | 905 if cos then |
| 908 for co in pairs(cos) do | 906 for co in pairs(cos) do |
| 909 set(self.yielded, co, q.class, q.type, q.name, nil); | |
| 910 if coroutine.status(co) == "suspended" then coroutine.resume(co); end | 907 if coroutine.status(co) == "suspended" then coroutine.resume(co); end |
| 911 end | 908 end |
| 912 set(self.wanted, q.class, q.type, q.name, nil); | 909 set(self.wanted, q.class, q.type, q.name, nil); |
| 913 end | 910 end |
| 914 end | 911 end |
| 915 end | 912 end |
| 916 | 913 |
| 917 return response; | 914 return response; |
| 918 end | 915 end |
| 919 | 916 |
| 920 function resolver:cancel(qclass, qtype, qname, co, call_handler) | 917 function resolver:cancel(qclass, qtype, qname) |
| 921 local cos = get(self.wanted, qclass, qtype, qname); | 918 local cos = get(self.wanted, qclass, qtype, qname); |
| 922 if cos then | 919 if cos then |
| 923 if call_handler then | 920 for co in pairs(cos) do |
| 924 coroutine.resume(co); | 921 if coroutine.status(co) == "suspended" then coroutine.resume(co); end |
| 925 end | 922 end |
| 926 cos[co] = nil; | 923 set(self.wanted, qclass, qtype, qname, nil); |
| 927 end | 924 end |
| 928 end | 925 end |
| 929 | 926 |
| 930 function resolver:pulse() -- - - - - - - - - - - - - - - - - - - - - pulse | 927 function resolver:pulse() -- - - - - - - - - - - - - - - - - - - - - pulse |
| 931 --print(':pulse'); | 928 --print(':pulse'); |
| 1042 | 1039 |
| 1043 | 1040 |
| 1044 function dns.resolver () -- - - - - - - - - - - - - - - - - - - - - resolver | 1041 function dns.resolver () -- - - - - - - - - - - - - - - - - - - - - resolver |
| 1045 -- this function seems to be redundant with resolver.new () | 1042 -- this function seems to be redundant with resolver.new () |
| 1046 | 1043 |
| 1047 local r = { active = {}, cache = {}, unsorted = {}, wanted = {}, yielded = {}, best_server = 1 }; | 1044 local r = { active = {}, cache = {}, unsorted = {}, wanted = {}, best_server = 1 }; |
| 1048 setmetatable (r, resolver); | 1045 setmetatable (r, resolver); |
| 1049 setmetatable (r.cache, cache_metatable); | 1046 setmetatable (r.cache, cache_metatable); |
| 1050 setmetatable (r.unsorted, { __mode = 'kv' }); | 1047 setmetatable (r.unsorted, { __mode = 'kv' }); |
| 1051 return r; | 1048 return r; |
| 1052 end | 1049 end |