Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 49 additions & 17 deletions src/cares_wrap.cc
Original file line numberDiff line numberDiff line change
Expand Up@@ -584,9 +584,10 @@ void ChannelWrap::EnsureServers() {

class QueryWrap : public AsyncWrap {
public:
QueryWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
QueryWrap(ChannelWrap* channel, Local<Object> req_wrap_obj, const char* name)
: AsyncWrap(channel->env(), req_wrap_obj, AsyncWrap::PROVIDER_QUERYWRAP),
channel_(channel) {
channel_(channel),
name_(name) {
Wrap(req_wrap_obj, this);

// Make sure the channel object stays alive during the query lifetime.
Expand DownExpand Up@@ -616,6 +617,9 @@ class QueryWrap : public AsyncWrap {
int dnsclass,
int type) {
channel_->EnsureServers();
TRACE_EVENT_COPY_ASYNC_BEGIN1(
"node,node.dns", name_.c_str(), this,
"name", name);
ares_query(channel_->cares_channel(), name, dnsclass, type, Callback,
static_cast<void*>(this));
}
Expand DownExpand Up@@ -713,6 +717,7 @@ class QueryWrap : public AsyncWrap {
extra
};
const int argc = arraysize(argv) - extra.IsEmpty();
TRACE_EVENT_COPY_ASYNC_END0("node,node.dns", name_.c_str(), this);
MakeCallback(env()->oncomplete_string(), argc, argv);
}

Expand All@@ -722,6 +727,9 @@ class QueryWrap : public AsyncWrap {
Context::Scope context_scope(env()->context());
const char* code = ToErrorCodeString(status);
Local<Value> arg = OneByteString(env()->isolate(), code);
TRACE_EVENT_COPY_ASYNC_END1(
"node,node.dns", name_.c_str(), this,
"error", status);
MakeCallback(env()->oncomplete_string(), 1, &arg);
}

Expand All@@ -735,6 +743,8 @@ class QueryWrap : public AsyncWrap {
}

ChannelWrap* channel_;
private:
std::string name_;
};


Expand DownExpand Up@@ -1180,7 +1190,7 @@ int ParseSoaReply(Environment* env,
class QueryAnyWrap: public QueryWrap {
public:
QueryAnyWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolveAny") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1357,7 +1367,7 @@ class QueryAnyWrap: public QueryWrap {
class QueryAWrap: public QueryWrap {
public:
QueryAWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolve4") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1401,7 +1411,7 @@ class QueryAWrap: public QueryWrap {
class QueryAaaaWrap: public QueryWrap {
public:
QueryAaaaWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolve6") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1445,7 +1455,7 @@ class QueryAaaaWrap: public QueryWrap {
class QueryCnameWrap: public QueryWrap {
public:
QueryCnameWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolveCname") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1476,7 +1486,7 @@ class QueryCnameWrap: public QueryWrap {
class QueryMxWrap: public QueryWrap {
public:
QueryMxWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolveMx") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1507,7 +1517,7 @@ class QueryMxWrap: public QueryWrap {
class QueryNsWrap: public QueryWrap {
public:
QueryNsWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolveNs") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1538,7 +1548,7 @@ class QueryNsWrap: public QueryWrap {
class QueryTxtWrap: public QueryWrap {
public:
QueryTxtWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolveTxt") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1568,7 +1578,7 @@ class QueryTxtWrap: public QueryWrap {
class QuerySrvWrap: public QueryWrap {
public:
explicit QuerySrvWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolveSrv") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1597,7 +1607,7 @@ class QuerySrvWrap: public QueryWrap {
class QueryPtrWrap: public QueryWrap {
public:
explicit QueryPtrWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolvePtr") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1628,7 +1638,7 @@ class QueryPtrWrap: public QueryWrap {
class QueryNaptrWrap: public QueryWrap {
public:
explicit QueryNaptrWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolveNaptr") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1658,7 +1668,7 @@ class QueryNaptrWrap: public QueryWrap {
class QuerySoaWrap: public QueryWrap {
public:
QuerySoaWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "resolveSoa") {
}

int Send(const char* name) override {
Expand DownExpand Up@@ -1719,7 +1729,7 @@ class QuerySoaWrap: public QueryWrap {
class GetHostByAddrWrap: public QueryWrap {
public:
explicit GetHostByAddrWrap(ChannelWrap* channel, Local<Object> req_wrap_obj)
: QueryWrap(channel, req_wrap_obj) {
: QueryWrap(channel, req_wrap_obj, "reverse") {
}

int Send(const char* name) override {
Expand All@@ -1736,6 +1746,11 @@ class GetHostByAddrWrap: public QueryWrap {
return UV_EINVAL; // So errnoException() reports a proper error.
}

TRACE_EVENT_COPY_ASYNC_BEGIN2(
"node,node.dns", "reverse", this,
"name", name,
"family", family == AF_INET ? "ipv4" : "ipv6");

ares_gethostbyaddr(channel_->cares_channel(),
address_buffer,
length,
Expand DownExpand Up@@ -1794,8 +1809,9 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
Null(env->isolate())
};

size_t n = 0;
const bool verbatim = req_wrap->verbatim();
if (status == 0) {
int n = 0;
Local<Array> results = Array::New(env->isolate());

auto add = [&] (bool want_ipv4, bool want_ipv6) {
Expand DownExpand Up@@ -1823,7 +1839,6 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
}
};

const bool verbatim = req_wrap->verbatim();
add(true, verbatim);
if (verbatim == false)
add(false, true);
Expand All@@ -1838,6 +1853,10 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {

uv_freeaddrinfo(res);

TRACE_EVENT_COPY_ASYNC_END2(
"node,node.dns", "lookup", req_wrap,
"count", n, "verbatim", verbatim);

// Make the callback into JavaScript
req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv);

Expand DownExpand Up@@ -1869,6 +1888,10 @@ void AfterGetNameInfo(uv_getnameinfo_t* req,
argv[2] = js_service;
}

TRACE_EVENT_COPY_ASYNC_END2(
"node,node.dns", "lookupService", req_wrap,
"hostname", hostname, "service", service);

// Make the callback into JavaScript
req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv);

Expand DownExpand Up@@ -1943,6 +1966,12 @@ void GetAddrInfo(const FunctionCallbackInfo<Value>& args) {
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = flags;

TRACE_EVENT_COPY_ASYNC_BEGIN2(
"node,node.dns", "lookup", req_wrap,
"hostname", *hostname,
"family",
family == AF_INET ? "ip4" : family == AF_INET6 ? "ip6" : "unspec");

int err = uv_getaddrinfo(env->event_loop(),
req_wrap->req(),
AfterGetAddrInfo,
Expand DownExpand Up@@ -1973,6 +2002,9 @@ void GetNameInfo(const FunctionCallbackInfo<Value>& args) {

GetNameInfoReqWrap* req_wrap = new GetNameInfoReqWrap(env, req_wrap_obj);

TRACE_EVENT_COPY_ASYNC_BEGIN2(
"node,node.dns", "lookupService", req_wrap,
"ip", *ip, "port", port);
int err = uv_getnameinfo(env->event_loop(),
req_wrap->req(),
AfterGetNameInfo,
Expand DownExpand Up@@ -2105,7 +2137,7 @@ void SetServers(const FunctionCallbackInfo<Value>& args) {
void Cancel(const FunctionCallbackInfo<Value>& args) {
ChannelWrap* channel;
ASSIGN_OR_RETURN_UNWRAP(&channel, args.Holder());

TRACE_EVENT_INSTANT0("node,node.dns", "cancel", TRACE_EVENT_SCOPE_THREAD);
ares_cancel(channel->cares_channel());
}

Expand Down