sockaddr: add getMappedIPv6

This commit is contained in:
Adrien Béraud committed 2019-06-21 11:00:48 -04:00
1 parent 738424b1ae
commit d438d4ef1b
2 files changed
+17

No files matched your search

+1
View File
@@ -249,6 +249,7 @@ public:
bool isMappedIPv4() const;
SockAddr getMappedIPv4() const;
SockAddr getMappedIPv6() const;
/**
* A comparator to classify IP addresses, only considering the
+16
View File
@@ -215,6 +215,22 @@ SockAddr::getMappedIPv4() const
return ret;
}
SockAddr
SockAddr::getMappedIPv6() const
{
auto family = getFamily();
if (family != AF_INET)
return *this;
SockAddr ret;
ret.setFamily(AF_INET6);
ret.setPort(getPort());
auto addr4 = reinterpret_cast<const uint8_t*>(&getIPv4().sin_addr);
auto addr6 = reinterpret_cast<uint8_t*>(&ret.getIPv6().sin6_addr);
std::copy(MAPPED_IPV4_PREFIX.begin(), MAPPED_IPV4_PREFIX.end(), addr6);
std::copy_n(addr4, sizeof(in_addr), addr6 + MAPPED_IPV4_PREFIX.size());
return ret;
}
bool operator==(const SockAddr& a, const SockAddr& b) {
return a.equals(b);
}