* 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
This commit is contained in:
Axel Dörfler
2010-08-18 15:41:33 +00:00
parent 3f918dc3fa
commit 28de0904dc
2 changed files with 38 additions and 16 deletions
+4 -1
View File
@@ -80,6 +80,7 @@ public:
uint16 Port() const; uint16 Port() const;
size_t Length() const; size_t Length() const;
const sockaddr& SockAddr() const; const sockaddr& SockAddr() const;
sockaddr& SockAddr();
bool IsEmpty() const; bool IsEmpty() const;
bool IsWildcard() const; bool IsWildcard() const;
@@ -93,7 +94,7 @@ public:
bool IsLinkLocal() const; bool IsLinkLocal() const;
bool IsSiteLocal() const; bool IsSiteLocal() const;
bool IsLocal() const; bool IsLocal() const;
ssize_t PrefixLength() const; ssize_t PrefixLength() const;
uint32 LinkLevelIndex() const; uint32 LinkLevelIndex() const;
@@ -125,6 +126,8 @@ public:
operator const sockaddr*() const; operator const sockaddr*() const;
operator const sockaddr&() const; operator const sockaddr&() const;
operator sockaddr*();
operator sockaddr&();
private: private:
sockaddr_storage fAddress; sockaddr_storage fAddress;
+34 -15
View File
@@ -338,12 +338,12 @@ BNetworkAddress::SetToMask(int family, uint32 prefixLength)
{ {
if (prefixLength > 32) if (prefixLength > 32)
return B_BAD_VALUE; return B_BAD_VALUE;
sockaddr_in& mask = (sockaddr_in&)fAddress; sockaddr_in& mask = (sockaddr_in&)fAddress;
memset(&fAddress, 0, sizeof(sockaddr_storage)); memset(&fAddress, 0, sizeof(sockaddr_storage));
mask.sin_family = AF_INET; mask.sin_family = AF_INET;
mask.sin_len = sizeof(sockaddr_in); mask.sin_len = sizeof(sockaddr_in);
uint32 hostMask = 0; uint32 hostMask = 0;
for (uint8 i = 32; i > 32 - prefixLength; i--) for (uint8 i = 32; i > 32 - prefixLength; i--)
hostMask |= 1 << (i - 1); hostMask |= 1 << (i - 1);
@@ -361,14 +361,14 @@ BNetworkAddress::SetToMask(int family, uint32 prefixLength)
memset(&fAddress, 0, sizeof(sockaddr_storage)); memset(&fAddress, 0, sizeof(sockaddr_storage));
mask.sin6_family = AF_INET6; mask.sin6_family = AF_INET6;
mask.sin6_len = sizeof(sockaddr_in6); mask.sin6_len = sizeof(sockaddr_in6);
for (uint8 i = 0; i < sizeof(in6_addr); i++, prefixLength -= 8) { for (uint8 i = 0; i < sizeof(in6_addr); i++, prefixLength -= 8) {
if (prefixLength < 8) { if (prefixLength < 8) {
mask.sin6_addr.s6_addr[i] mask.sin6_addr.s6_addr[i]
= (uint8)(0xff << (8 - prefixLength)); = (uint8)(0xff << (8 - prefixLength));
break; break;
} }
mask.sin6_addr.s6_addr[i] = 0xff; mask.sin6_addr.s6_addr[i] = 0xff;
} }
break; break;
@@ -486,6 +486,13 @@ BNetworkAddress::SockAddr() const
} }
sockaddr&
BNetworkAddress::SockAddr()
{
return (sockaddr&)fAddress;
}
bool bool
BNetworkAddress::IsEmpty() const BNetworkAddress::IsEmpty() const
{ {
@@ -536,7 +543,7 @@ BNetworkAddress::IsMulticast() const
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_MULTICAST(&((sockaddr_in6&)fAddress).sin6_addr); return IN6_IS_ADDR_MULTICAST(&((sockaddr_in6&)fAddress).sin6_addr);
default: default:
return false; return false;
} }
@@ -549,7 +556,7 @@ BNetworkAddress::IsMulticastGlobal() const
switch (fAddress.ss_family) { switch (fAddress.ss_family) {
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_MC_GLOBAL(&((sockaddr_in6&)fAddress).sin6_addr); return IN6_IS_ADDR_MC_GLOBAL(&((sockaddr_in6&)fAddress).sin6_addr);
default: default:
return false; return false;
} }
@@ -563,7 +570,7 @@ BNetworkAddress::IsMulticastNodeLocal() const
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_MC_NODELOCAL( return IN6_IS_ADDR_MC_NODELOCAL(
&((sockaddr_in6&)fAddress).sin6_addr); &((sockaddr_in6&)fAddress).sin6_addr);
default: default:
return false; return false;
} }
@@ -577,7 +584,7 @@ BNetworkAddress::IsMulticastLinkLocal() const
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_MC_LINKLOCAL( return IN6_IS_ADDR_MC_LINKLOCAL(
&((sockaddr_in6&)fAddress).sin6_addr); &((sockaddr_in6&)fAddress).sin6_addr);
default: default:
return false; return false;
} }
@@ -591,7 +598,7 @@ BNetworkAddress::IsMulticastSiteLocal() const
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_MC_SITELOCAL( return IN6_IS_ADDR_MC_SITELOCAL(
&((sockaddr_in6&)fAddress).sin6_addr); &((sockaddr_in6&)fAddress).sin6_addr);
default: default:
return false; return false;
} }
@@ -605,7 +612,7 @@ BNetworkAddress::IsMulticastOrgLocal() const
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_MC_ORGLOCAL( return IN6_IS_ADDR_MC_ORGLOCAL(
&((sockaddr_in6&)fAddress).sin6_addr); &((sockaddr_in6&)fAddress).sin6_addr);
default: default:
return false; return false;
} }
@@ -619,7 +626,7 @@ BNetworkAddress::IsLinkLocal() const
switch (fAddress.ss_family) { switch (fAddress.ss_family) {
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_LINKLOCAL(&((sockaddr_in6&)fAddress).sin6_addr); return IN6_IS_ADDR_LINKLOCAL(&((sockaddr_in6&)fAddress).sin6_addr);
default: default:
return false; return false;
} }
@@ -632,7 +639,7 @@ BNetworkAddress::IsSiteLocal() const
switch (fAddress.ss_family) { switch (fAddress.ss_family) {
case AF_INET6: case AF_INET6:
return IN6_IS_ADDR_SITELOCAL(&((sockaddr_in6&)fAddress).sin6_addr); return IN6_IS_ADDR_SITELOCAL(&((sockaddr_in6&)fAddress).sin6_addr);
default: default:
return false; return false;
} }
@@ -670,7 +677,7 @@ BNetworkAddress::PrefixLength() const
case AF_INET: case AF_INET:
{ {
sockaddr_in& mask = (sockaddr_in&)fAddress; sockaddr_in& mask = (sockaddr_in&)fAddress;
ssize_t result = 0; ssize_t result = 0;
uint32 hostMask = ntohl(mask.sin_addr.s_addr); uint32 hostMask = ntohl(mask.sin_addr.s_addr);
for (uint8 i = 32; i > 0; i--) { for (uint8 i = 32; i > 0; i--) {
@@ -694,7 +701,7 @@ BNetworkAddress::PrefixLength() const
result++; result++;
} }
} }
return 128; return 128;
} }
@@ -923,7 +930,7 @@ BNetworkAddress::Equals(const BNetworkAddress& other, bool includePort) const
return memcmp(&address.sin6_addr, &otherAddress.sin6_addr, return memcmp(&address.sin6_addr, &otherAddress.sin6_addr,
sizeof(address.sin6_addr)) == 0; sizeof(address.sin6_addr)) == 0;
} }
default: default:
if (fAddress.ss_len != other.fAddress.ss_len) if (fAddress.ss_len != other.fAddress.ss_len)
return false; return false;
@@ -1007,3 +1014,15 @@ BNetworkAddress::operator const sockaddr&() const
{ {
return (const sockaddr&)fAddress; return (const sockaddr&)fAddress;
} }
BNetworkAddress::operator sockaddr*()
{
return (sockaddr*)&fAddress;
}
BNetworkAddress::operator sockaddr&()
{
return (sockaddr&)fAddress;
}