diff --git a/src/io.c b/src/io.c index e296a2ed9..42b2fb090 100644 --- a/src/io.c +++ b/src/io.c @@ -77,6 +77,8 @@ static int errno; #elif defined(WOLFSSL_TIRTOS) #include + #elif defined(FREERTOS_TCP) + #include "FreeRTOS_Sockets.h" #elif defined(WOLFSSL_IAR_ARM) /* nothing */ #else @@ -178,6 +180,14 @@ #define SOCKET_EPIPE PICO_ERR_EIO #define SOCKET_ECONNREFUSED PICO_ERR_ECONNREFUSED #define SOCKET_ECONNABORTED PICO_ERR_ESHUTDOWN +#elif defined(FREERTOS_TCP) + #define SOCKET_EWOULDBLOCK FREERTOS_EWOULDBLOCK + #define SOCKET_EAGAIN FREERTOS_EWOULDBLOCK + #define SOCKET_ECONNRESET FREERTOS_SOCKET_ERROR + #define SOCKET_EINTR FREERTOS_SOCKET_ERROR + #define SOCKET_EPIPE FREERTOS_SOCKET_ERROR + #define SOCKET_ECONNREFUSED FREERTOS_SOCKET_ERROR + #define SOCKET_ECONNABORTED FREERTOS_SOCKET_ERROR #else #define SOCKET_EWOULDBLOCK EWOULDBLOCK #define SOCKET_EAGAIN EAGAIN @@ -201,6 +211,9 @@ #elif defined(WOLFSSL_PICOTCP) #define SEND_FUNCTION pico_send #define RECV_FUNCTION pico_recv +#elif defined(FREERTOS_TCP) + #define RECV_FUNCTION(a,b,c,d) FreeRTOS_recv((Socket_t)(a),(void*)(b), (size_t)(c), (BaseType_t)(d)) + #define SEND_FUNCTION(a,b,c,d) FreeRTOS_send((Socket_t)(a),(void*)(b), (size_t)(c), (BaseType_t)(d)) #else #define SEND_FUNCTION send #define RECV_FUNCTION recv diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index 53aa093c7..7ba6069b6 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -102,7 +102,7 @@ int wc_RNG_GenerateByte(WC_RNG* rng, byte* b) #include #else #if !defined(NO_DEV_RANDOM) && !defined(CUSTOM_RAND_GENERATE) && \ - !defined(WOLFSSL_MDK_ARM) && !defined(WOLFSSL_IAR_ARM) + !defined(WOLFSSL_GENSEED_FORTEST) && !defined(WOLFSSL_MDK_ARM) && !defined(WOLFSSL_IAR_ARM) #include #ifndef EBSNET #include @@ -1185,7 +1185,11 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) || defined(WOLFSSL_uITRON4) || defined(WOLFSSL_uTKERNEL2)\ || defined(WOLFSSL_GENSEED_FORTEST) +#ifndef _MSC_VER #warning "write a real random seed!!!!, just for testing now" +#else +#pragma message("Warning: write a real random seed!!!!, just for testing now") +#endif int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) { diff --git a/wolfcrypt/src/wc_port.c b/wolfcrypt/src/wc_port.c index dbbea9d06..72a014065 100644 --- a/wolfcrypt/src/wc_port.c +++ b/wolfcrypt/src/wc_port.c @@ -66,7 +66,7 @@ int UnLockMutex(wolfSSL_Mutex *m) #else /* MULTI_THREAD */ - #if defined(FREERTOS) + #if defined(FREERTOS) || defined(FREERTOS_TCP) int InitMutex(wolfSSL_Mutex* m) { diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 74c8ddd9a..99831e599 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -115,7 +115,7 @@ #endif #elif defined(MICRIUM) /* do nothing, just don't pick Unix */ -#elif defined(FREERTOS) || defined(WOLFSSL_SAFERTOS) +#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS) /* do nothing */ #elif defined(EBSNET) /* do nothing */ diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 1421b73fc..726bb117c 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -57,6 +57,9 @@ /* Uncomment next line if using FreeRTOS */ /* #define FREERTOS */ +/* Uncomment next line if using FreeRTOS+ TCP */ +/* #define FREERTOS_TCP */ + /* Uncomment next line if using FreeRTOS Windows Simulator */ /* #define FREERTOS_WINSIM */ @@ -305,7 +308,7 @@ /* Micrium will use Visual Studio for compilation but not the Win32 API */ -#if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) \ +#if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && !defined(FREERTOS_TCP)\ && !defined(EBSNET) && !defined(WOLFSSL_EROAD) #define USE_WINDOWS_API #endif @@ -406,6 +409,24 @@ static char *fgets(char *buff, int sz, FILE *fp) #endif #endif +#ifdef FREERTOS_TCP + +#if !defined(NO_WOLFSSL_MEMORY) && !defined(XMALLOC_USER) +#define XMALLOC(s, h, type) pvPortMalloc((s)) +#define XFREE(p, h, type) vPortFree((p)) +#endif + +#define WOLFSSL_GENSEED_FORTEST + +#define NO_WOLFSSL_DIR +#define NO_WRITEV +#define WOLFSSL_HAVE_MIN +#define USE_FAST_MATH +#define TFM_TIMING_REGISTANT +#define NO_MAIN_DRIVER + +#endif + #ifdef WOLFSSL_TIRTOS #define SIZEOF_LONG_LONG 8 #define NO_WRITEV diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index dfe15d488..6c02013d9 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -155,7 +155,7 @@ /* Micrium will use Visual Studio for compilation but not the Win32 API */ - #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) \ + #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && !defined(FREERTOS_TCP) \ && !defined(EBSNET) #define USE_WINDOWS_API #endif @@ -180,7 +180,7 @@ #elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \ && !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \ && !defined(FREESCALE_KSDK_MQX) && !defined(FREESCALE_FREE_RTOS) \ - && !defined(WOLFSSL_LEANPSK) && !defined(FREERTOS) \ + && !defined(WOLFSSL_LEANPSK) && !defined(FREERTOS) && !defined(FREERTOS_TCP)\ && !defined(WOLFSSL_uITRON4) && !defined(WOLFSSL_uTKERNEL2) /* default C runtime, can install different routines at runtime via cbs */ #include diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index 2056b7cde..4989d19f1 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -49,7 +49,7 @@ #endif #elif defined(MICRIUM) /* do nothing, just don't pick Unix */ -#elif defined(FREERTOS) || defined(WOLFSSL_SAFERTOS) +#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS) /* do nothing */ #elif defined(EBSNET) /* do nothing */ @@ -87,8 +87,12 @@ typedef int wolfSSL_Mutex; #else /* MULTI_THREADED */ /* FREERTOS comes first to enable use of FreeRTOS Windows simulator only */ - #ifdef FREERTOS + #if defined(FREERTOS) typedef xSemaphoreHandle wolfSSL_Mutex; + #elif defined(FREERTOS_TCP) + #include "FreeRTOS.h" + #include "semphr.h" + typedef SemaphoreHandle_t wolfSSL_Mutex; #elif defined(WOLFSSL_SAFERTOS) typedef struct wolfSSL_Mutex { signed char mutexBuffer[portQUEUE_OVERHEAD_BYTES];