summaryrefslogtreecommitdiff
path: root/node/InetAddress.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/InetAddress.cpp')
-rw-r--r--node/InetAddress.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/node/InetAddress.cpp b/node/InetAddress.cpp
index 9ff5acea..88ab6e49 100644
--- a/node/InetAddress.cpp
+++ b/node/InetAddress.cpp
@@ -39,6 +39,8 @@ namespace ZeroTier {
const InetAddress InetAddress::LO4("127.0.0.1",0);
const InetAddress InetAddress::LO6("::1",0);
+const InetAddress InetAddress::DEFAULT4((uint32_t)0,0);
+const InetAddress InetAddress::DEFAULT6((const void *)0,16,0);
void InetAddress::set(const std::string &ip,unsigned int port)
throw()
@@ -63,11 +65,13 @@ void InetAddress::set(const void *ipBytes,unsigned int ipLen,unsigned int port)
memset(&_sa,0,sizeof(_sa));
if (ipLen == 4) {
setV4();
- memcpy(rawIpData(),ipBytes,4);
+ if (ipBytes)
+ memcpy(rawIpData(),ipBytes,4);
setPort(port);
} else if (ipLen == 16) {
setV6();
- memcpy(rawIpData(),ipBytes,16);
+ if (ipBytes)
+ memcpy(rawIpData(),ipBytes,16);
setPort(port);
}
}
@@ -91,6 +95,16 @@ bool InetAddress::isLinkLocal() const
return false;
}
+bool InetAddress::isDefaultRoute() const
+ throw()
+{
+ if (_sa.saddr.sa_family == AF_INET)
+ return ((_sa.sin.sin_addr.s_addr == 0)&&(_sa.sin.sin_port == 0));
+ else if (_sa.saddr.sa_family == AF_INET6)
+ return ((Utils::isZero(_sa.sin6.sin6_addr.s6_addr,16))&&(_sa.sin6.sin6_port == 0));
+ return false;
+}
+
std::string InetAddress::toString() const
{
char buf[128],buf2[128];