bool
Ip::Address::IsIPv4() const
{
- return IsAnyAddr() || IsNoAddr() || IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr );
+ return IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr );
}
bool
Ip::Address::IsIPv6() const
{
- return IsAnyAddr() || IsNoAddr() || !IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr );
+ return !IsIPv4();
}
bool
Ip::Address::IsAnyAddr() const
{
- return IN6_IS_ADDR_UNSPECIFIED( &m_SocketAddr.sin6_addr );
+ return IN6_IS_ADDR_UNSPECIFIED( &m_SocketAddr.sin6_addr ) || IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v4_anyaddr); ;
}
/// NOTE: Does NOT clear the Port stored. Ony the Address and Type.
return true;
}
+ if ( IsNoAddr() ) {
+ m_SocketAddr.sin6_addr = v4_noaddr;
+ return true;
+ }
+
if ( IsIPv4())
return true;
Ip::Address::IsNoAddr() const
{
// IFF the address == 0xff..ff (all ones)
- return IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v6_noaddr );
+ return IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v6_noaddr )
+ || IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v4_noaddr );
}
void
/* methods */
/** Test whether content can be used as an IPv4 address
- \retval true if content was received as an IPv4 address
\retval true if content was received as an IPv4-Mapped address
\retval false if content was received as a non-mapped IPv6 native address.
*/
bool IsIPv4() const;
/** Test whether content can be used as an IPv6 address.
- \retval true if --enable-ipv6 has been compiled.
- \retval false if --disable-ipv6 has been compiled.
- \retval false if --with-ipv6-split-stack has been compiled AND content is IPv4-mapped.
+ \retval true if content is a non IPv4-mapped address.
+ \retval false if content is IPv4-mapped.
*/
bool IsIPv6() const;