Revision 8886c6bf lib/dns.js

View differences:

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