summaryrefslogtreecommitdiff
path: root/zerotierone/node/InetAddress.cpp
diff options
context:
space:
mode:
authorJoseph Henry <[email protected]>2017-03-07 11:08:02 -0800
committerJoseph Henry <[email protected]>2017-03-07 11:08:02 -0800
commit9016bc8385e5250d258fa1aba482a1c3e665203e (patch)
tree41a55174b42abf9e6e147167a7feca8a2d414a46 /zerotierone/node/InetAddress.cpp
parentce42dd4815650707f4b778cbcb9f030a2ab0a3ea (diff)
updated ZTO version
Diffstat (limited to 'zerotierone/node/InetAddress.cpp')
-rw-r--r--zerotierone/node/InetAddress.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/zerotierone/node/InetAddress.cpp b/zerotierone/node/InetAddress.cpp
index 3f6b9be..7d22eea 100644
--- a/zerotierone/node/InetAddress.cpp
+++ b/zerotierone/node/InetAddress.cpp
@@ -113,7 +113,7 @@ void InetAddress::set(const std::string &ip,unsigned int port)
sin6->sin6_port = Utils::hton((uint16_t)port);
if (inet_pton(AF_INET6,ip.c_str(),(void *)&(sin6->sin6_addr.s6_addr)) <= 0)
memset(this,0,sizeof(InetAddress));
- } else {
+ } else if (ip.find('.') != std::string::npos) {
struct sockaddr_in *sin = reinterpret_cast<struct sockaddr_in *>(this);
ss_family = AF_INET;
sin->sin_port = Utils::hton((uint16_t)port);
@@ -236,8 +236,14 @@ InetAddress InetAddress::netmask() const
case AF_INET6: {
uint64_t nm[2];
const unsigned int bits = netmaskBits();
- nm[0] = Utils::hton((uint64_t)((bits >= 64) ? 0xffffffffffffffffULL : (0xffffffffffffffffULL << (64 - bits))));
- nm[1] = Utils::hton((uint64_t)((bits <= 64) ? 0ULL : (0xffffffffffffffffULL << (128 - bits))));
+ if(bits) {
+ nm[0] = Utils::hton((uint64_t)((bits >= 64) ? 0xffffffffffffffffULL : (0xffffffffffffffffULL << (64 - bits))));
+ nm[1] = Utils::hton((uint64_t)((bits <= 64) ? 0ULL : (0xffffffffffffffffULL << (128 - bits))));
+ }
+ else {
+ nm[0] = 0;
+ nm[1] = 0;
+ }
memcpy(reinterpret_cast<struct sockaddr_in6 *>(&r)->sin6_addr.s6_addr,nm,16);
} break;
}