From 28de0904dc85d031e430aca519738ac898577f8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 18 Aug 2010 15:41:33 +0000 Subject: [PATCH] * Added non-const sockaddr casts. * Automatic whitespace cleanup. * This also fixes the build; I wanted to commit this earlier. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38237 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/net/NetworkAddress.h | 5 +- src/kits/network/libnetapi/NetworkAddress.cpp | 49 +++++++++++++------ 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/headers/os/net/NetworkAddress.h b/headers/os/net/NetworkAddress.h index b2738f717e..e856f2c405 100644 --- a/headers/os/net/NetworkAddress.h +++ b/headers/os/net/NetworkAddress.h @@ -80,6 +80,7 @@ public: uint16 Port() const; size_t Length() const; const sockaddr& SockAddr() const; + sockaddr& SockAddr(); bool IsEmpty() const; bool IsWildcard() const; @@ -93,7 +94,7 @@ public: bool IsLinkLocal() const; bool IsSiteLocal() const; bool IsLocal() const; - + ssize_t PrefixLength() const; uint32 LinkLevelIndex() const; @@ -125,6 +126,8 @@ public: operator const sockaddr*() const; operator const sockaddr&() const; + operator sockaddr*(); + operator sockaddr&(); private: sockaddr_storage fAddress; diff --git a/src/kits/network/libnetapi/NetworkAddress.cpp b/src/kits/network/libnetapi/NetworkAddress.cpp index 9213e4dade..406b389854 100644 --- a/src/kits/network/libnetapi/NetworkAddress.cpp +++ b/src/kits/network/libnetapi/NetworkAddress.cpp @@ -338,12 +338,12 @@ BNetworkAddress::SetToMask(int family, uint32 prefixLength) { if (prefixLength > 32) return B_BAD_VALUE; - + sockaddr_in& mask = (sockaddr_in&)fAddress; memset(&fAddress, 0, sizeof(sockaddr_storage)); mask.sin_family = AF_INET; mask.sin_len = sizeof(sockaddr_in); - + uint32 hostMask = 0; for (uint8 i = 32; i > 32 - prefixLength; i--) hostMask |= 1 << (i - 1); @@ -361,14 +361,14 @@ BNetworkAddress::SetToMask(int family, uint32 prefixLength) memset(&fAddress, 0, sizeof(sockaddr_storage)); mask.sin6_family = AF_INET6; mask.sin6_len = sizeof(sockaddr_in6); - + for (uint8 i = 0; i < sizeof(in6_addr); i++, prefixLength -= 8) { if (prefixLength < 8) { mask.sin6_addr.s6_addr[i] = (uint8)(0xff << (8 - prefixLength)); break; } - + mask.sin6_addr.s6_addr[i] = 0xff; } break; @@ -486,6 +486,13 @@ BNetworkAddress::SockAddr() const } +sockaddr& +BNetworkAddress::SockAddr() +{ + return (sockaddr&)fAddress; +} + + bool BNetworkAddress::IsEmpty() const { @@ -536,7 +543,7 @@ BNetworkAddress::IsMulticast() const case AF_INET6: return IN6_IS_ADDR_MULTICAST(&((sockaddr_in6&)fAddress).sin6_addr); - + default: return false; } @@ -549,7 +556,7 @@ BNetworkAddress::IsMulticastGlobal() const switch (fAddress.ss_family) { case AF_INET6: return IN6_IS_ADDR_MC_GLOBAL(&((sockaddr_in6&)fAddress).sin6_addr); - + default: return false; } @@ -563,7 +570,7 @@ BNetworkAddress::IsMulticastNodeLocal() const case AF_INET6: return IN6_IS_ADDR_MC_NODELOCAL( &((sockaddr_in6&)fAddress).sin6_addr); - + default: return false; } @@ -577,7 +584,7 @@ BNetworkAddress::IsMulticastLinkLocal() const case AF_INET6: return IN6_IS_ADDR_MC_LINKLOCAL( &((sockaddr_in6&)fAddress).sin6_addr); - + default: return false; } @@ -591,7 +598,7 @@ BNetworkAddress::IsMulticastSiteLocal() const case AF_INET6: return IN6_IS_ADDR_MC_SITELOCAL( &((sockaddr_in6&)fAddress).sin6_addr); - + default: return false; } @@ -605,7 +612,7 @@ BNetworkAddress::IsMulticastOrgLocal() const case AF_INET6: return IN6_IS_ADDR_MC_ORGLOCAL( &((sockaddr_in6&)fAddress).sin6_addr); - + default: return false; } @@ -619,7 +626,7 @@ BNetworkAddress::IsLinkLocal() const switch (fAddress.ss_family) { case AF_INET6: return IN6_IS_ADDR_LINKLOCAL(&((sockaddr_in6&)fAddress).sin6_addr); - + default: return false; } @@ -632,7 +639,7 @@ BNetworkAddress::IsSiteLocal() const switch (fAddress.ss_family) { case AF_INET6: return IN6_IS_ADDR_SITELOCAL(&((sockaddr_in6&)fAddress).sin6_addr); - + default: return false; } @@ -670,7 +677,7 @@ BNetworkAddress::PrefixLength() const case AF_INET: { sockaddr_in& mask = (sockaddr_in&)fAddress; - + ssize_t result = 0; uint32 hostMask = ntohl(mask.sin_addr.s_addr); for (uint8 i = 32; i > 0; i--) { @@ -694,7 +701,7 @@ BNetworkAddress::PrefixLength() const result++; } } - + return 128; } @@ -923,7 +930,7 @@ BNetworkAddress::Equals(const BNetworkAddress& other, bool includePort) const return memcmp(&address.sin6_addr, &otherAddress.sin6_addr, sizeof(address.sin6_addr)) == 0; } - + default: if (fAddress.ss_len != other.fAddress.ss_len) return false; @@ -1007,3 +1014,15 @@ BNetworkAddress::operator const sockaddr&() const { return (const sockaddr&)fAddress; } + + +BNetworkAddress::operator sockaddr*() +{ + return (sockaddr*)&fAddress; +} + + +BNetworkAddress::operator sockaddr&() +{ + return (sockaddr&)fAddress; +}