net_uv: add isIP
authorRyan Dahl <ry@tinyclouds.org>
Mon, 4 Jul 2011 18:25:31 +0000 (11:25 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Mon, 4 Jul 2011 18:33:29 +0000 (11:33 -0700)
Issue #1270: Doesn't completely pass test/simple/test-net-isip.js yet.

lib/net_uv.js

index e9db1b2..37888ed 100644 (file)
@@ -540,3 +540,35 @@ function onconnection(clientHandle) {
 Server.prototype.close = function() {
   this._handle.close();
 };
+
+
+// TODO: isIP should be moved to the DNS code. Putting it here now because
+// this is what the legacy system did.
+exports.isIP = function(input) {
+  if (!input) {
+    return 4;
+  } else if (/^(\d?\d?\d)\.(\d?\d?\d)\.(\d?\d?\d)\.(\d?\d?\d)$/.test(input)) {
+    var parts = input.split('.');
+    for (var i = 0; i < parts.length; i++) {
+      var part = parseInt(parts[i]);
+      if (part < 0 || 255 < part) {
+        return 0;
+      }
+    }
+    return 4;
+  } else if (/^(::)?([a-fA-F0-9]+(::?)?)*$/.test(input)) {
+    return 6;
+  } else {
+    return 0;
+  }
+}
+
+
+exports.isIPv4 = function(input) {
+  return TCP.isIP(input) === 4;
+};
+
+
+exports.isIPv6 = function(input) {
+  return TCP.isIP(input) === 6;
+};