summaryrefslogtreecommitdiff
path: root/src/cares_wrap.cc
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2016-10-26 07:51:34 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2016-11-18 22:01:11 +0100
commitc31b507b947d5b4803dd96a7c9a09fd2112085ab (patch)
tree163b80cab3cbf989ccd9aed15cea0f024c67abc5 /src/cares_wrap.cc
parentb80f05efaafdb8b4f0ef6afc92bfb31762904e02 (diff)
downloadandroid-node-v8-c31b507b947d5b4803dd96a7c9a09fd2112085ab.tar.gz
android-node-v8-c31b507b947d5b4803dd96a7c9a09fd2112085ab.tar.bz2
android-node-v8-c31b507b947d5b4803dd96a7c9a09fd2112085ab.zip
dns: implement {ttl: true} for dns.resolve4()
Add an option to retrieve the Time-To-Live of the A record. PR-URL: https://github.com/nodejs/node/pull/9296 Refs: https://github.com/nodejs/node/issues/5893 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Roman Reiss <me@silverwind.io>
Diffstat (limited to 'src/cares_wrap.cc')
-rw-r--r--src/cares_wrap.cc33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc
index 492e151832..4b9ba26fe4 100644
--- a/src/cares_wrap.cc
+++ b/src/cares_wrap.cc
@@ -336,25 +336,17 @@ class QueryWrap : public AsyncWrap {
delete wrap;
}
- void CallOnComplete(Local<Value> answer) {
- HandleScope handle_scope(env()->isolate());
- Context::Scope context_scope(env()->context());
- Local<Value> argv[] = {
- Integer::New(env()->isolate(), 0),
- answer
- };
- MakeCallback(env()->oncomplete_string(), arraysize(argv), argv);
- }
-
- void CallOnComplete(Local<Value> answer, Local<Value> family) {
+ void CallOnComplete(Local<Value> answer,
+ Local<Value> extra = Local<Value>()) {
HandleScope handle_scope(env()->isolate());
Context::Scope context_scope(env()->context());
Local<Value> argv[] = {
Integer::New(env()->isolate(), 0),
answer,
- family
+ extra
};
- MakeCallback(env()->oncomplete_string(), arraysize(argv), argv);
+ const int argc = arraysize(argv) - extra.IsEmpty();
+ MakeCallback(env()->oncomplete_string(), argc, argv);
}
void ParseError(int status) {
@@ -400,18 +392,27 @@ class QueryAWrap: public QueryWrap {
HandleScope handle_scope(env()->isolate());
Context::Scope context_scope(env()->context());
- struct hostent* host;
+ hostent* host;
+ ares_addrttl addrttls[256];
+ int naddrttls = arraysize(addrttls);
- int status = ares_parse_a_reply(buf, len, &host, nullptr, nullptr);
+ int status = ares_parse_a_reply(buf, len, &host, addrttls, &naddrttls);
if (status != ARES_SUCCESS) {
ParseError(status);
return;
}
Local<Array> addresses = HostentToAddresses(env(), host);
+ Local<Array> ttls = Array::New(env()->isolate(), naddrttls);
+
+ auto context = env()->context();
+ for (int i = 0; i < naddrttls; i += 1) {
+ auto value = Integer::New(env()->isolate(), addrttls[i].ttl);
+ ttls->Set(context, i, value).FromJust();
+ }
ares_free_hostent(host);
- this->CallOnComplete(addresses);
+ CallOnComplete(addresses, ttls);
}
};