diff options
| author | Joseph Henry <[email protected]> | 2017-03-07 11:08:02 -0800 |
|---|---|---|
| committer | Joseph Henry <[email protected]> | 2017-03-07 11:08:02 -0800 |
| commit | 9016bc8385e5250d258fa1aba482a1c3e665203e (patch) | |
| tree | 41a55174b42abf9e6e147167a7feca8a2d414a46 /zerotierone/node/InetAddress.cpp | |
| parent | ce42dd4815650707f4b778cbcb9f030a2ab0a3ea (diff) | |
updated ZTO version
Diffstat (limited to 'zerotierone/node/InetAddress.cpp')
| -rw-r--r-- | zerotierone/node/InetAddress.cpp | 12 |
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; } |
