=== modified file 'src/ip/Address.cc' --- src/ip/Address.cc 2011-07-04 04:28:59 +0000 +++ src/ip/Address.cc 2011-07-22 11:12:06 +0000 @@ -164,44 +164,6 @@ return true; } -bool -Ip::Address::IsSockAddr() const -{ - return (m_SocketAddr.sin6_port != 0); -} - -bool -Ip::Address::IsIPv4() const -{ - return IsAnyAddr() || IsNoAddr() || IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr ); -} - -bool -Ip::Address::IsIPv6() const -{ - return IsAnyAddr() || IsNoAddr() || !IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr ); -} - -bool -Ip::Address::IsAnyAddr() const -{ - return IN6_IS_ADDR_UNSPECIFIED( &m_SocketAddr.sin6_addr ); -} - -/// NOTE: Does NOT clear the Port stored. Ony the Address and Type. -void -Ip::Address::SetAnyAddr() -{ - memset(&m_SocketAddr.sin6_addr, 0, sizeof(struct in6_addr) ); -} - -/// NOTE: completely empties the Ip::Address structure. Address, Port, Type, everything. -void -Ip::Address::SetEmpty() -{ - memset(&m_SocketAddr, 0, sizeof(m_SocketAddr) ); -} - #if _SQUID_AIX_ // Bug 2885 comment 78 explains. // In short AIX has a different netinet/in.h union definition @@ -225,6 +187,45 @@ #endif bool +Ip::Address::IsSockAddr() const +{ + return (m_SocketAddr.sin6_port != 0); +} + +bool +Ip::Address::IsIPv4() const +{ + return IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr ); +} + +bool +Ip::Address::IsIPv6() const +{ + return !IN6_IS_ADDR_V4MAPPED( &m_SocketAddr.sin6_addr ); +} + +bool +Ip::Address::IsAnyAddr() const +{ + 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. +void +Ip::Address::SetAnyAddr() +{ + memset(&m_SocketAddr.sin6_addr, 0, sizeof(struct in6_addr) ); +} + +/// NOTE: completely empties the Ip::Address structure. Address, Port, Type, everything. +void +Ip::Address::SetEmpty() +{ + memset(&m_SocketAddr, 0, sizeof(m_SocketAddr) ); +} + +bool Ip::Address::SetIPv4() { if ( IsLocalhost() ) { @@ -237,6 +238,11 @@ return true; } + if ( IsNoAddr() ) { + m_SocketAddr.sin6_addr = v4_noaddr; + return true; + } + if ( IsIPv4()) return true; @@ -247,7 +253,8 @@ bool Ip::Address::IsLocalhost() const { - return IN6_IS_ADDR_LOOPBACK( &m_SocketAddr.sin6_addr ) || IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v4_localhost ); + return IN6_IS_ADDR_LOOPBACK( &m_SocketAddr.sin6_addr ) + || IN6_ARE_ADDR_EQUAL( &m_SocketAddr.sin6_addr, &v4_localhost ); } void @@ -279,7 +286,8 @@ 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