mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Fix ipv6 on windows
This commit is contained in:
parent
30d6d4c733
commit
e47f6fdfe9
@ -185,11 +185,41 @@ void Address::Resolve(const char *name)
|
|||||||
// IP address -> textual representation
|
// IP address -> textual representation
|
||||||
std::string Address::serializeString() const
|
std::string Address::serializeString() const
|
||||||
{
|
{
|
||||||
|
// windows XP doesnt have inet_ntop, maybe use better func
|
||||||
|
#ifdef _WIN32
|
||||||
|
if(m_addr_family == AF_INET)
|
||||||
|
{
|
||||||
|
u8 a, b, c, d, addr;
|
||||||
|
addr = ntohl(m_address.ipv4.sin_addr.s_addr);
|
||||||
|
a = (addr & 0xFF000000) >> 24;
|
||||||
|
b = (addr & 0x00FF0000) >> 16;
|
||||||
|
c = (addr & 0x0000FF00) >> 8;
|
||||||
|
d = (addr & 0x000000FF);
|
||||||
|
return itos(a) + "." + itos(b) + "." + itos(c) + "." + itos(d);
|
||||||
|
}
|
||||||
|
else if(m_addr_family == AF_INET6)
|
||||||
|
{
|
||||||
|
std::ostringstream os;
|
||||||
|
for(int i = 0; i < 16; i += 2)
|
||||||
|
{
|
||||||
|
u16 section =
|
||||||
|
(m_address.ipv6.sin6_addr.s6_addr[i] << 8) |
|
||||||
|
(m_address.ipv6.sin6_addr.s6_addr[i + 1]);
|
||||||
|
os << std::hex << section;
|
||||||
|
if(i < 14)
|
||||||
|
os << ":";
|
||||||
|
}
|
||||||
|
return os.str();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return std::string("");
|
||||||
|
#else
|
||||||
char str[INET6_ADDRSTRLEN];
|
char str[INET6_ADDRSTRLEN];
|
||||||
if (inet_ntop(m_addr_family, (m_addr_family == AF_INET) ? (void*)&(m_address.ipv4.sin_addr) : (void*)&(m_address.ipv6.sin6_addr), str, INET6_ADDRSTRLEN) == NULL) {
|
if (inet_ntop(m_addr_family, (m_addr_family == AF_INET) ? (void*)&(m_address.ipv4.sin_addr) : (void*)&(m_address.ipv6.sin6_addr), str, INET6_ADDRSTRLEN) == NULL) {
|
||||||
return std::string("");
|
return std::string("");
|
||||||
}
|
}
|
||||||
return std::string(str);
|
return std::string(str);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sockaddr_in Address::getAddress() const
|
struct sockaddr_in Address::getAddress() const
|
||||||
|
Loading…
Reference in New Issue
Block a user