From: gaurav-aws Date: Tue, 23 Jul 2019 06:55:54 +0000 (+0000) Subject: Remove dependency on secure sockets X-Git-Tag: V10.3.0~122 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=a0ebcd7c756446feeed858d7b42ba75a15c688dd;p=freertos Remove dependency on secure sockets Network interface implementation for FreeRTOS now directly calls into FreeRTOS+TCP instead of going via secure sockets. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2699 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/DemoTasks/SimpleMQTTExamples.c b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/DemoTasks/SimpleMQTTExamples.c index 99d183c0a..bae6e0824 100644 --- a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/DemoTasks/SimpleMQTTExamples.c +++ b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/DemoTasks/SimpleMQTTExamples.c @@ -348,7 +348,7 @@ IotMqttConnectInfo_t xConnectInfo = IOT_MQTT_CONNECT_INFO_INITIALIZER; xNetworkInfo.u.setup.pNetworkCredentialInfo = NULL; /* Use FreeRTOS+TCP network. */ - xNetworkInfo.pNetworkInterface = IOT_NETWORK_INTERFACE_AFR; + xNetworkInfo.pNetworkInterface = IOT_NETWORK_INTERFACE_FREERTOS; /* Setup the callback which is called when the MQTT connection is disconnected. */ xNetworkInfo.disconnectCallback.pCallbackContext = ( void * ) xTaskGetCurrentTaskHandle(); diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj index ce524b3d2..329a1129b 100644 --- a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj +++ b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj @@ -148,7 +148,6 @@ - @@ -193,12 +192,8 @@ - - - - diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj.filters b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj.filters index 10628c44e..23bf06ef2 100644 --- a/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj.filters +++ b/FreeRTOS-Plus/Demo/FreeRTOS_IoT_Libraries/mqtt/WIN32.vcxproj.filters @@ -93,15 +93,6 @@ {1943ad1a-a367-4ef5-ab65-1313801e6327} - - {9a82e058-c6c5-4da5-817e-a28c5137749b} - - - {cf6813fa-76cf-4e4d-86f7-18f1ae92ad44} - - - {79ebfd9f-45cb-4a3b-8c73-73f9d9fe7984} - @@ -193,9 +184,6 @@ FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\freertos - - FreeRTOS+\FreeRTOS IoT Libraries\abstractions\secure_sockets\freertos_plus_tcp - DemoTasks @@ -331,17 +319,5 @@ FreeRTOS+\FreeRTOS IoT Libraries\abstractions\platform\include\platform - - FreeRTOS+\FreeRTOS IoT Libraries\abstractions\secure_sockets\include - - - FreeRTOS+\FreeRTOS IoT Libraries\abstractions\secure_sockets\include - - - FreeRTOS+\FreeRTOS IoT Libraries\abstractions\secure_sockets\include - - - FreeRTOS+\FreeRTOS IoT Libraries\standard\common\include\private - \ No newline at end of file diff --git a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/platform/freertos/include/platform/iot_network_freertos.h b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/platform/freertos/include/platform/iot_network_freertos.h index e4449ae24..fef3367aa 100644 --- a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/platform/freertos/include/platform/iot_network_freertos.h +++ b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/platform/freertos/include/platform/iot_network_freertos.h @@ -25,12 +25,12 @@ /** * @file iot_network_freertos.h - * @brief Declares the network stack functions specified in aws_iot_network.h for - * Amazon FreeRTOS Secure Sockets. + * @brief Declares the network stack functions specified in iot_network.h for + * FreeRTOS+TCP. */ -#ifndef _IOT_NETWORK_AFR_H_ -#define _IOT_NETWORK_AFR_H_ +#ifndef _IOT_NETWORK_FREERTOS_H_ +#define _IOT_NETWORK_FREERTOS_H_ /* Standard includes. */ #include @@ -38,29 +38,26 @@ /* Platform network include. */ #include "platform/iot_network.h" -/* Amazon FreeRTOS Secure Sockets include. */ -#include "iot_secure_sockets.h" - /** - * @brief Represents a network connection that uses Amazon FreeRTOS Secure Sockets. + * @brief Represents a network connection that uses FreeRTOS+TCP sockets. * * This is an incomplete type. In application code, only pointers to this type * should be used. */ -typedef struct _networkConnection IotNetworkConnectionAfr_t; +typedef struct _networkConnection IotNetworkConnectionFreeRTOS_t; /** - * @brief Provides a default value for an #IotNetworkConnectionAfr_t. + * @brief Provides a default value for an #IotNetworkConnectionFreeRTOS_t. * - * All instances of #IotNetworkConnectionAfr_t should be initialized with + * All instances of #IotNetworkConnectionFreeRTOS_t should be initialized with * this constant. * - * @warning Failing to initialize an #IotNetworkConnectionAfr_t with this + * @warning Failing to initialize an #IotNetworkConnectionFreeRTOS_t with this * initializer may result in undefined behavior! * @note This initializer may change at any time in future versions, but its * name will remain the same. */ -#define IOT_NETWORK_CONNECTION_AFR_INITIALIZER { 0 } +#define IOT_NETWORK_CONNECTION_FREERTOS_INITIALIZER { 0 } /** * @brief Generic initializer for an #IotNetworkServerInfo_t. @@ -68,7 +65,7 @@ typedef struct _networkConnection IotNetworkConnectionAfr_t; * @note This initializer may change at any time in future versions, but its * name will remain the same. */ -#define IOT_NETWORK_SERVER_INFO_AFR_INITIALIZER { 0 } +#define IOT_NETWORK_SERVER_INFO_FREERTOS_INITIALIZER { 0 } /** * @brief Generic initializer for an #IotNetworkCredentials_t. @@ -76,57 +73,57 @@ typedef struct _networkConnection IotNetworkConnectionAfr_t; * @note This initializer may change at any time in future versions, but its * name will remain the same. */ -#define IOT_NETWORK_CREDENTIALS_AFR_INITIALIZER { 0 } +#define IOT_NETWORK_CREDENTIALS_FREERTOS_INITIALIZER { 0 } /** * @brief Provides a pointer to an #IotNetworkInterface_t that uses the functions * declared in this file. */ -#define IOT_NETWORK_INTERFACE_AFR ( &( IotNetworkAfr ) ) +#define IOT_NETWORK_INTERFACE_FREERTOS ( &( IotNetworkFreeRTOS ) ) /** - * @brief An implementation of #IotNetworkInterface_t::create for Amazon FreeRTOS - * Secure Sockets. + * @brief An implementation of #IotNetworkInterface_t::create for FreeRTOS+TCP + * sockets. */ -IotNetworkError_t IotNetworkAfr_Create( void * pConnectionInfo, - void * pCredentialInfo, - void ** const pConnection ); +IotNetworkError_t IotNetworkFreeRTOS_Create( void * pConnectionInfo, + void * pCredentialInfo, + void ** const pConnection ); /** * @brief An implementation of #IotNetworkInterface_t::setReceiveCallback for - * Amazon FreeRTOS Secure Sockets. + * FreeRTOS+TCP sockets. */ -IotNetworkError_t IotNetworkAfr_SetReceiveCallback( void * pConnection, - IotNetworkReceiveCallback_t receiveCallback, - void * pContext ); +IotNetworkError_t IotNetworkFreeRTOS_SetReceiveCallback( void * pConnection, + IotNetworkReceiveCallback_t receiveCallback, + void * pContext ); /** - * @brief An implementation of #IotNetworkInterface_t::send for Amazon FreeRTOS - * Secure Sockets. + * @brief An implementation of #IotNetworkInterface_t::send for FreeRTOS+TCP + * sockets. */ -size_t IotNetworkAfr_Send( void * pConnection, - const uint8_t * pMessage, - size_t messageLength ); +size_t IotNetworkFreeRTOS_Send( void * pConnection, + const uint8_t * pMessage, + size_t messageLength ); /** - * @brief An implementation of #IotNetworkInterface_t::receive for Amazon FreeRTOS - * Secure Sockets. + * @brief An implementation of #IotNetworkInterface_t::receive for FreeRTOS+TCP + * sockets. */ -size_t IotNetworkAfr_Receive( void * pConnection, - uint8_t * pBuffer, - size_t bytesRequested ); +size_t IotNetworkFreeRTOS_Receive( void * pConnection, + uint8_t * pBuffer, + size_t bytesRequested ); /** - * @brief An implementation of #IotNetworkInterface_t::close for Amazon FreeRTOS - * Secure Sockets. + * @brief An implementation of #IotNetworkInterface_t::close for FreeRTOS+TCP + * sockets. */ -IotNetworkError_t IotNetworkAfr_Close( void * pConnection ); +IotNetworkError_t IotNetworkFreeRTOS_Close( void * pConnection ); /** - * @brief An implementation of #IotNetworkInterface_t::destroy for Amazon FreeRTOS - * Secure Sockets. + * @brief An implementation of #IotNetworkInterface_t::destroy for FreeRTOS+TCP + * sockets. */ -IotNetworkError_t IotNetworkAfr_Destroy( void * pConnection ); +IotNetworkError_t IotNetworkFreeRTOS_Destroy( void * pConnection ); /** * @cond DOXYGEN_IGNORE @@ -134,7 +131,7 @@ IotNetworkError_t IotNetworkAfr_Destroy( void * pConnection ); * * Declaration of a network interface struct using the functions in this file. */ -extern const IotNetworkInterface_t IotNetworkAfr; +extern const IotNetworkInterface_t IotNetworkFreeRTOS; /** @endcond */ -#endif /* ifndef _IOT_NETWORK_AFR_H_ */ +#endif /* ifndef _IOT_NETWORK_FREERTOS_H_ */ diff --git a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/platform/freertos/iot_network_freertos.c b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/platform/freertos/iot_network_freertos.c index 287a3128b..50d4c4a98 100644 --- a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/platform/freertos/iot_network_freertos.c +++ b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/platform/freertos/iot_network_freertos.c @@ -26,7 +26,7 @@ /** * @file iot_network_freertos.c * @brief Implementation of the network-related functions from iot_network_freertos.h - * for Amazon FreeRTOS secure sockets. + * for FreeRTOS+TCP sockets. */ /* The config header is always included first. */ @@ -36,13 +36,16 @@ #include /* FreeRTOS includes. */ +#include "FreeRTOS.h" #include "semphr.h" #include "event_groups.h" -/* Error handling include. */ -#include "private/iot_error.h" +/* FreeRTOS+TCP includes. */ +#include "FreeRTOS_IP.h" +#include "FreeRTOS_Sockets.h" -/* Amazon FreeRTOS network include. */ +/* FreeRTOS-IoT-Libraries includes. */ +#include "private/iot_error.h" #include "platform/iot_network_freertos.h" /* Configure logs for the functions in this file. */ @@ -62,54 +65,61 @@ /* Provide a default value for the number of milliseconds for a socket poll. * This is a temporary workaround to deal with the lack of poll(). */ #ifndef IOT_NETWORK_SOCKET_POLL_MS - #define IOT_NETWORK_SOCKET_POLL_MS ( 1000 ) + #define IOT_NETWORK_SOCKET_POLL_MS ( 1000 ) #endif /** * @brief The event group bit to set when a connection's socket is shut down. */ -#define _FLAG_SHUTDOWN ( 1 ) +#define _SHUTDOWN_BITMASK ( 1UL << 0UL ) /** * @brief The event group bit to set when a connection's receive task exits. */ -#define _FLAG_RECEIVE_TASK_EXITED ( 2 ) +#define _RECEIVE_TASK_EXITED_BITMASK ( 1UL << 1UL ) /** * @brief The event group bit to set when the connection is destroyed from the * receive task. */ -#define _FLAG_CONNECTION_DESTROYED ( 4 ) +#define _CONNECTION_DESTROYED_BITMASK ( 1UL << 2UL ) +/** + * @brief Maximum length of a DNS name. + * + * Per https://tools.ietf.org/html/rfc1035, 253 is the maximum string length + * of a DNS name. + */ +#define _MAX_DNS_NAME_LENGTH ( 253 ) /*-----------------------------------------------------------*/ typedef struct _networkConnection { - Socket_t socket; /**< @brief Amazon FreeRTOS Secure Sockets handle. */ - StaticSemaphore_t socketMutex; /**< @brief Prevents concurrent threads from sending on a socket. */ - StaticEventGroup_t connectionFlags; /**< @brief Synchronizes with the receive task. */ - TaskHandle_t receiveTask; /**< @brief Handle of the receive task, if any. */ - IotNetworkReceiveCallback_t receiveCallback; /**< @brief Network receive callback, if any. */ - void * pReceiveContext; /**< @brief The context for the receive callback. */ - bool bufferedByteValid; /**< @brief Used to determine if the buffered byte is valid. */ - uint8_t bufferedByte; /**< @brief A single byte buffered from a receive, since AFR Secure Sockets does not have poll(). */ + Socket_t socket; /**< @brief FreeRTOS+TCP sockets handle. */ + SemaphoreHandle_t socketMutex; /**< @brief Prevents concurrent threads from sending on a socket. */ + StaticSemaphore_t socketMutexStorage; /**< @brief Storage space for socketMutex. */ + EventGroupHandle_t connectionEventGroup; /**< @brief Synchronizes with the receive task. */ + StaticEventGroup_t connectionEventGroupStorage; /**< @brief Storage space for connectionEventGroup. */ + TaskHandle_t receiveTask; /**< @brief Handle of the receive task, if any. */ + IotNetworkReceiveCallback_t receiveCallback; /**< @brief Network receive callback, if any. */ + void * pReceiveContext; /**< @brief The context for the receive callback. */ + bool bufferedByteValid; /**< @brief Used to determine if the buffered byte is valid. */ + uint8_t bufferedByte; /**< @brief A single byte buffered from a receive, since FreeRTOS+TCP sockets does not have poll(). */ } _networkConnection_t; - /*-----------------------------------------------------------*/ /** * @brief An #IotNetworkInterface_t that uses the functions in this file. */ -const IotNetworkInterface_t IotNetworkAfr = +const IotNetworkInterface_t IotNetworkFreeRTOS = { - .create = IotNetworkAfr_Create, - .setReceiveCallback = IotNetworkAfr_SetReceiveCallback, - .send = IotNetworkAfr_Send, - .receive = IotNetworkAfr_Receive, - .close = IotNetworkAfr_Close, - .destroy = IotNetworkAfr_Destroy + .create = IotNetworkFreeRTOS_Create, + .setReceiveCallback = IotNetworkFreeRTOS_SetReceiveCallback, + .send = IotNetworkFreeRTOS_Send, + .receive = IotNetworkFreeRTOS_Receive, + .close = IotNetworkFreeRTOS_Close, + .destroy = IotNetworkFreeRTOS_Destroy }; - /*-----------------------------------------------------------*/ /** @@ -119,18 +129,12 @@ const IotNetworkInterface_t IotNetworkAfr = */ static void _destroyConnection( _networkConnection_t * pNetworkConnection ) { - /* Call Secure Sockets close function to free resources. */ - int32_t socketStatus = SOCKETS_Close( pNetworkConnection->socket ); - - if( socketStatus != SOCKETS_ERROR_NONE ) - { - IotLogWarn( "Failed to destroy connection." ); - } + /* Call FreeRTOS+TCP close function to free resources. */ + ( void ) FreeRTOS_closesocket( pNetworkConnection->socket ); /* Free the network connection. */ vPortFree( pNetworkConnection ); } - /*-----------------------------------------------------------*/ /** @@ -142,7 +146,7 @@ static void _networkReceiveTask( void * pArgument ) { bool destroyConnection = false; int32_t socketStatus = 0; - EventBits_t connectionFlags = 0; + EventBits_t connectionEventGroupBits = 0; /* Cast network connection to the correct type. */ _networkConnection_t * pNetworkConnection = pArgument; @@ -157,20 +161,20 @@ static void _networkReceiveTask( void * pArgument ) * MULTIPLE CALLS OF RECEIVE. */ do { - socketStatus = SOCKETS_Recv( pNetworkConnection->socket, - &( pNetworkConnection->bufferedByte ), - 1, - 0 ); + socketStatus = FreeRTOS_recv( pNetworkConnection->socket, + &( pNetworkConnection->bufferedByte ), + 1, + 0 ); - connectionFlags = xEventGroupGetBits( ( EventGroupHandle_t ) &( pNetworkConnection->connectionFlags ) ); + connectionEventGroupBits = xEventGroupGetBits( pNetworkConnection->connectionEventGroup ); - if( ( connectionFlags & _FLAG_SHUTDOWN ) == _FLAG_SHUTDOWN ) + if( ( connectionEventGroupBits & _SHUTDOWN_BITMASK ) == _SHUTDOWN_BITMASK ) { - socketStatus = SOCKETS_ECLOSED; + socketStatus = FREERTOS_ECLOSED; } /* Check for timeout. Some ports return 0, some return EWOULDBLOCK. */ - } while( ( socketStatus == 0 ) || ( socketStatus == SOCKETS_EWOULDBLOCK ) ); + } while( ( socketStatus == 0 ) || ( socketStatus == FREERTOS_EWOULDBLOCK ) ); if( socketStatus <= 0 ) { @@ -186,9 +190,9 @@ static void _networkReceiveTask( void * pArgument ) /* Check if the connection was destroyed by the receive callback. This * does not need to be thread-safe because the destroy connection function * may only be called once (per its API doc). */ - connectionFlags = xEventGroupGetBits( ( EventGroupHandle_t ) &( pNetworkConnection->connectionFlags ) ); + connectionEventGroupBits = xEventGroupGetBits( pNetworkConnection->connectionEventGroup ); - if( ( connectionFlags & _FLAG_CONNECTION_DESTROYED ) == _FLAG_CONNECTION_DESTROYED ) + if( ( connectionEventGroupBits & _CONNECTION_DESTROYED_BITMASK ) == _CONNECTION_DESTROYED_BITMASK ) { destroyConnection = true; break; @@ -204,129 +208,40 @@ static void _networkReceiveTask( void * pArgument ) } else { - /* Set the flag to indicate that the receive task has exited. */ - ( void ) xEventGroupSetBits( ( EventGroupHandle_t ) &( pNetworkConnection->connectionFlags ), - _FLAG_RECEIVE_TASK_EXITED ); + /* Set the bit to indicate that the receive task has exited. */ + ( void ) xEventGroupSetBits( pNetworkConnection->connectionEventGroup, + _RECEIVE_TASK_EXITED_BITMASK ); } vTaskDelete( NULL ); } - -/*-----------------------------------------------------------*/ - -/** - * @brief Set up a secured TLS connection. - * - * @param[in] pAfrCredentials Credentials for the secured connection. - * @param[in] tcpSocket An initialized socket to secure. - * @param[in] pHostName Remote server name for SNI. - * @param[in] hostnameLength The length of `pHostName`. - * - * @return #IOT_NETWORK_SUCCESS or #IOT_NETWORK_SYSTEM_ERROR. - */ -static IotNetworkError_t _tlsSetup( const IotNetworkCredentials_t * pAfrCredentials, - Socket_t tcpSocket, - const char * pHostName, - size_t hostnameLength ) -{ - IOT_FUNCTION_ENTRY( IotNetworkError_t, IOT_NETWORK_SUCCESS ); - int32_t socketStatus = SOCKETS_ERROR_NONE; - - /* ALPN options for AWS IoT. */ - const char * ppcALPNProtos[] = { socketsAWS_IOT_ALPN_MQTT }; - - /* Set secured option. */ - socketStatus = SOCKETS_SetSockOpt( tcpSocket, - 0, - SOCKETS_SO_REQUIRE_TLS, - NULL, - 0 ); - - if( socketStatus != SOCKETS_ERROR_NONE ) - { - IotLogError( "Failed to set secured option for new connection." ); - IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_SYSTEM_ERROR ); - } - - /* Set ALPN option. */ - if( pAfrCredentials->pAlpnProtos != NULL ) - { - socketStatus = SOCKETS_SetSockOpt( tcpSocket, - 0, - SOCKETS_SO_ALPN_PROTOCOLS, - ppcALPNProtos, - sizeof( ppcALPNProtos ) / sizeof( ppcALPNProtos[ 0 ] ) ); - - if( socketStatus != SOCKETS_ERROR_NONE ) - { - IotLogError( "Failed to set ALPN option for new connection." ); - IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_SYSTEM_ERROR ); - } - } - - /* Set SNI option. */ - if( pAfrCredentials->disableSni == false ) - { - socketStatus = SOCKETS_SetSockOpt( tcpSocket, - 0, - SOCKETS_SO_SERVER_NAME_INDICATION, - pHostName, - hostnameLength + 1 ); - - if( socketStatus != SOCKETS_ERROR_NONE ) - { - IotLogError( "Failed to set SNI option for new connection." ); - IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_SYSTEM_ERROR ); - } - } - - /* Set custom server certificate. */ - if( pAfrCredentials->pRootCa != NULL ) - { - socketStatus = SOCKETS_SetSockOpt( tcpSocket, - 0, - SOCKETS_SO_TRUSTED_SERVER_CERTIFICATE, - pAfrCredentials->pRootCa, - pAfrCredentials->rootCaSize ); - - if( socketStatus != SOCKETS_ERROR_NONE ) - { - IotLogError( "Failed to set server certificate option for new connection." ); - IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_SYSTEM_ERROR ); - } - } - - IOT_FUNCTION_EXIT_NO_CLEANUP(); -} - /*-----------------------------------------------------------*/ -IotNetworkError_t IotNetworkAfr_Create( void * pConnectionInfo, - void * pCredentialInfo, - void ** pConnection ) +IotNetworkError_t IotNetworkFreeRTOS_Create( void * pConnectionInfo, + void * pCredentialInfo, + void ** pConnection ) { IOT_FUNCTION_ENTRY( IotNetworkError_t, IOT_NETWORK_SUCCESS ); - Socket_t tcpSocket = SOCKETS_INVALID_SOCKET; - int32_t socketStatus = SOCKETS_ERROR_NONE; - SocketsSockaddr_t serverAddress = { 0 }; - EventGroupHandle_t pConnectionFlags = NULL; - SemaphoreHandle_t pConnectionMutex = NULL; + Socket_t tcpSocket = FREERTOS_INVALID_SOCKET; + int32_t socketStatus = 0; + struct freertos_sockaddr serverAddress = { 0 }; const TickType_t receiveTimeout = pdMS_TO_TICKS( IOT_NETWORK_SOCKET_POLL_MS ); _networkConnection_t * pNewNetworkConnection = NULL; + /* TLS is not supported yet and therefore pCredentialInfo must be NULL. */ + configASSERT( pCredentialInfo == NULL ); + /* Cast function parameters to correct types. */ const IotNetworkServerInfo_t * pServerInfo = pConnectionInfo; - const IotNetworkCredentials_t * pAfrCredentials = pCredentialInfo; _networkConnection_t ** pNetworkConnection = ( _networkConnection_t ** ) pConnection; - /* Check host name length against the maximum length allowed by Secure - * Sockets. */ + /* Check host name length against the maximum length allowed. */ const size_t hostnameLength = strlen( pServerInfo->pHostName ); - if( hostnameLength > ( size_t ) securesocketsMAX_DNS_NAME_LENGTH ) + if( hostnameLength > ( size_t ) _MAX_DNS_NAME_LENGTH ) { IotLogError( "Host name length exceeds %d, which is the maximum allowed.", - securesocketsMAX_DNS_NAME_LENGTH ); + _MAX_DNS_NAME_LENGTH ); IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_BAD_PARAMETER ); } @@ -342,57 +257,47 @@ IotNetworkError_t IotNetworkAfr_Create( void * pConnectionInfo, ( void ) memset( pNewNetworkConnection, 0x00, sizeof( _networkConnection_t ) ); /* Create a new TCP socket. */ - tcpSocket = SOCKETS_Socket( SOCKETS_AF_INET, - SOCKETS_SOCK_STREAM, - SOCKETS_IPPROTO_TCP ); + tcpSocket = FreeRTOS_socket( FREERTOS_AF_INET, + FREERTOS_SOCK_STREAM, + FREERTOS_IPPROTO_TCP ); - if( tcpSocket == SOCKETS_INVALID_SOCKET ) + if( tcpSocket == FREERTOS_INVALID_SOCKET ) { IotLogError( "Failed to create new socket." ); IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_SYSTEM_ERROR ); } - /* Set up connection encryption if credentials are provided. */ - if( pAfrCredentials != NULL ) - { - status = _tlsSetup( pAfrCredentials, tcpSocket, pServerInfo->pHostName, hostnameLength ); - - if( status != IOT_NETWORK_SUCCESS ) - { - IOT_GOTO_CLEANUP(); - } - } - /* Establish connection. */ - serverAddress.ucSocketDomain = SOCKETS_AF_INET; - serverAddress.usPort = SOCKETS_htons( pServerInfo->port ); - serverAddress.ulAddress = SOCKETS_GetHostByName( pServerInfo->pHostName ); + serverAddress.sin_family = FREERTOS_AF_INET; + serverAddress.sin_port = FreeRTOS_htons( pServerInfo->port ); + serverAddress.sin_addr = FreeRTOS_gethostbyname( pServerInfo->pHostName ); + serverAddress.sin_len = ( uint8_t ) sizeof( serverAddress ); /* Check for errors from DNS lookup. */ - if( serverAddress.ulAddress == 0 ) + if( serverAddress.sin_addr == 0 ) { IotLogError( "Failed to resolve %s.", pServerInfo->pHostName ); IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_SYSTEM_ERROR ); } - socketStatus = SOCKETS_Connect( tcpSocket, - &serverAddress, - sizeof( SocketsSockaddr_t ) ); + socketStatus = FreeRTOS_connect( tcpSocket, + &serverAddress, + sizeof( serverAddress ) ); - if( socketStatus != SOCKETS_ERROR_NONE ) + if( socketStatus != 0 ) { IotLogError( "Failed to establish new connection." ); IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_SYSTEM_ERROR ); } /* Set a long timeout for receive. */ - socketStatus = SOCKETS_SetSockOpt( tcpSocket, - 0, - SOCKETS_SO_RCVTIMEO, - &receiveTimeout, - sizeof( TickType_t ) ); + socketStatus = FreeRTOS_setsockopt( tcpSocket, + 0, + FREERTOS_SO_RCVTIMEO, + &receiveTimeout, + sizeof( TickType_t ) ); - if( socketStatus != SOCKETS_ERROR_NONE ) + if( socketStatus != 0 ) { IotLogError( "Failed to set socket receive timeout." ); IOT_SET_AND_GOTO_CLEANUP( IOT_NETWORK_SYSTEM_ERROR ); @@ -403,9 +308,9 @@ IotNetworkError_t IotNetworkAfr_Create( void * pConnectionInfo, /* Clean up on failure. */ if( status != IOT_NETWORK_SUCCESS ) { - if( tcpSocket != SOCKETS_INVALID_SOCKET ) + if( tcpSocket != FREERTOS_INVALID_SOCKET ) { - SOCKETS_Close( tcpSocket ); + FreeRTOS_closesocket( tcpSocket ); } /* Clear the connection information. */ @@ -419,14 +324,9 @@ IotNetworkError_t IotNetworkAfr_Create( void * pConnectionInfo, /* Set the socket. */ pNewNetworkConnection->socket = tcpSocket; - /* Create the connection event flags and mutex. */ - pConnectionFlags = xEventGroupCreateStatic( &( pNewNetworkConnection->connectionFlags ) ); - pConnectionMutex = xSemaphoreCreateMutexStatic( &( pNewNetworkConnection->socketMutex ) ); - - /* Static event flags and mutex creation should never fail. The handles - * should point inside the connection object. */ - configASSERT( pConnectionFlags == ( EventGroupHandle_t ) &( pNewNetworkConnection->connectionFlags ) ); - configASSERT( pConnectionMutex == ( SemaphoreHandle_t ) &( pNewNetworkConnection->socketMutex ) ); + /* Create the connection event group and socket mutex. */ + pNewNetworkConnection->connectionEventGroup = xEventGroupCreateStatic( &( pNewNetworkConnection->connectionEventGroupStorage ) ); + pNewNetworkConnection->socketMutex = xSemaphoreCreateMutexStatic( &( pNewNetworkConnection->socketMutexStorage ) ); /* Set the output parameter. */ *pNetworkConnection = pNewNetworkConnection; @@ -434,12 +334,11 @@ IotNetworkError_t IotNetworkAfr_Create( void * pConnectionInfo, IOT_FUNCTION_CLEANUP_END(); } - /*-----------------------------------------------------------*/ -IotNetworkError_t IotNetworkAfr_SetReceiveCallback( void * pConnection, - IotNetworkReceiveCallback_t receiveCallback, - void * pContext ) +IotNetworkError_t IotNetworkFreeRTOS_SetReceiveCallback( void * pConnection, + IotNetworkReceiveCallback_t receiveCallback, + void * pContext ) { IotNetworkError_t status = IOT_NETWORK_SUCCESS; @@ -450,8 +349,8 @@ IotNetworkError_t IotNetworkAfr_SetReceiveCallback( void * pConnection, pNetworkConnection->receiveCallback = receiveCallback; pNetworkConnection->pReceiveContext = pContext; - /* No flags should be set. */ - configASSERT( xEventGroupGetBits( ( EventGroupHandle_t ) &( pNetworkConnection->connectionFlags ) ) == 0 ); + /* No bit should be set in the connection event group. */ + configASSERT( xEventGroupGetBits( pNetworkConnection->connectionEventGroup ) == 0 ); /* Create task that waits for incoming data. */ if( xTaskCreate( _networkReceiveTask, @@ -468,45 +367,42 @@ IotNetworkError_t IotNetworkAfr_SetReceiveCallback( void * pConnection, return status; } - /*-----------------------------------------------------------*/ -size_t IotNetworkAfr_Send( void * pConnection, - const uint8_t * pMessage, - size_t messageLength ) +size_t IotNetworkFreeRTOS_Send( void * pConnection, + const uint8_t * pMessage, + size_t messageLength ) { size_t bytesSent = 0; - int32_t socketStatus = SOCKETS_ERROR_NONE; + int32_t socketStatus = 0; /* Cast network connection to the correct type. */ _networkConnection_t * pNetworkConnection = ( _networkConnection_t * ) pConnection; /* Only one thread at a time may send on the connection. Lock the socket * mutex to prevent other threads from sending. */ - if( xSemaphoreTake( ( QueueHandle_t ) &( pNetworkConnection->socketMutex ), - portMAX_DELAY ) == pdTRUE ) + if( xSemaphoreTake( pNetworkConnection->socketMutex, portMAX_DELAY ) == pdTRUE ) { - socketStatus = SOCKETS_Send( pNetworkConnection->socket, - pMessage, - messageLength, - 0 ); + socketStatus = FreeRTOS_send( pNetworkConnection->socket, + pMessage, + messageLength, + 0 ); if( socketStatus > 0 ) { bytesSent = ( size_t ) socketStatus; } - xSemaphoreGive( ( QueueHandle_t ) &( pNetworkConnection->socketMutex ) ); + xSemaphoreGive( pNetworkConnection->socketMutex ); } return bytesSent; } - /*-----------------------------------------------------------*/ -size_t IotNetworkAfr_Receive( void * pConnection, - uint8_t * pBuffer, - size_t bytesRequested ) +size_t IotNetworkFreeRTOS_Receive( void * pConnection, + uint8_t * pBuffer, + size_t bytesRequested ) { int32_t socketStatus = 0; size_t bytesReceived = 0, bytesRemaining = bytesRequested; @@ -527,12 +423,12 @@ size_t IotNetworkAfr_Receive( void * pConnection, /* Block and wait for incoming data. */ while( bytesRemaining > 0 ) { - socketStatus = SOCKETS_Recv( pNetworkConnection->socket, - pBuffer + bytesReceived, - bytesRemaining, - 0 ); + socketStatus = FreeRTOS_recv( pNetworkConnection->socket, + pBuffer + bytesReceived, + bytesRemaining, + 0 ); - if( socketStatus == SOCKETS_EWOULDBLOCK ) + if( socketStatus == FREERTOS_EWOULDBLOCK ) { /* The return value EWOULDBLOCK means no data was received within * the socket timeout. Ignore it and try again. */ @@ -566,35 +462,33 @@ size_t IotNetworkAfr_Receive( void * pConnection, return bytesReceived; } - /*-----------------------------------------------------------*/ -IotNetworkError_t IotNetworkAfr_Close( void * pConnection ) +IotNetworkError_t IotNetworkFreeRTOS_Close( void * pConnection ) { - int32_t socketStatus = SOCKETS_ERROR_NONE; + int32_t socketStatus = 0; /* Cast network connection to the correct type. */ _networkConnection_t * pNetworkConnection = ( _networkConnection_t * ) pConnection; - /* Call Secure Sockets shutdown function to close connection. */ - socketStatus = SOCKETS_Shutdown( pNetworkConnection->socket, - SOCKETS_SHUT_RDWR ); + /* Call socket shutdown function to close connection. */ + socketStatus = FreeRTOS_shutdown( pNetworkConnection->socket, + FREERTOS_SHUT_RDWR ); - if( socketStatus != SOCKETS_ERROR_NONE ) + if( socketStatus != 0 ) { IotLogWarn( "Failed to close connection." ); } - /* Set the shutdown flag. */ - ( void ) xEventGroupSetBits( ( EventGroupHandle_t ) &( pNetworkConnection->connectionFlags ), - _FLAG_SHUTDOWN ); + /* Set the shutdown bit in the connection event group. */ + ( void ) xEventGroupSetBits( pNetworkConnection->connectionEventGroup, + _SHUTDOWN_BITMASK ); return IOT_NETWORK_SUCCESS; } - /*-----------------------------------------------------------*/ -IotNetworkError_t IotNetworkAfr_Destroy( void * pConnection ) +IotNetworkError_t IotNetworkFreeRTOS_Destroy( void * pConnection ) { /* Cast network connection to the correct type. */ _networkConnection_t * pNetworkConnection = ( _networkConnection_t * ) pConnection; @@ -602,17 +496,17 @@ IotNetworkError_t IotNetworkAfr_Destroy( void * pConnection ) /* Check if this function is being called from the receive task. */ if( xTaskGetCurrentTaskHandle() == pNetworkConnection->receiveTask ) { - /* Set the flag specifying that the connection is destroyed. */ - ( void ) xEventGroupSetBits( ( EventGroupHandle_t ) &( pNetworkConnection->connectionFlags ), - _FLAG_CONNECTION_DESTROYED ); + /* Set the bit specifying that the connection is destroyed. */ + ( void ) xEventGroupSetBits( pNetworkConnection->connectionEventGroup, + _CONNECTION_DESTROYED_BITMASK ); } else { /* If a receive task was created, wait for it to exit. */ if( pNetworkConnection->receiveTask != NULL ) { - ( void ) xEventGroupWaitBits( ( EventGroupHandle_t ) &( pNetworkConnection->connectionFlags ), - _FLAG_RECEIVE_TASK_EXITED, + ( void ) xEventGroupWaitBits( pNetworkConnection->connectionEventGroup, + _RECEIVE_TASK_EXITED_BITMASK, pdTRUE, pdTRUE, portMAX_DELAY ); @@ -623,5 +517,4 @@ IotNetworkError_t IotNetworkAfr_Destroy( void * pConnection ) return IOT_NETWORK_SUCCESS; } - /*-----------------------------------------------------------*/ diff --git a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/freertos_plus_tcp/iot_secure_sockets.c b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/freertos_plus_tcp/iot_secure_sockets.c deleted file mode 100644 index af809c24c..000000000 --- a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/freertos_plus_tcp/iot_secure_sockets.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Amazon FreeRTOS Secure Sockets V1.1.5 - * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/* Define _SECURE_SOCKETS_WRAPPER_NOT_REDEFINE to prevent secure sockets functions - * from redefining in iot_secure_sockets_wrapper_metrics.h */ -#define _SECURE_SOCKETS_WRAPPER_NOT_REDEFINE - -/* FreeRTOS includes. */ -#include "FreeRTOS.h" -#include "FreeRTOSIPConfig.h" -#include "list.h" -#include "semphr.h" -#include "FreeRTOS_IP.h" -#include "FreeRTOS_Sockets.h" -#include "iot_secure_sockets.h" -#include "task.h" - -#undef _SECURE_SOCKETS_WRAPPER_NOT_REDEFINE - -/* Internal context structure. */ -typedef struct SSOCKETContext -{ - Socket_t xSocket; - char * pcDestination; - BaseType_t xSendFlags; - BaseType_t xRecvFlags; - BaseType_t xConnectAttempted; -} SSOCKETContext_t, * SSOCKETContextPtr_t; - -/* - * Helper routines. - */ - -/* - * @brief Network send callback. - */ -static BaseType_t prvNetworkSend( void * pvContext, - const unsigned char * pucData, - size_t xDataLength ) -{ - SSOCKETContextPtr_t pxContext = ( SSOCKETContextPtr_t ) pvContext; /*lint !e9087 cast used for portability. */ - - return FreeRTOS_send( pxContext->xSocket, pucData, xDataLength, pxContext->xSendFlags ); -} -/*-----------------------------------------------------------*/ - -/* - * @brief Network receive callback. - */ -static BaseType_t prvNetworkRecv( void * pvContext, - unsigned char * pucReceiveBuffer, - size_t xReceiveLength ) -{ - SSOCKETContextPtr_t pxContext = ( SSOCKETContextPtr_t ) pvContext; /*lint !e9087 cast used for portability. */ - - return FreeRTOS_recv( pxContext->xSocket, pucReceiveBuffer, xReceiveLength, pxContext->xRecvFlags ); -} -/*-----------------------------------------------------------*/ - -/* - * Interface routines. - */ - -int32_t SOCKETS_Close( Socket_t xSocket ) -{ - SSOCKETContextPtr_t pxContext = ( SSOCKETContextPtr_t ) xSocket; /*lint !e9087 cast used for portability. */ - int32_t lReturn; - - if( ( xSocket != SOCKETS_INVALID_SOCKET ) && ( NULL != pxContext ) ) - { - /* Clean-up destination string. */ - if( NULL != pxContext->pcDestination ) - { - vPortFree( pxContext->pcDestination ); - } - - /* Close the underlying socket handle. */ - ( void ) FreeRTOS_closesocket( pxContext->xSocket ); - - /* Free the context. */ - vPortFree( pxContext ); - lReturn = SOCKETS_ERROR_NONE; - } - else - { - lReturn = SOCKETS_EINVAL; - } - - return lReturn; -} -/*-----------------------------------------------------------*/ - -int32_t SOCKETS_Connect( Socket_t xSocket, - SocketsSockaddr_t * pxAddress, - Socklen_t xAddressLength ) -{ - int32_t lStatus = SOCKETS_ERROR_NONE; - SSOCKETContextPtr_t pxContext = ( SSOCKETContextPtr_t ) xSocket; /*lint !e9087 cast used for portability. */ - struct freertos_sockaddr xTempAddress = { 0 }; - - if( ( pxContext != SOCKETS_INVALID_SOCKET ) && ( pxAddress != NULL ) ) - { - /* A connection was attempted. If this function fails, then the socket is invalid and the user - * must call SOCKETS_Close(), on this socket, and SOCKETS_Socket() to get a new socket. */ - pxContext->xConnectAttempted = pdTRUE; - - /* Connect the wrapped socket. */ - xTempAddress.sin_addr = pxAddress->ulAddress; - xTempAddress.sin_family = pxAddress->ucSocketDomain; - xTempAddress.sin_len = ( uint8_t ) sizeof( xTempAddress ); - xTempAddress.sin_port = pxAddress->usPort; - lStatus = FreeRTOS_connect( pxContext->xSocket, &xTempAddress, xAddressLength ); - } - else - { - lStatus = SOCKETS_SOCKET_ERROR; - } - - return lStatus; -} -/*-----------------------------------------------------------*/ - -uint32_t SOCKETS_GetHostByName( const char * pcHostName ) -{ - return FreeRTOS_gethostbyname( pcHostName ); -} -/*-----------------------------------------------------------*/ - -int32_t SOCKETS_Recv( Socket_t xSocket, - void * pvBuffer, - size_t xBufferLength, - uint32_t ulFlags ) -{ - int32_t lStatus = SOCKETS_SOCKET_ERROR; - SSOCKETContextPtr_t pxContext = ( SSOCKETContextPtr_t ) xSocket; /*lint !e9087 cast used for portability. */ - - if( ( xSocket != SOCKETS_INVALID_SOCKET ) && - ( pvBuffer != NULL ) ) - { - pxContext->xRecvFlags = ( BaseType_t ) ulFlags; - - /* Receive unencrypted. */ - lStatus = prvNetworkRecv( pxContext, pvBuffer, xBufferLength ); - } - else - { - lStatus = SOCKETS_EINVAL; - } - - return lStatus; -} -/*-----------------------------------------------------------*/ - -int32_t SOCKETS_Send( Socket_t xSocket, - const void * pvBuffer, - size_t xDataLength, - uint32_t ulFlags ) -{ - int32_t lStatus = SOCKETS_SOCKET_ERROR; - SSOCKETContextPtr_t pxContext = ( SSOCKETContextPtr_t ) xSocket; /*lint !e9087 cast used for portability. */ - - if( ( xSocket != SOCKETS_INVALID_SOCKET ) && - ( pvBuffer != NULL ) ) - { - pxContext->xSendFlags = ( BaseType_t ) ulFlags; - - /* Send unencrypted. */ - lStatus = prvNetworkSend( pxContext, pvBuffer, xDataLength ); - } - else - { - lStatus = SOCKETS_EINVAL; - } - - return lStatus; -} -/*-----------------------------------------------------------*/ - -int32_t SOCKETS_SetSockOpt( Socket_t xSocket, - int32_t lLevel, - int32_t lOptionName, - const void * pvOptionValue, - size_t xOptionLength ) -{ - int32_t lStatus = SOCKETS_ERROR_NONE; - TickType_t xTimeout; - SSOCKETContextPtr_t pxContext = ( SSOCKETContextPtr_t ) xSocket; /*lint !e9087 cast used for portability. */ - - if( ( xSocket != SOCKETS_INVALID_SOCKET ) && ( xSocket != NULL ) ) - { - switch( lOptionName ) - { - case SOCKETS_SO_NONBLOCK: - xTimeout = 0; - - /* Non-blocking connect is not supported. Socket may be set to nonblocking - * only after a connection is made. */ - if( pdTRUE == pxContext->xConnectAttempted ) - { - lStatus = FreeRTOS_setsockopt( pxContext->xSocket, - lLevel, - SOCKETS_SO_RCVTIMEO, - &xTimeout, - sizeof( xTimeout ) ); - - if( lStatus == SOCKETS_ERROR_NONE ) - { - lStatus = FreeRTOS_setsockopt( pxContext->xSocket, - lLevel, - SOCKETS_SO_SNDTIMEO, - &xTimeout, - sizeof( xTimeout ) ); - } - } - else - { - lStatus = SOCKETS_EISCONN; - } - - break; - - case SOCKETS_SO_RCVTIMEO: - case SOCKETS_SO_SNDTIMEO: - /* Comply with Berkeley standard - a 0 timeout is wait forever. */ - xTimeout = *( ( const TickType_t * ) pvOptionValue ); /*lint !e9087 pvOptionValue passed should be of TickType_t */ - - if( xTimeout == 0U ) - { - xTimeout = portMAX_DELAY; - } - - lStatus = FreeRTOS_setsockopt( pxContext->xSocket, - lLevel, - lOptionName, - &xTimeout, - xOptionLength ); - break; - - default: - lStatus = FreeRTOS_setsockopt( pxContext->xSocket, - lLevel, - lOptionName, - pvOptionValue, - xOptionLength ); - break; - } - } - else - { - lStatus = SOCKETS_EINVAL; - } - - return lStatus; -} -/*-----------------------------------------------------------*/ - -int32_t SOCKETS_Shutdown( Socket_t xSocket, - uint32_t ulHow ) -{ - int32_t lReturn; - SSOCKETContextPtr_t pxContext = ( SSOCKETContextPtr_t ) xSocket; /*lint !e9087 cast used for portability. */ - - if( ( xSocket != SOCKETS_INVALID_SOCKET ) && ( xSocket != NULL ) ) - { - lReturn = FreeRTOS_shutdown( pxContext->xSocket, ( BaseType_t ) ulHow ); - } - else - { - lReturn = SOCKETS_EINVAL; - } - - return lReturn; -} -/*-----------------------------------------------------------*/ - -Socket_t SOCKETS_Socket( int32_t lDomain, - int32_t lType, - int32_t lProtocol ) -{ - SSOCKETContextPtr_t pxContext = NULL; - Socket_t xSocket; - - /* Ensure that only supported values are supplied. */ - configASSERT( lDomain == SOCKETS_AF_INET ); - configASSERT( lType == SOCKETS_SOCK_STREAM ); - configASSERT( lProtocol == SOCKETS_IPPROTO_TCP ); - - /* Create the wrapped socket. */ - xSocket = FreeRTOS_socket( lDomain, lType, lProtocol ); - - if( xSocket != FREERTOS_INVALID_SOCKET ) - { - /* Allocate the internal context structure. */ - if( NULL == ( pxContext = pvPortMalloc( sizeof( SSOCKETContext_t ) ) ) ) - { - /* Need to close socket. */ - ( void ) FreeRTOS_closesocket( xSocket ); - pxContext = SOCKETS_INVALID_SOCKET; - } - else - { - memset( pxContext, 0, sizeof( SSOCKETContext_t ) ); - pxContext->xSocket = xSocket; - } - } - else - { - pxContext = SOCKETS_INVALID_SOCKET; - } - - return pxContext; -} -/*-----------------------------------------------------------*/ - -BaseType_t SOCKETS_Init( void ) -{ - /* Empty initialization for this port. */ - return pdPASS; -} -/*-----------------------------------------------------------*/ diff --git a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets.h b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets.h deleted file mode 100644 index d7c794a50..000000000 --- a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets.h +++ /dev/null @@ -1,609 +0,0 @@ -/* - * Amazon FreeRTOS Secure Sockets V1.1.5 - * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/** - * @file iot_secure_sockets.h - * @brief Secure Sockets Interface. - * - * Secure sockets is a portable layer for establishing a TCP/IP - * connection, with the option of using TLS. - * - * Secure sockets is based on the Berkeley sockets API. - * A few difference general differences between Berkeley and SOCKETS are: - * - SOCKETS has additional socket options to enable TLS, server name - * indication, and per-socket root of trust server certificates. See - * SOCKETS_SetSockOpt() for more information. - * - SOCKETS API return an error code, rather than returning -1 and setting - * a global errno value. - * - */ - -#ifndef _AWS_SECURE_SOCKETS_H_ -#define _AWS_SECURE_SOCKETS_H_ - -/* - #ifdef __cplusplus - * extern "C" { - #endif - */ -#include -#include -#include "iot_secure_sockets_config.h" -#include "iot_secure_sockets_config_defaults.h" -#include "iot_secure_sockets_wrapper_metrics.h" -#include "iot_lib_init.h" - -/** - * @ingroup SecureSockets_datatypes_handles - * @brief The socket handle data type. - * - * For detail of socket, refer to [Network Sockets] - * (https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/socket.html) - * - * Data contained by the Socket_t type is port specific. - */ -typedef void * Socket_t; - -/** - * @brief The "size_t" of secure sockets. - * - * This type is used for compatibility with the expected Berkeley sockets - * naming. - */ -#define Socklen_t uint32_t - -/** - * @anchor SocketsErrors - * @name SocketsErrors - * @brief Error codes returned by the SOCKETS API. - * - * Note that SOCKETS API may also propagate port-specific - * error codes when they are more descriptive. See your - * port's error codes for more details. - * PORT_SPECIFIC_LINK - */ -/**@{ */ - -#define SOCKETS_ERROR_NONE ( 0 ) /*!< No error. */ -#define SOCKETS_SOCKET_ERROR ( -1 ) /*!< Catch-all sockets error code. */ -#define SOCKETS_EWOULDBLOCK ( -11 ) /*!< A resource is temporarily unavailable. */ -#define SOCKETS_ENOMEM ( -12 ) /*!< Memory allocation failed. */ -#define SOCKETS_EINVAL ( -22 ) /*!< Invalid argument. */ -#define SOCKETS_ENOPROTOOPT ( -109 ) /*!< A bad option was specified . */ -#define SOCKETS_ENOTCONN ( -126 ) /*!< The supplied socket is not connected. */ -#define SOCKETS_EISCONN ( -127 ) /*!< The supplied socket is already connected. */ -#define SOCKETS_ECLOSED ( -128 ) /*!< The supplied socket has already been closed. */ -#define SOCKETS_TLS_INIT_ERROR ( -1001 ) /*!< TLS initialization failed. */ -#define SOCKETS_TLS_HANDSHAKE_ERROR ( -1002 ) /*!< TLS handshake failed. */ -#define SOCKETS_TLS_SERVER_UNVERIFIED ( -1003 ) /*!< A connection was made but the server could not be verified. It is recommended that the socket be closed. */ -#define SOCKETS_TLS_RECV_ERROR ( -1004 ) /*!< TLS receive operation failed. */ -#define SOCKETS_TLS_SEND_ERROR ( -1005 ) /*!< TLS send operation failed. */ -#define SOCKETS_PERIPHERAL_RESET ( -1006 ) /*!< Communications peripheral has been reset. */ -/**@} */ - -/** - * @brief Assigned to an Socket_t variable when the socket is not valid. - */ -#define SOCKETS_INVALID_SOCKET ( ( Socket_t ) ~0U ) - -/** - * @anchor SocketDomains - * @name SocketDomains - * - * @brief Options for the lDomain parameter of SOCKETS_Socket() - * function. - * - * These select the protocol family to be used for communication. - */ -/**@{ */ -#define SOCKETS_AF_INET ( 2 ) /*!< IPv4 Internet Protocols. */ -#define SOCKETS_PF_INET SOCKETS_AF_INET /*!< IPv4 Internet Protocol. */ -#define SOCKETS_AF_INET6 ( 10 ) /*!< IPv6 Internet Protocols. This option is currently not supported. */ -/**@} */ - -/** - * @anchor SocketTypes - * @name SocketTypes - * - * @brief Options for the lType parameter of SOCKETS_Socket() - * function. - * - * These specify the communication semantics. - */ -/**@{ */ -#define SOCKETS_SOCK_DGRAM ( 2 ) /*!< Datagram. */ -#define SOCKETS_SOCK_STREAM ( 1 ) /*!< Byte-stream. */ -/**@} */ - -/** - * @anchor Protocols - * @name Protocols - * - * @brief Options for the lProtocol parameter of SOCKETS_Socket() function. - * - */ -/**@{ */ -#define SOCKETS_IPPROTO_UDP ( 17 ) /*!< UDP. This option is currently not supported. */ -#define SOCKETS_IPPROTO_TCP ( 6 ) /*!< TCP. */ -/**@} */ - -/** - * @anchor SetSockOptOptions - * @name SetSockOptOptions - * - * @brief Options for lOptionName in SOCKETS_SetSockOpt(). - * - */ -/**@{ */ -#define SOCKETS_SO_RCVTIMEO ( 0 ) /**< Set the receive timeout. */ -#define SOCKETS_SO_SNDTIMEO ( 1 ) /**< Set the send timeout. */ -#define SOCKETS_SO_SNDBUF ( 4 ) /**< Set the size of the send buffer (TCP only). */ -#define SOCKETS_SO_RCVBUF ( 5 ) /**< Set the size of the receive buffer (TCP only). */ -#define SOCKETS_SO_SERVER_NAME_INDICATION ( 6 ) /**< Toggle client use of TLS SNI. */ -#define SOCKETS_SO_TRUSTED_SERVER_CERTIFICATE ( 7 ) /**< Override default TLS server certificate trust. Must be PEM encoded and length must include null terminator. */ -#define SOCKETS_SO_REQUIRE_TLS ( 8 ) /**< Toggle client enforcement of TLS. */ -#define SOCKETS_SO_NONBLOCK ( 9 ) /**< Socket is nonblocking. */ -#define SOCKETS_SO_ALPN_PROTOCOLS ( 10 ) /**< Application protocol list to be included in TLS ClientHello. */ -#define SOCKETS_SO_WAKEUP_CALLBACK ( 17 ) /**< Set the callback to be called whenever there is data available on the socket for reading. */ - -/**@} */ - -/** - * @anchor ShutdownFlags
- * @name ShutdownFlags - * - * @brief Options for the ulHow parameter in SOCKETS_Shutdown(). - */ -/**@{ */ -#define SOCKETS_SHUT_RD ( 0 ) /**< No further receives. */ -#define SOCKETS_SHUT_WR ( 1 ) /**< No further sends. */ -#define SOCKETS_SHUT_RDWR ( 2 ) /**< No further send or receive. */ -/**@} */ - -/** - * @brief Maximum length of an ASCII DNS name. - */ -#define securesocketsMAX_DNS_NAME_LENGTH ( 253 ) - -/** - * @ingroup SecureSockets_datatypes_paramstructs - * @brief Socket address. - * - * \sa PORT_SPECIFIC_LINK - */ -typedef struct SocketsSockaddr -{ - uint8_t ucLength; /**< Length of SocketsSockaddr structure. */ - uint8_t ucSocketDomain; /**< Only SOCKETS_AF_INET is supported. */ - uint16_t usPort; /**< Port number. Convention is to call this sin_port. */ - uint32_t ulAddress; /**< IP Address. Convention is to call this sin_addr. */ -} SocketsSockaddr_t; - -/** - * @brief Well-known port numbers. - */ -#define securesocketsDEFAULT_TLS_DESTINATION_PORT 443 - -/** - * @brief Secure Sockets library initialization function. - * - * This function does general initialization and setup. It must be called once - * and only once before calling any other function. - * - * @return - * * `pdPASS` if everything succeeds - * * `pdFAIL` otherwise. - */ -lib_initDECLARE_LIB_INIT( SOCKETS_Init ); - -/** - * @brief Creates a TCP socket. - * - * See the [FreeRTOS+TCP networking tutorial] - * (https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_Networking_Tutorial.html) - * for more information on TCP sockets. - * - * See the [Berkeley Sockets API] - * (https://en.wikipedia.org/wiki/Berkeley_sockets#Socket_API_functions) - * in wikipedia - * - * @sa SOCKETS_Close() - * - * @param[in] lDomain Must be set to SOCKETS_AF_INET. See @ref SocketDomains. - * @param[in] lType Set to SOCKETS_SOCK_STREAM to create a TCP socket. - * No other value is valid. See @ref SocketTypes. - * @param[in] lProtocol Set to SOCKETS_IPPROTO_TCP to create a TCP socket. - * No other value is valid. See @ref Protocols. - * - * @return - * * If a socket is created successfully, then the socket handle is - * returned - * * @ref SOCKETS_INVALID_SOCKET is returned if an error occurred. - */ - -/* - * This call allocates memory and claims a socket resource. - */ -/* @[declare_secure_sockets_socket] */ -Socket_t SOCKETS_Socket( int32_t lDomain, - int32_t lType, - int32_t lProtocol ); -/* @[declare_secure_sockets_socket] */ - - -/** - * @brief Connects the socket to the specified IP address and port. - * - * The socket must first have been successfully created by a call to SOCKETS_Socket(). - * - * \note To create a secure socket, SOCKETS_SetSockOpt() should be called with the - * SOCKETS_SO_REQUIRE_TLS option \a before SOCKETS_Connect() is called. - * - * If this function returns an error the socket is considered invalid. - * - * \warning SOCKETS_Connect() is not safe to be called on the same socket - * from multiple threads simultaneously with SOCKETS_Connect(), - * SOCKETS_SetSockOpt(), SOCKETS_Shutdown(), SOCKETS_Close(). - * - * See the [Berkeley Sockets API] - * (https://en.wikipedia.org/wiki/Berkeley_sockets#Socket_API_functions) - * in wikipedia - * - * @param[in] xSocket The handle of the socket to be connected. - * @param[in] pxAddress A pointer to a SocketsSockaddr_t structure that contains the - * the address to connect the socket to. - * @param[in] xAddressLength Should be set to sizeof( @ref SocketsSockaddr_t ). - * - * @return - * * @ref SOCKETS_ERROR_NONE if a connection is established. - * * If an error occurred, a negative value is returned. @ref SocketsErrors - */ -/* @[declare_secure_sockets_connect] */ -int32_t SOCKETS_Connect( Socket_t xSocket, - SocketsSockaddr_t * pxAddress, - Socklen_t xAddressLength ); -/* @[declare_secure_sockets_connect] */ - -/** - * @brief Receive data from a TCP socket. - * - * The socket must have already been created using a call to SOCKETS_Socket() - * and connected to a remote socket using SOCKETS_Connect(). - * - * See the [Berkeley Sockets API] - * (https://en.wikipedia.org/wiki/Berkeley_sockets#Socket_API_functions) - * in wikipedia - * - * @param[in] xSocket The handle of the socket from which data is being received. - * @param[out] pvBuffer The buffer into which the received data will be placed. - * @param[in] xBufferLength The maximum number of bytes which can be received. - * pvBuffer must be at least xBufferLength bytes long. - * @param[in] ulFlags Not currently used. Should be set to 0. - * - * @return - * * If the receive was successful then the number of bytes received (placed in the - * buffer pointed to by pvBuffer) is returned. - * * If a timeout occurred before data could be received then 0 is returned (timeout - * is set using @ref SOCKETS_SO_RCVTIMEO). - * * If an error occurred, a negative value is returned. @ref SocketsErrors - */ -/* @[declare_secure_sockets_recv] */ -int32_t SOCKETS_Recv( Socket_t xSocket, - void * pvBuffer, - size_t xBufferLength, - uint32_t ulFlags ); -/* @[declare_secure_sockets_recv] */ - -/** - * @brief Transmit data to the remote socket. - * - * The socket must have already been created using a call to SOCKETS_Socket() and - * connected to a remote socket using SOCKETS_Connect(). - * - * See the [Berkeley Sockets API] - * (https://en.wikipedia.org/wiki/Berkeley_sockets#Socket_API_functions) - * in wikipedia - * - * @param[in] xSocket The handle of the sending socket. - * @param[in] pvBuffer The buffer containing the data to be sent. - * @param[in] xDataLength The length of the data to be sent. - * @param[in] ulFlags Not currently used. Should be set to 0. - * - * @return - * * On success, the number of bytes actually sent is returned. - * * If an error occurred, a negative value is returned. @ref SocketsErrors - */ -/* @[declare_secure_sockets_send] */ -int32_t SOCKETS_Send( Socket_t xSocket, - const void * pvBuffer, - size_t xDataLength, - uint32_t ulFlags ); -/* @[declare_secure_sockets_send] */ - -/** - * @brief Closes all or part of a full-duplex connection on the socket. - * - * Disable reads and writes on a connected TCP socket. A connected TCP socket must be gracefully - * shut down before it can be closed. - * - * See the [Berkeley Sockets API] - * (https://en.wikipedia.org/wiki/Berkeley_sockets#Socket_API_functions) - * in wikipedia - * - * \warning SOCKETS_Shutdown() is not safe to be called on the same socket - * from multiple threads simultaneously with SOCKETS_Connect(), - * SOCKETS_SetSockOpt(), SOCKETS_Shutdown(), SOCKETS_Close(). - * - * @param[in] xSocket The handle of the socket to shutdown. - * @param[in] ulHow SOCKETS_SHUT_RD, SOCKETS_SHUT_WR or SOCKETS_SHUT_RDWR. - * @ref ShutdownFlags - * - * @return - * * If the operation was successful, 0 is returned. - * * If an error occurred, a negative value is returned. @ref SocketsErrors - */ -/* @[declare_secure_sockets_shutdown] */ -int32_t SOCKETS_Shutdown( Socket_t xSocket, - uint32_t ulHow ); -/* @[declare_secure_sockets_shutdown] */ - -/** - * @brief Closes the socket and frees the related resources. - * - * A socket should be shutdown gracefully before it is closed, and cannot be used after it has been closed. - * - * See the [Berkeley Sockets API] - * (https://en.wikipedia.org/wiki/Berkeley_sockets#Socket_API_functions) - * in wikipedia - * - * \warning SOCKETS_Close() is not safe to be called on the same socket - * from multiple threads simultaneously with SOCKETS_Connect(), - * SOCKETS_SetSockOpt(), SOCKETS_Shutdown(), SOCKETS_Close(). - * - * @param[in] xSocket The handle of the socket to close. - * - * @return - * * On success, 0 is returned. - * * If an error occurred, a negative value is returned. @ref SocketsErrors - */ -/* @[declare_secure_sockets_close] */ -int32_t SOCKETS_Close( Socket_t xSocket ); -/* @[declare_secure_sockets_close] */ - -/** - * @brief AWS IoT ALPN protocol name for MQTT over TLS on server port 443. - */ -#define socketsAWS_IOT_ALPN_MQTT "x-amzn-mqtt-ca" - -/** - * @brief Manipulates the options for the socket. - * - * See the [Berkeley Sockets API] - * (https://en.wikipedia.org/wiki/Berkeley_sockets#Socket_API_functions) - * in wikipedia - * - * @param[in] xSocket The handle of the socket to set the option for. - * @param[in] lLevel Not currently used. Should be set to 0. - * @param[in] lOptionName See @ref SetSockOptOptions. - * @param[in] pvOptionValue A buffer containing the value of the option to set. - * @param[in] xOptionLength The length of the buffer pointed to by pvOptionValue. - * - * \warning SOCKETS_Close() is not safe to be called on the same socket - * from multiple threads simultaneously with SOCKETS_Connect(), - * SOCKETS_SetSockOpt(), SOCKETS_Shutdown(), SOCKETS_Close(). - * - * @note Socket option support and possible values vary by port. Please see - * PORT_SPECIFIC_LINK to check the valid options and limitations of your device. - * - * - Berkeley Socket Options - * - @ref SOCKETS_SO_RCVTIMEO - * - Sets the receive timeout - * - pvOptionValue (TickType_t) is the number of milliseconds that the - * receive function should wait before timing out. - * - Setting pvOptionValue = 0 causes receive to wait forever. - * - See PORT_SPECIFIC_LINK for device limitations. - * - @ref SOCKETS_SO_SNDTIMEO - * - Sets the send timeout - * - pvOptionValue (TickType_t) is the number of milliseconds that the - * send function should wait before timing out. - * - Setting pvOptionValue = 0 causes send to wait forever. - * - See PORT_SPECIFIC_LINK for device limitations. - * - Non-Standard Options - * - @ref SOCKETS_SO_NONBLOCK - * - Makes a socket non-blocking. - * - Non-blocking connect is not supported - socket option should be - * called after connect. - * - pvOptionValue is ignored for this option. - * - @ref SOCKETS_SO_WAKEUP_CALLBACK - * - Set the callback to be called whenever there is data available on - * the socket for reading - * - This option provides an asynchronous way to handle received data - * - pvOptionValue is a pointer to the callback function - * - See PORT_SPECIFIC_LINK for device limitations. - * - Security Sockets Options - * - @ref SOCKETS_SO_REQUIRE_TLS - * - Use TLS for all connect, send, and receive on this socket. - * - This socket options MUST be set for TLS to be used, even - * if other secure socket options are set. - * - This socket option should be set before SOCKETS_Connect() is - * called. - * - pvOptionValue is ignored for this option. - * - @ref SOCKETS_SO_TRUSTED_SERVER_CERTIFICATE - * - Set the root of trust server certificate for the socket. - * - This socket option only takes effect if @ref SOCKETS_SO_REQUIRE_TLS - * is also set. If @ref SOCKETS_SO_REQUIRE_TLS is not set, - * this option will be ignored. - * - pvOptionValue is a pointer to the formatted server certificate. - * TODO: Link to description of how to format certificates with \n - * - xOptionLength (BaseType_t) is the length of the certificate - * in bytes. - * - @ref SOCKETS_SO_SERVER_NAME_INDICATION - * - Use Server Name Indication (SNI) - * - This socket option only takes effect if @ref SOCKETS_SO_REQUIRE_TLS - * is also set. If @ref SOCKETS_SO_REQUIRE_TLS is not set, - * this option will be ignored. - * - pvOptionValue is a pointer to a string containing the hostname - * - xOptionLength is the length of the hostname string in bytes. - * - @ref SOCKETS_SO_ALPN_PROTOCOLS - * - Negotiate an application protocol along with TLS. - * - The ALPN list is expressed as an array of NULL-terminated ANSI - * strings. - * - xOptionLength is the number of items in the array. - * - * @return - * * On success, 0 is returned. - * * If an error occurred, a negative value is returned. @ref SocketsErrors - */ -/* @[declare_secure_sockets_setsockopt] */ -int32_t SOCKETS_SetSockOpt( Socket_t xSocket, - int32_t lLevel, - int32_t lOptionName, - const void * pvOptionValue, - size_t xOptionLength ); -/* @[declare_secure_sockets_setsockopt] */ - -/** - * @brief Resolve a host name using Domain Name Service. - * - * See the [Berkeley Sockets API] - * (https://en.wikipedia.org/wiki/Berkeley_sockets#Socket_API_functions) - * in wikipedia - * - * @param[in] pcHostName The host name to resolve. - * @return - * * The IPv4 address of the specified host. - * * If an error has occurred, 0 is returned. - */ -/* @[declare_secure_sockets_gethostbyname] */ -uint32_t SOCKETS_GetHostByName( const char * pcHostName ); -/* @[declare_secure_sockets_gethostbyname] */ - - - -/** - * @brief Convert an unsigned thirty-two-bit value from host endianness to network - * endianness. - * - * @param[in] usIn The unsigned thirty-two-bit value to convert. - */ -#if defined( socketsconfigBYTE_ORDER ) && ( socketsconfigBYTE_ORDER == pdLITTLE_ENDIAN ) - #define SOCKETS_htonl( ulIn ) ( ( uint32_t ) ( ( ( ulIn & 0xFF ) << 24 ) | ( ( ulIn & 0xFF00 ) << 8 ) | ( ( ulIn & 0xFF0000 ) >> 8 ) | ( ( ulIn & 0xFF000000 ) >> 24 ) ) ) -#else - #define SOCKETS_htonl( usIn ) ( ( uint32_t ) ( usIn ) ) -#endif - -/** - * @brief Convert an unsigned thirty-two-bit value from network endianness to host - * endianness. - * - * @param[in] usIn The unsigned thirty-two-bit value to convert. - */ -#define SOCKETS_ntohl( usIn ) SOCKETS_htonl( usIn ) - - -/** - * @brief Convert an unsigned sixteen-bit value from host endianness to network - * endianness. - * - * @param[in] usIn The unsigned sixteen-bit value to convert. - */ - -#if defined( socketsconfigBYTE_ORDER ) && ( socketsconfigBYTE_ORDER == pdLITTLE_ENDIAN ) - #define SOCKETS_htons( usIn ) ( ( uint16_t ) ( ( ( usIn ) << 8U ) | ( ( usIn ) >> 8U ) ) ) -#else - #define SOCKETS_htons( usIn ) ( ( uint16_t ) ( usIn ) ) -#endif - - -/** - * @brief Convert an unsigned sixteen-bit value from network endianness to host - * endianness. - * - * @param[in] usIn The unsigned sixteen-bit value to convert. - */ -#define SOCKETS_ntohs( usIn ) SOCKETS_htons( usIn ) - -/** - * @brief Convert an IP address expressed as four separate numeric octets into a an IP address expressed as a 32-bit number in network byte order - * (for example 192, 168, 0, 100) - * - * @param[in] ucOctet0 0th IP Octet - * @param[in] ucOctet1 1st IP Octet - * @param[in] ucOctet2 2nd IP Octet - * @param[in] ucOctet3 3rd IP Octet - */ -#if defined( socketsconfigBYTE_ORDER ) && ( socketsconfigBYTE_ORDER == pdLITTLE_ENDIAN ) - - #define SOCKETS_inet_addr_quick( ucOctet0, ucOctet1, ucOctet2, ucOctet3 ) \ - ( ( ( ( uint32_t ) ( ucOctet3 ) ) << 24UL ) | \ - ( ( ( uint32_t ) ( ucOctet2 ) ) << 16UL ) | \ - ( ( ( uint32_t ) ( ucOctet1 ) ) << 8UL ) | \ - ( ( uint32_t ) ( ucOctet0 ) ) ) - -/** - * @brief Convert an IP address expressed as a 32-bit number in network byte order to a string in decimal dot notation. - * (for example "192.168.0.100") - * - * @param[in] ulIPAddress An IP address expressed as a 32-bit value in network byte order. - * @param[in] pucBuffer A pointer to a buffer into which the IP address will be written in decimal dot notation. - */ - #define SOCKETS_inet_ntoa( ulIPAddress, pucBuffer ) \ - sprintf( ( char * ) ( pucBuffer ), "%u.%u.%u.%u", \ - ( ( unsigned ) ( ( ulIPAddress ) & 0xffUL ) ), \ - ( ( unsigned ) ( ( ( ulIPAddress ) >> 8 ) & 0xffUL ) ), \ - ( ( unsigned ) ( ( ( ulIPAddress ) >> 16 ) & 0xffUL ) ), \ - ( ( unsigned ) ( ( ulIPAddress ) >> 24 ) ) ) - -#else /* socketsconfigBYTE_ORDER. */ - - #define SOCKETS_inet_addr_quick( ucOctet0, ucOctet1, ucOctet2, ucOctet3 ) \ - ( ( ( ( uint32_t ) ( ucOctet0 ) ) << 24UL ) | \ - ( ( ( uint32_t ) ( ucOctet1 ) ) << 16UL ) | \ - ( ( ( uint32_t ) ( ucOctet2 ) ) << 8UL ) | \ - ( ( uint32_t ) ( ucOctet3 ) ) ) - -/** - * @brief Convert an IP address expressed as a 32-bit number in network byte order to a string in decimal dot notation. - * (for example "192.168.0.100") - * - * @param[in] ulIPAddress An IP address expressed as a 32-bit value in network byte order. - * @param[in] pucBuffer A pointer to a buffer into which the IP address will be written in decimal dot notation. - */ - #define SOCKETS_inet_ntoa( ulIPAddress, pucBuffer ) \ - sprintf( ( char * ) ( pucBuffer ), "%u.%u.%u.%u", \ - ( ( unsigned ) ( ( ulIPAddress ) >> 24 ) ), \ - ( ( unsigned ) ( ( ( ulIPAddress ) >> 16 ) & 0xffUL ) ), \ - ( ( unsigned ) ( ( ( ulIPAddress ) >> 8 ) & 0xffUL ) ), \ - ( ( unsigned ) ( ( ulIPAddress ) & 0xffUL ) ) ) - -#endif /* socketsconfigBYTE_ORDER. */ - -/* - #ifdef __cplusplus - * } - #endif - */ - -#endif /* _AWS_SECURE_SOCKETS_H_ */ diff --git a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets_config_defaults.h b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets_config_defaults.h deleted file mode 100644 index 498ac5dfc..000000000 --- a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets_config_defaults.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Amazon FreeRTOS Secure Sockets V1.1.5 - * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/** - * @file iot_secure_sockets_config_defaults.h - * @brief Ensures that the required sockets configuration options are supplied - * and the optional ones are set to sane values if the user does not supply. - */ - -#ifndef AWS_INC_SECURE_SOCKETS_CONFIG_DEFAULTS_H_ -#define AWS_INC_SECURE_SOCKETS_CONFIG_DEFAULTS_H_ - -/** - * @brief Byte order of the target MCU must be defined. - * - * Valid values are pdLITTLE_ENDIAN and pdBIG_ENDIAN. - */ -#ifndef socketsconfigBYTE_ORDER - #error "socketsconfigBYTE_ORDER must be defined." -#endif - -/** - * @brief Default socket send timeout. - * - * The user can change the send timeout for a socket using the SOCKETS_SetSockOpt API - * with the SOCKETS_SO_SNDTIMEO option. - */ -#ifndef socketsconfigDEFAULT_SEND_TIMEOUT - #define socketsconfigDEFAULT_SEND_TIMEOUT ( 10000 ) -#endif - -/** - * @brief Default socket receive timeout. - * - * The user can change the receive timeout for a socket using the SOCKETS_SetSockOpt API - * with the SOCKETS_SO_RCVTIMEO option. - */ -#ifndef socketsconfigDEFAULT_RECV_TIMEOUT - #define socketsconfigDEFAULT_RECV_TIMEOUT ( 10000 ) -#endif - -/** - * @brief By default, metrics of secure socket is disabled. - * - */ -#ifndef AWS_IOT_SECURE_SOCKETS_METRICS_ENABLED - #define AWS_IOT_SECURE_SOCKETS_METRICS_ENABLED ( 0 ) -#endif - -#endif /* AWS_INC_SECURE_SOCKETS_CONFIG_DEFAULTS_H_ */ diff --git a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets_wrapper_metrics.h b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets_wrapper_metrics.h deleted file mode 100644 index a5282a23c..000000000 --- a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/abstractions/secure_sockets/include/iot_secure_sockets_wrapper_metrics.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Amazon FreeRTOS Secure Sockets V1.1.5 - * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -#ifndef _AWS_SECURE_SOCKETS_WRAPPER_METRICS_ -#define _AWS_SECURE_SOCKETS_WRAPPER_METRICS_ - -/* This file redefines Secure Sockets functions to be called through a wrapper macro, - * but only if metrics is enabled explicitly. */ -#if AWS_IOT_SECURE_SOCKETS_METRICS_ENABLED == 1 - -/* This macro is included in aws_secure_socket.c and aws_secure_socket_wrapper_metrics.c. - * It will prevent the redefine in those source files. */ - #ifndef _SECURE_SOCKETS_WRAPPER_NOT_REDEFINE - #define SOCKETS_Init Sockets_MetricsInit - #define SOCKETS_Connect Sockets_MetricsConnect - #define SOCKETS_Shutdown Sockets_MetricsShutdown - #endif - -#endif - -#endif /* ifndef _AWS_SECURE_SOCKETS_WRAPPER_METRICS_ */ diff --git a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/c_sdk/standard/common/include/private/iot_lib_init.h b/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/c_sdk/standard/common/include/private/iot_lib_init.h deleted file mode 100644 index 2930d7415..000000000 --- a/FreeRTOS-Plus/Source/FreeRTOS-IoT-Libraries/c_sdk/standard/common/include/private/iot_lib_init.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Amazon FreeRTOS Common V1.0.0 - * Copyright (C) 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -#ifndef _AWS_LIB_INIT_H_ -#define _AWS_LIB_INIT_H_ - -#include "FreeRTOS.h" - -#define lib_initDECLARE_LIB_INIT( f ) extern BaseType_t f( void ) - -#endif /* _AWS_LIB_INIT_H_ */