mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-08-10 23:30:14 -04:00
fixed endian in some IPv6 methods (Patch 1f33d608b55fb4b82db96eab5f34dcd7004c3a14 from G10H4ck)
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-IPv6@8199 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
d40a9002fa
commit
4e5e974a12
1 changed files with 7 additions and 5 deletions
|
@ -24,6 +24,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
#include "util/rsnet.h"
|
#include "util/rsnet.h"
|
||||||
#include "util/rsstring.h"
|
#include "util/rsstring.h"
|
||||||
|
@ -499,8 +500,9 @@ bool sockaddr_storage_isLinkLocal(const struct sockaddr_storage &addr)
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
{
|
{
|
||||||
const sockaddr_in6 * addr6 = (const sockaddr_in6 *) &addr;
|
const sockaddr_in6 * addr6 = (const sockaddr_in6 *) &addr;
|
||||||
u_int16_t mask = 0xc0ff; // Mask end prefix inverted because of IPv6 is big endian
|
u_int16_t mask = htons(0xffc0);
|
||||||
return ((addr6->sin6_addr.s6_addr16[0] & mask ) == 0x80fe);
|
u_int16_t llPrefix = htons(0xfe80);
|
||||||
|
return ((addr6->sin6_addr.s6_addr16[0] & mask ) == llPrefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1026,9 +1028,9 @@ bool sockaddr_storage_ipv6_isnull(const struct sockaddr_storage & addr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const sockaddr_in6 & addr6 = (const sockaddr_in6 &) addr;
|
const sockaddr_in6 & addr6 = (const sockaddr_in6 &) addr;
|
||||||
bool isNull = (addr6.sin6_addr.s6_addr32[3] == 0x0);
|
bool isNull = (addr6.sin6_addr.s6_addr32[3] == 0x00000000);
|
||||||
for (int i=0; isNull && i<3; ++i)
|
for (int i=0; isNull && i<3; ++i)
|
||||||
isNull &= (addr6.sin6_addr.s6_addr32[i] == 0x0);
|
isNull &= (addr6.sin6_addr.s6_addr32[i] == 0x00000000);
|
||||||
|
|
||||||
return isNull;
|
return isNull;
|
||||||
}
|
}
|
||||||
|
@ -1045,7 +1047,7 @@ bool sockaddr_storage_ipv6_isValidNet(const struct sockaddr_storage & )
|
||||||
bool sockaddr_storage_ipv6_isLoopbackNet(const struct sockaddr_storage & addr )
|
bool sockaddr_storage_ipv6_isLoopbackNet(const struct sockaddr_storage & addr )
|
||||||
{
|
{
|
||||||
sockaddr_in6 & addr6 = (sockaddr_in6 &) addr;
|
sockaddr_in6 & addr6 = (sockaddr_in6 &) addr;
|
||||||
bool isLp = (addr6.sin6_addr.s6_addr32[3] == 0x10000000); // IPv6 is big endian
|
bool isLp = (addr6.sin6_addr.s6_addr32[3] == htonl(0x00000001));
|
||||||
for (int i=0; isLp && i<3; ++i)
|
for (int i=0; isLp && i<3; ++i)
|
||||||
isLp &= (addr6.sin6_addr.s6_addr32[i] == 0x00000000);
|
isLp &= (addr6.sin6_addr.s6_addr32[i] == 0x00000000);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue