don't default to loopback only for ipv6 tests, if inet_pton available allow lookups

This commit is contained in:
toddouska
2013-04-11 10:12:15 -07:00
parent 576cb10732
commit b5c43d8ad4
2 changed files with 29 additions and 13 deletions

View File

@@ -60,6 +60,7 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
AX_CXX_COMPILER_VERSION AX_CXX_COMPILER_VERSION
AC_CHECK_FUNCS([gethostbyname]) AC_CHECK_FUNCS([gethostbyname])
AC_CHECK_FUNCS([inet_pton])
AC_CHECK_FUNCS([gettimeofday]) AC_CHECK_FUNCS([gettimeofday])
AC_CHECK_FUNCS([inet_ntoa]) AC_CHECK_FUNCS([inet_ntoa])
AC_CHECK_FUNCS([memset]) AC_CHECK_FUNCS([memset])

View File

@@ -163,7 +163,11 @@ void start_thread(THREAD_FUNC, func_args*, THREAD_TYPE*);
void join_thread(THREAD_TYPE); void join_thread(THREAD_TYPE);
/* yaSSL */ /* yaSSL */
static const char* const yasslIP = "127.0.0.1"; #ifndef TEST_IPV6
static const char* const yasslIP = "127.0.0.1";
#else
static const char* const yasslIP = "::1";
#endif
static const word16 yasslPort = 11111; static const word16 yasslPort = 11111;
@@ -331,39 +335,50 @@ static INLINE void showPeer(CYASSL* ssl)
static INLINE void build_addr(SOCKADDR_IN_T* addr, static INLINE void build_addr(SOCKADDR_IN_T* addr,
const char* peer, word16 port) const char* peer, word16 port)
{ {
#ifndef TEST_IPV6 int useLookup = 0;
const char* host = peer; (void)useLookup;
memset(addr, 0, sizeof(SOCKADDR_IN_T));
#ifndef TEST_IPV6
/* peer could be in human readable form */ /* peer could be in human readable form */
if (peer != INADDR_ANY && isalpha((int)peer[0])) { if (peer != INADDR_ANY && isalpha((int)peer[0])) {
struct hostent* entry = gethostbyname(peer); struct hostent* entry = gethostbyname(peer);
if (entry) { if (entry) {
struct sockaddr_in tmp; memcpy(&addr->sin_addr.s_addr, entry->h_addr_list[0],
memset(&tmp, 0, sizeof(struct sockaddr_in));
memcpy(&tmp.sin_addr.s_addr, entry->h_addr_list[0],
entry->h_length); entry->h_length);
host = inet_ntoa(tmp.sin_addr); useLookup = 1;
} }
else else
err_sys("no entry for host"); err_sys("no entry for host");
} }
#endif #endif
memset(addr, 0, sizeof(SOCKADDR_IN_T));
#ifndef TEST_IPV6 #ifndef TEST_IPV6
addr->sin_family = AF_INET_V; addr->sin_family = AF_INET_V;
addr->sin_port = htons(port); addr->sin_port = htons(port);
if (host == INADDR_ANY) if (peer == INADDR_ANY)
addr->sin_addr.s_addr = INADDR_ANY; addr->sin_addr.s_addr = INADDR_ANY;
else else {
addr->sin_addr.s_addr = inet_addr(host); if (!useLookup)
addr->sin_addr.s_addr = inet_addr(peer);
}
#else #else
(void)peer;
addr->sin6_family = AF_INET_V; addr->sin6_family = AF_INET_V;
addr->sin6_port = htons(port); addr->sin6_port = htons(port);
addr->sin6_addr = in6addr_loopback; if (peer == INADDR_ANY)
addr->sin6_addr = in6addr_any;
else {
#ifdef HAVE_INET_PTON
if (inet_pton(AF_INET_V, peer, &addr->sin6_addr) != 1)
err_sys("ipv6 lookup failed");
#else
printf("no ipv6 inet_pton, loopback only tests/examples\n");
addr->sin6_addr = in6addr_loopback;
#endif
}
#endif #endif
} }