Revision 8886c6bf lib/dns.js
lib/dns.js | ||
---|---|---|
192 | 192 |
}; |
193 | 193 |
|
194 | 194 |
|
195 |
exports.getServers = function() { |
|
196 |
return cares.getServers(); |
|
197 |
}; |
|
198 |
|
|
199 |
|
|
200 |
exports.setServers = function(servers) { |
|
201 |
// cache the original servers because in the event of an error setting the |
|
202 |
// servers cares won't have any servers available for resolution |
|
203 |
var orig = cares.getServers(); |
|
204 |
|
|
205 |
var newSet = []; |
|
206 |
|
|
207 |
servers.forEach(function(serv) { |
|
208 |
var ver = isIp(serv); |
|
209 |
|
|
210 |
if (ver) |
|
211 |
return newSet.push([ver, serv]); |
|
212 |
|
|
213 |
var match = serv.match(/\[(.*)\](:\d+)?/); |
|
214 |
|
|
215 |
// we have an IPv6 in brackets |
|
216 |
if (match) { |
|
217 |
ver = isIp(match[1]); |
|
218 |
if (ver) |
|
219 |
return newSet.push([ver, match[1]]); |
|
220 |
} |
|
221 |
|
|
222 |
var s = serv.split(/:\d+$/)[0]; |
|
223 |
ver = isIp(s); |
|
224 |
|
|
225 |
if (ver) |
|
226 |
return newSet.push([ver, s]); |
|
227 |
|
|
228 |
throw new Error('IP address is not properly formatted: ' + serv); |
|
229 |
}); |
|
230 |
|
|
231 |
var r = cares.setServers(newSet); |
|
232 |
|
|
233 |
if (r) { |
|
234 |
// reset the servers to the old servers, because ares probably unset them |
|
235 |
cares.setServers(orig.join(',')); |
|
236 |
|
|
237 |
var err = cares.strerror(r); |
|
238 |
throw new Error('c-ares failed to set servers: "' + err + |
|
239 |
'" [' + servers + ']'); |
|
240 |
} |
|
241 |
}; |
|
242 |
|
|
243 |
|
|
195 | 244 |
// ERROR CODES |
196 | 245 |
exports.NODATA = 'ENODATA'; |
197 | 246 |
exports.FORMERR = 'EFORMERR'; |
Also available in: Unified diff