From 4eb76e1d71f8a9adb4dba103a6eeec7230987bde Mon Sep 17 00:00:00 2001 From: David Garske Date: Wed, 15 Mar 2017 11:25:24 -0700 Subject: [PATCH] Fixes for building with IPV6. Added new WOLFSSL_IPV6 define to indicate IPV6 support. Fix to not include connect() and socket() calls unless HAVE_HTTP_CLIENT, HAVE_OCSP or HAVE_CRL_IO defined. Typo fixes. --- configure.ac | 4 +-- src/io.c | 55 ++++++++++++++++++------------------ wolfssl/io.h | 2 +- wolfssl/wolfcrypt/settings.h | 5 ++++ 4 files changed, 36 insertions(+), 30 deletions(-) diff --git a/configure.ac b/configure.ac index 9c9965eed..bdd9660c8 100644 --- a/configure.ac +++ b/configure.ac @@ -326,7 +326,7 @@ AC_ARG_ENABLE([ipv6], if test "$ENABLED_IPV6" = "yes" then - AM_CFLAGS="$AM_CFLAGS -DTEST_IPV6" + AM_CFLAGS="$AM_CFLAGS -DTEST_IPV6 -DWOLFSSL_IPV6" fi AM_CONDITIONAL([BUILD_IPV6], [test "x$ENABLED_IPV6" = "xyes"]) @@ -3340,7 +3340,7 @@ echo "#endif /* WOLFSSL_OPTIONS_H */" >> $OPTION_FILE echo "" >> $OPTION_FILE echo -#backwards compatability for those who have included options or version +#backwards compatibility for those who have included options or version touch cyassl/options.h echo "/* cyassl options.h" > cyassl/options.h echo " * generated from wolfssl/options.h" >> cyassl/options.h diff --git a/src/io.c b/src/io.c index 1f2d32853..38bc69e30 100644 --- a/src/io.c +++ b/src/io.c @@ -50,6 +50,7 @@ Possible IO enable options: * USE_WOLFSSL_IO: Enables the wolfSSL IO functions default: off * HAVE_HTTP_CLIENT: Enables HTTP client API's default: off (unless HAVE_OCSP or HAVE_CRL_IO defined) + * HAVE_IO_TIMEOUT: Enables support for connect timeout default: off */ @@ -421,12 +422,14 @@ int EmbedGenerateCookie(WOLFSSL* ssl, byte *buf, int sz, void *ctx) break; case WOLFSSL_IP6: + #ifdef WOLFSSL_IPV6 if (XINET_NTOP(*fam, &(((SOCKADDR_IN6*)&peer)->sin6_addr), ip, *ipSz) == NULL) { WOLFSSL_MSG("XINET_NTOP error"); return SOCKET_ERROR_E; } *port = XNTOHS(((SOCKADDR_IN6*)&peer)->sin6_port); + #endif /* WOLFSSL_IPV6 */ break; default: @@ -473,6 +476,7 @@ int EmbedGenerateCookie(WOLFSSL* ssl, byte *buf, int sz, void *ctx) break; case WOLFSSL_IP6: + #ifdef WOLFSSL_IPV6 if (XINET_PTON(addr.ss_family, ip, &(((SOCKADDR_IN6*)&addr)->sin6_addr)) <= 0) { WOLFSSL_MSG("XINET_PTON error"); @@ -486,6 +490,7 @@ int EmbedGenerateCookie(WOLFSSL* ssl, byte *buf, int sz, void *ctx) WOLFSSL_MSG("Import DTLS peer info error"); return ret; } + #endif /* WOLFSSL_IPV6 */ break; default: @@ -498,10 +503,32 @@ int EmbedGenerateCookie(WOLFSSL* ssl, byte *buf, int sz, void *ctx) #endif /* WOLFSSL_SESSION_EXPORT */ #endif /* WOLFSSL_DTLS */ + +int wolfIO_Recv(SOCKET_T sd, char *buf, int sz, int rdFlags) +{ + int recvd; + + recvd = (int)RECV_FUNCTION(sd, buf, sz, rdFlags); + recvd = TranslateReturnCode(recvd, sd); + + return recvd; +} + +int wolfIO_Send(SOCKET_T sd, char *buf, int sz, int wrFlags) +{ + int sent; + int len = sz; + + sent = (int)SEND_FUNCTION(sd, &buf[sz - len], len, wrFlags); + sent = TranslateReturnCode(sent, sd); + + return sent; +} + #endif /* USE_WOLFSSL_IO */ -#if defined(USE_WOLFSSL_IO) +#ifdef HAVE_HTTP_CLIENT #ifndef HAVE_IO_TIMEOUT #define io_timeout_sec 0 @@ -704,32 +731,6 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) #endif /* HAVE_SOCKADDR */ } -int wolfIO_Recv(SOCKET_T sd, char *buf, int sz, int rdFlags) -{ - int recvd; - - recvd = (int)RECV_FUNCTION(sd, buf, sz, rdFlags); - recvd = TranslateReturnCode(recvd, sd); - - return recvd; -} - -int wolfIO_Send(SOCKET_T sd, char *buf, int sz, int wrFlags) -{ - int sent; - int len = sz; - - sent = (int)SEND_FUNCTION(sd, &buf[sz - len], len, wrFlags); - sent = TranslateReturnCode(sent, sd); - - return sent; -} - -#endif /* USE_WOLFSSL_IO */ - - -#if defined(HAVE_HTTP_CLIENT) - #ifndef HTTP_SCRATCH_BUFFER_SIZE #define HTTP_SCRATCH_BUFFER_SIZE 512 #endif diff --git a/wolfssl/io.h b/wolfssl/io.h index 5d715e5ed..c036a8327 100644 --- a/wolfssl/io.h +++ b/wolfssl/io.h @@ -249,7 +249,7 @@ typedef struct sockaddr SOCKADDR; typedef struct sockaddr_storage SOCKADDR_S; typedef struct sockaddr_in SOCKADDR_IN; - #ifdef TEST_IPV6 + #ifdef WOLFSSL_IPV6 typedef struct sockaddr_in6 SOCKADDR_IN6; #endif typedef struct hostent HOSTENT; diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index b1387b3de..4cf535103 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -1497,6 +1497,11 @@ static char *fgets(char *buff, int sz, FILE *fp) #error old TLS requires MD5 and SHA #endif +/* for backwards compatibility */ +#if defined(TEST_IPV6) && !defined(WOLFSSL_IPV6) + #define WOLFSSL_IPV6 +#endif + /* Place any other flags or defines here */