}
+function onlookup(err, addresses) {
+ if (err) {
+ return this.callback(errnoException(err, 'getaddrinfo'));
+ }
+ if (this.family) {
+ this.callback(null, addresses[0], this.family);
+ } else {
+ this.callback(null, addresses[0], addresses[0].indexOf(':') >= 0 ? 6 : 4);
+ }
+}
+
+
// Easy DNS A/AAAA look up
// lookup(domain, [family,] callback)
exports.lookup = function(domain, family, callback) {
return {};
}
- function onanswer(err, addresses) {
- if (err) {
- return callback(errnoException(err, 'getaddrinfo'));
- }
- if (family) {
- callback(null, addresses[0], family);
- } else {
- callback(null, addresses[0], addresses[0].indexOf(':') >= 0 ? 6 : 4);
- }
- }
-
- var req = {};
+ var req = {
+ callback: callback,
+ family: family,
+ oncomplete: onlookup
+ };
var err = cares.getaddrinfo(req, domain, family);
-
- if (err) {
- throw errnoException(err, 'getaddrinfo');
- }
-
- req.oncomplete = onanswer;
+ if (err) throw errnoException(err, 'getaddrinfo');
callback.immediately = true;
return req;
};
+function onresolve(err, result) {
+ if (err)
+ this.callback(errnoException(err, this.bindingName));
+ else
+ this.callback(null, result);
+}
+
+
function resolver(bindingName) {
var binding = cares[bindingName];
return function query(name, callback) {
- function onanswer(err, result) {
- if (err)
- callback(errnoException(err, bindingName));
- else
- callback(null, result);
- }
-
callback = makeAsync(callback);
- var req = {};
- var err = binding(req, name, onanswer);
- if (err) {
- throw errnoException(err, bindingName);
- }
-
+ var req = {
+ bindingName: bindingName,
+ callback: callback,
+ oncomplete: onresolve
+ };
+ var err = binding(req, name);
+ if (err) throw errnoException(err, bindingName);
callback.immediately = true;
return req;
}
virtual ~QueryWrap() {
assert(!persistent().IsEmpty());
- object()->Delete(oncomplete_sym);
persistent().Dispose();
}
- void SetOnComplete(Handle<Value> oncomplete) {
- assert(oncomplete->IsFunction());
- object()->Set(oncomplete_sym, oncomplete);
- }
-
// Subclasses should implement the appropriate Send method.
virtual int Send(const char* name) {
assert(0);
assert(!args.IsConstructCall());
assert(args[0]->IsObject());
assert(args[1]->IsString());
- assert(args[2]->IsFunction());
Local<Object> req_wrap_obj = args[0].As<Object>();
Local<String> string = args[1].As<String>();
- Local<Function> callback = args[2].As<Function>();
-
Wrap* wrap = new Wrap(req_wrap_obj);
- wrap->SetOnComplete(callback);
String::Utf8Value name(string);
int err = wrap->Send(*name);
Local<Function> callback = args[3].As<Function>();
Wrap* wrap = new Wrap(req_wrap_obj);
- wrap->SetOnComplete(callback);
String::Utf8Value name(string);
int err = wrap->Send(*name, family);