mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 19:24:42 +02:00
Merge branch 'master' of github.com:cyassl/cyassl
This commit is contained in:
@@ -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([getaddrinfo])
|
||||||
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])
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
|
||||||
@@ -328,42 +332,72 @@ 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,
|
||||||
const char* peer, word16 port)
|
word16 port, int udp)
|
||||||
{
|
{
|
||||||
#ifndef TEST_IPV6
|
int useLookup = 0;
|
||||||
const char* host = peer;
|
(void)useLookup;
|
||||||
|
(void)udp;
|
||||||
|
|
||||||
|
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_GETADDRINFO
|
||||||
|
struct addrinfo hints;
|
||||||
|
struct addrinfo* answer = NULL;
|
||||||
|
int ret;
|
||||||
|
char strPort[80];
|
||||||
|
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
|
||||||
|
hints.ai_family = AF_INET_V;
|
||||||
|
hints.ai_socktype = udp ? SOCK_DGRAM : SOCK_STREAM;
|
||||||
|
hints.ai_protocol = udp ? IPPROTO_UDP : IPPROTO_TCP;
|
||||||
|
|
||||||
|
snprintf(strPort, sizeof(strPort), "%d", port);
|
||||||
|
strPort[79] = '\0';
|
||||||
|
|
||||||
|
ret = getaddrinfo(peer, strPort, &hints, &answer);
|
||||||
|
if (ret < 0 || answer == NULL)
|
||||||
|
err_sys("getaddrinfo failed");
|
||||||
|
|
||||||
|
memcpy(addr, answer->ai_addr, answer->ai_addrlen);
|
||||||
|
freeaddrinfo(answer);
|
||||||
|
#else
|
||||||
|
printf("no ipv6 getaddrinfo, loopback only tests/examples\n");
|
||||||
|
addr->sin6_addr = in6addr_loopback;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -409,7 +443,7 @@ static INLINE void tcp_connect(SOCKET_T* sockfd, const char* ip, word16 port,
|
|||||||
int udp)
|
int udp)
|
||||||
{
|
{
|
||||||
SOCKADDR_IN_T addr;
|
SOCKADDR_IN_T addr;
|
||||||
build_addr(&addr, ip, port);
|
build_addr(&addr, ip, port, udp);
|
||||||
tcp_socket(sockfd, udp);
|
tcp_socket(sockfd, udp);
|
||||||
|
|
||||||
if (!udp) {
|
if (!udp) {
|
||||||
@@ -467,7 +501,7 @@ static INLINE void tcp_listen(SOCKET_T* sockfd, int* port, int useAnyAddr,
|
|||||||
|
|
||||||
/* don't use INADDR_ANY by default, firewall may block, make user switch
|
/* don't use INADDR_ANY by default, firewall may block, make user switch
|
||||||
on */
|
on */
|
||||||
build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), *port);
|
build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), *port, udp);
|
||||||
tcp_socket(sockfd, udp);
|
tcp_socket(sockfd, udp);
|
||||||
|
|
||||||
#ifndef USE_WINDOWS_API
|
#ifndef USE_WINDOWS_API
|
||||||
@@ -487,11 +521,15 @@ static INLINE void tcp_listen(SOCKET_T* sockfd, int* port, int useAnyAddr,
|
|||||||
err_sys("tcp listen failed");
|
err_sys("tcp listen failed");
|
||||||
}
|
}
|
||||||
#if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)
|
#if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)
|
||||||
if (*port == 0)
|
if (*port == 0) {
|
||||||
{
|
|
||||||
socklen_t len = sizeof(addr);
|
socklen_t len = sizeof(addr);
|
||||||
if (getsockname(*sockfd, (struct sockaddr*)&addr, &len) == 0)
|
if (getsockname(*sockfd, (struct sockaddr*)&addr, &len) == 0) {
|
||||||
*port = ntohs(addr.sin_port);
|
#ifndef TEST_IPV6
|
||||||
|
*port = ntohs(addr.sin_port);
|
||||||
|
#else
|
||||||
|
*port = ntohs(addr.sin6_port);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -523,7 +561,7 @@ static INLINE void udp_accept(SOCKET_T* sockfd, int* clientfd, int useAnyAddr,
|
|||||||
SOCKADDR_IN_T addr;
|
SOCKADDR_IN_T addr;
|
||||||
|
|
||||||
(void)args;
|
(void)args;
|
||||||
build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), port);
|
build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), port, 1);
|
||||||
tcp_socket(sockfd, 1);
|
tcp_socket(sockfd, 1);
|
||||||
|
|
||||||
|
|
||||||
@@ -541,11 +579,15 @@ static INLINE void udp_accept(SOCKET_T* sockfd, int* clientfd, int useAnyAddr,
|
|||||||
err_sys("tcp bind failed");
|
err_sys("tcp bind failed");
|
||||||
|
|
||||||
#if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)
|
#if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)
|
||||||
if (port == 0)
|
if (port == 0) {
|
||||||
{
|
|
||||||
socklen_t len = sizeof(addr);
|
socklen_t len = sizeof(addr);
|
||||||
if (getsockname(*sockfd, (struct sockaddr*)&addr, &len) == 0)
|
if (getsockname(*sockfd, (struct sockaddr*)&addr, &len) == 0) {
|
||||||
port = ntohs(addr.sin_port);
|
#ifndef TEST_IPV6
|
||||||
|
port = ntohs(addr.sin_port);
|
||||||
|
#else
|
||||||
|
port = ntohs(addr.sin6_port);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -439,7 +439,7 @@ THREAD_RETURN CYASSL_THREAD client_test(void* args)
|
|||||||
err_sys("unable to get SSL object");
|
err_sys("unable to get SSL object");
|
||||||
if (doDTLS) {
|
if (doDTLS) {
|
||||||
SOCKADDR_IN_T addr;
|
SOCKADDR_IN_T addr;
|
||||||
build_addr(&addr, host, port);
|
build_addr(&addr, host, port, 1);
|
||||||
CyaSSL_dtls_set_peer(ssl, &addr, sizeof(addr));
|
CyaSSL_dtls_set_peer(ssl, &addr, sizeof(addr));
|
||||||
tcp_socket(&sockfd, 1);
|
tcp_socket(&sockfd, 1);
|
||||||
}
|
}
|
||||||
@@ -538,7 +538,7 @@ THREAD_RETURN CYASSL_THREAD client_test(void* args)
|
|||||||
#else
|
#else
|
||||||
sleep(1);
|
sleep(1);
|
||||||
#endif
|
#endif
|
||||||
build_addr(&addr, host, port);
|
build_addr(&addr, host, port, 1);
|
||||||
CyaSSL_dtls_set_peer(sslResume, &addr, sizeof(addr));
|
CyaSSL_dtls_set_peer(sslResume, &addr, sizeof(addr));
|
||||||
tcp_socket(&sockfd, 1);
|
tcp_socket(&sockfd, 1);
|
||||||
}
|
}
|
||||||
|
@@ -135,7 +135,7 @@ void echoclient_test(void* args)
|
|||||||
|
|
||||||
if (doDTLS) {
|
if (doDTLS) {
|
||||||
SOCKADDR_IN_T addr;
|
SOCKADDR_IN_T addr;
|
||||||
build_addr(&addr, yasslIP, port);
|
build_addr(&addr, yasslIP, port, 1);
|
||||||
CyaSSL_dtls_set_peer(ssl, &addr, sizeof(addr));
|
CyaSSL_dtls_set_peer(ssl, &addr, sizeof(addr));
|
||||||
tcp_socket(&sockfd, 1);
|
tcp_socket(&sockfd, 1);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user