@ -108,17 +108,22 @@ bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, unsign
struct addrinfo * aiTrav = aiRes ;
struct addrinfo * aiTrav = aiRes ;
while ( aiTrav ! = NULL & & ( nMaxSolutions = = 0 | | vIP . size ( ) < nMaxSolutions ) )
while ( aiTrav ! = NULL & & ( nMaxSolutions = = 0 | | vIP . size ( ) < nMaxSolutions ) )
{
{
CNetAddr resolved ;
if ( aiTrav - > ai_family = = AF_INET )
if ( aiTrav - > ai_family = = AF_INET )
{
{
assert ( aiTrav - > ai_addrlen > = sizeof ( sockaddr_in ) ) ;
assert ( aiTrav - > ai_addrlen > = sizeof ( sockaddr_in ) ) ;
vIP . push_back ( CNetAddr ( ( ( struct sockaddr_in * ) ( aiTrav - > ai_addr ) ) - > sin_addr ) ) ;
resolved = CNetAddr ( ( ( struct sockaddr_in * ) ( aiTrav - > ai_addr ) ) - > sin_addr ) ;
}
}
if ( aiTrav - > ai_family = = AF_INET6 )
if ( aiTrav - > ai_family = = AF_INET6 )
{
{
assert ( aiTrav - > ai_addrlen > = sizeof ( sockaddr_in6 ) ) ;
assert ( aiTrav - > ai_addrlen > = sizeof ( sockaddr_in6 ) ) ;
struct sockaddr_in6 * s6 = ( struct sockaddr_in6 * ) aiTrav - > ai_addr ;
struct sockaddr_in6 * s6 = ( struct sockaddr_in6 * ) aiTrav - > ai_addr ;
vIP . push_back ( CNetAddr ( s6 - > sin6_addr , s6 - > sin6_scope_id ) ) ;
resolved = CNetAddr ( s6 - > sin6_addr , s6 - > sin6_scope_id ) ;
}
/* Never allow resolving to an internal address. Consider any such result invalid */
if ( ! resolved . IsInternal ( ) ) {
vIP . push_back ( resolved ) ;
}
}
aiTrav = aiTrav - > ai_next ;
aiTrav = aiTrav - > ai_next ;