summaryrefslogtreecommitdiff
path: root/src/socket.cpp
diff options
context:
space:
mode:
authorproller <proller@github.com>2013-06-23 20:23:59 +0400
committerproller <proller@github.com>2013-06-23 20:35:16 +0400
commitf764297be2d55c9b8350077e44e3d62a9e058bcf (patch)
treebfabce6000d3ec50cd6472c3f9229265d58e7976 /src/socket.cpp
parent75b8c13b0042678a909becbde8f1f82400f2d8ac (diff)
downloadminetest-f764297be2d55c9b8350077e44e3d62a9e058bcf.tar.gz
minetest-f764297be2d55c9b8350077e44e3d62a9e058bcf.tar.bz2
minetest-f764297be2d55c9b8350077e44e3d62a9e058bcf.zip
Math mapgen fix, ip show on connect, pathfinder segfault fix
Diffstat (limited to 'src/socket.cpp')
-rw-r--r--src/socket.cpp29
1 files changed, 4 insertions, 25 deletions
diff --git a/src/socket.cpp b/src/socket.cpp
index c1517ccb9..a889223b4 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -185,32 +185,11 @@ void Address::Resolve(const char *name)
// IP address -> textual representation
std::string Address::serializeString() const
{
- 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);
+ 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) {
+ return std::string("");
}
- 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("");
+ return std::string(str);
}
struct sockaddr_in Address::getAddress() const