summaryrefslogtreecommitdiff
path: root/src/cares_wrap.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cares_wrap.cc')
-rw-r--r--src/cares_wrap.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc
index 62ad44bd99..a23b839fbb 100644
--- a/src/cares_wrap.cc
+++ b/src/cares_wrap.cc
@@ -1087,6 +1087,27 @@ static void IsIP(const FunctionCallbackInfo<Value>& args) {
args.GetReturnValue().Set(rc);
}
+static void IsIPv4(const FunctionCallbackInfo<Value>& args) {
+ node::Utf8Value ip(args.GetIsolate(), args[0]);
+ char address_buffer[sizeof(struct in_addr)];
+
+ if (uv_inet_pton(AF_INET, *ip, &address_buffer) == 0) {
+ args.GetReturnValue().Set(true);
+ } else {
+ args.GetReturnValue().Set(false);
+ }
+}
+
+static void IsIPv6(const FunctionCallbackInfo<Value>& args) {
+ node::Utf8Value ip(args.GetIsolate(), args[0]);
+ char address_buffer[sizeof(struct in6_addr)];
+
+ if (uv_inet_pton(AF_INET6, *ip, &address_buffer) == 0) {
+ args.GetReturnValue().Set(true);
+ } else {
+ args.GetReturnValue().Set(false);
+ }
+}
static void GetAddrInfo(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);
@@ -1327,6 +1348,8 @@ static void Initialize(Local<Object> target,
env->SetMethod(target, "getaddrinfo", GetAddrInfo);
env->SetMethod(target, "getnameinfo", GetNameInfo);
env->SetMethod(target, "isIP", IsIP);
+ env->SetMethod(target, "isIPv4", IsIPv4);
+ env->SetMethod(target, "isIPv6", IsIPv6);
env->SetMethod(target, "strerror", StrError);
env->SetMethod(target, "getServers", GetServers);