]> git.lizzy.rs Git - minetest.git/blobdiff - src/socket.cpp
Add formspec api versioning
[minetest.git] / src / socket.cpp
index 00856fb0094133890cf6754ef073d560591ef7a5..508d61a3126bf26aa36acd8dad96cdffe9056882 100644 (file)
@@ -143,6 +143,15 @@ bool Address::operator!=(Address &address)
 
 void Address::Resolve(const char *name)
 {
+       if (!name || name[0] == 0) {
+               if (m_addr_family == AF_INET) {
+                       setAddress((u32) 0);
+               } else if (m_addr_family == AF_INET6) {
+                       setAddress((IPv6AddressBytes*) 0);
+               }
+               return;
+       }
+
        struct addrinfo *resolved, hints;
        memset(&hints, 0, sizeof(hints));
        
@@ -193,7 +202,8 @@ std::string Address::serializeString() const
 #ifdef _WIN32
        if(m_addr_family == AF_INET)
        {
-               u8 a, b, c, d, addr;
+               u8 a, b, c, d;
+               u32 addr;
                addr = ntohl(m_address.ipv4.sin_addr.s_addr);
                a = (addr & 0xFF000000) >> 24;
                b = (addr & 0x00FF0000) >> 16;
@@ -251,6 +261,18 @@ bool Address::isIPv6() const
        return m_addr_family == AF_INET6;
 }
 
+bool Address::isZero() const
+{
+       if (m_addr_family == AF_INET) {
+               return m_address.ipv4.sin_addr.s_addr == 0;
+       } else if (m_addr_family == AF_INET6) {
+               static const char zero[16] = {0};
+               return memcmp(m_address.ipv6.sin6_addr.s6_addr,
+                             zero, 16) == 0;
+       }
+       return false;
+}
+
 void Address::setAddress(u32 address)
 {
        m_addr_family = AF_INET;