version 1.1.2.3, 2007/06/18 09:10:40
|
version 1.1.2.4, 2007/06/18 12:02:27
|
|
|
} | } |
} | } |
} | } |
if ((isalpha(*src) && tolower(*src) <= 'f') || isdigit(*src)) |
if (isascii(*src) && |
|
(isalpha(*src) && tolower(*src) <= 'f') || isdigit(*src)) |
{ | { |
// Check for ipv4 compatible ipv6 or ipv4 mapped ipv6 addresses | // Check for ipv4 compatible ipv6 or ipv4 mapped ipv6 addresses |
if(!strchr(src, ':') && strchr(src, '.')) | if(!strchr(src, ':') && strchr(src, '.')) |
|
|
{ | { |
return 0; | return 0; |
} | } |
if (!((isalpha(*src) && tolower(*src) <= 'f') || isdigit(*src))) |
if (!isascii(*src) || |
|
!((isalpha(*src) && tolower(*src) <= 'f') || isdigit(*src))) |
{ | { |
return 0; | return 0; |
} | } |
|
|
{ | { |
return 0; | return 0; |
} | } |
|
memset(dst, 0, PEGASUS_IN6_ADDR_SIZE); |
memset(dst, 0, sizeof(struct in6_addr)); |
|
|
|
for (int i = 0, j = 0; i < 8 ; ++i) | for (int i = 0, j = 0; i < 8 ; ++i) |
{ | { |
if (ccIndex == i) | if (ccIndex == i) |
|
|
int zeroCnt = 0; | int zeroCnt = 0; |
int index = 0; | int index = 0; |
| |
memcpy (n, src, sizeof (struct in6_addr)); |
memcpy (n, src, PEGASUS_IN6_ADDR_SIZE); |
memset(dst, 0, size); | memset(dst, 0, size); |
for (int i = 0; i < 8 ; ++i) | for (int i = 0; i < 8 ; ++i) |
{ | { |
|
|
Uint32 m; | Uint32 m; |
m = htons(n[7]); | m = htons(n[7]); |
m = (m << 16) + htons(n[6]); | m = (m << 16) + htons(n[6]); |
HostAddress::convertBinaryToText(AF_INET, &m, tmp, 50); |
convertBinaryToText(AF_INET, &m, tmp, 50); |
i += 2; | i += 2; |
} | } |
else | else |
|
|
switch (af) | switch (af) |
{ | { |
case AT_IPV6: | case AT_IPV6: |
return !memcmp(p1, p2, sizeof(struct in6_addr)); |
return !memcmp(p1, p2, PEGASUS_IN6_ADDR_SIZE); |
case AT_IPV4: | case AT_IPV4: |
return !memcmp(p1, p2, sizeof(struct in_addr)); | return !memcmp(p1, p2, sizeof(struct in_addr)); |
} | } |
|
|
Boolean HostAddress::isValidIPV6Address (const String &ipv6Address) | Boolean HostAddress::isValidIPV6Address (const String &ipv6Address) |
{ | { |
CString addr = ipv6Address.getCString(); | CString addr = ipv6Address.getCString(); |
|
#ifdef PEGASUS_ENABLE_IPV6 |
struct in6_addr iaddr; | struct in6_addr iaddr; |
|
#else |
|
char iaddr[PEGASUS_IN6_ADDR_SIZE]; |
|
#endif |
return 1 == convertTextToBinary(AT_IPV6, (const char*) addr, | return 1 == convertTextToBinary(AT_IPV6, (const char*) addr, |
(void*)&iaddr); | (void*)&iaddr); |
} | } |