]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS-Plus/Source/FreeRTOS-Plus-UDP/FreeRTOS_Sockets.c
Update to MIT licensed FreeRTOS V10.0.0 - see https://www.freertos.org/History.txt
[freertos] / FreeRTOS-Plus / Source / FreeRTOS-Plus-UDP / FreeRTOS_Sockets.c
index ffd1a812edb97c421f67401a06f68c4196b37457..bf3487919473ceb17a72c1514a1b6a064b970e1d 100644 (file)
@@ -1,43 +1,29 @@
 /*\r
- * FreeRTOS+UDP V1.0.1 (C) 2013 Real Time Engineers ltd.\r
- * All rights reserved\r
+ * FreeRTOS+UDP V1.0.4\r
+ * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
  *\r
- * This file is part of the FreeRTOS+UDP distribution.  The FreeRTOS+UDP license\r
- * terms are different to the FreeRTOS license terms.\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
+ * this software and associated documentation files (the "Software"), to deal in\r
+ * the Software without restriction, including without limitation the rights to\r
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
+ * the Software, and to permit persons to whom the Software is furnished to do so,\r
+ * subject to the following conditions:\r
  *\r
- * FreeRTOS+UDP uses a dual license model that allows the software to be used \r
- * under a standard GPL open source license, or a commercial license.  The \r
- * standard GPL license (unlike the modified GPL license under which FreeRTOS \r
- * itself is distributed) requires that all software statically linked with \r
- * FreeRTOS+UDP is also distributed under the same GPL V2 license terms.  \r
- * Details of both license options follow:\r
+ * The above copyright notice and this permission notice shall be included in all\r
+ * copies or substantial portions of the Software. If you wish to use our Amazon\r
+ * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
  *\r
- * - Open source licensing -\r
- * FreeRTOS+UDP is a free download and may be used, modified, evaluated and\r
- * distributed without charge provided the user adheres to version two of the\r
- * GNU General Public License (GPL) and does not remove the copyright notice or\r
- * this text.  The GPL V2 text is available on the gnu.org web site, and on the\r
- * following URL: http://www.FreeRTOS.org/gpl-2.0.txt.\r
- *\r
- * - Commercial licensing -\r
- * Businesses and individuals that for commercial or other reasons cannot comply\r
- * with the terms of the GPL V2 license must obtain a commercial license before \r
- * incorporating FreeRTOS+UDP into proprietary software for distribution in any \r
- * form.  Commercial licenses can be purchased from http://shop.freertos.org/udp \r
- * and do not require any source files to be changed.\r
- *\r
- * FreeRTOS+UDP is distributed in the hope that it will be useful.  You cannot\r
- * use FreeRTOS+UDP unless you agree that you use the software 'as is'.\r
- * FreeRTOS+UDP is provided WITHOUT ANY WARRANTY; without even the implied\r
- * warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR\r
- * PURPOSE. Real Time Engineers Ltd. disclaims all conditions and terms, be they\r
- * implied, expressed, or statutory.\r
- *\r
- * 1 tab == 4 spaces!\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
  *\r
  * http://www.FreeRTOS.org\r
- * http://www.FreeRTOS.org/udp\r
+ * http://aws.amazon.com/freertos\r
  *\r
+ * 1 tab == 4 spaces!\r
  */\r
 \r
 /* Standard includes. */\r
@@ -70,7 +56,7 @@ port number. */
 \r
 /* xWaitingPacketSemaphore is not created until the socket is bound, so can be\r
 tested to see if bind() has been called. */\r
-#define socketSOCKET_IS_BOUND( pxSocket ) ( ( uint32_t ) pxSocket->xWaitingPacketSemaphore )\r
+#define socketSOCKET_IS_BOUND( pxSocket ) ( ( BaseType_t ) pxSocket->xWaitingPacketSemaphore )\r
 \r
 /* If FreeRTOS_sendto() is called on a socket that is not bound to a port\r
 number then, depending on the FreeRTOSIPConfig.h settings, it might be that a\r
@@ -98,7 +84,7 @@ static uint16_t prvGetPrivatePortNumber( void );
  * Return the list itme from within pxList that has an item value of\r
  * xWantedItemValue.  If there is no such list item return NULL.\r
  */\r
-xListItem * pxListFindListItemWithValue( xList *pxList, portTickType xWantedItemValue );\r
+xListItem * pxListFindListItemWithValue( xList *pxList, TickType_t xWantedItemValue );\r
 \r
 /*-----------------------------------------------------------*/\r
 \r
@@ -107,8 +93,8 @@ typedef struct XSOCKET
        xSemaphoreHandle xWaitingPacketSemaphore;\r
        xList xWaitingPacketsList;\r
        xListItem xBoundSocketListItem; /* Used to reference the socket from a bound sockets list. */\r
-       portTickType xReceiveBlockTime;\r
-       portTickType xSendBlockTime;\r
+       TickType_t xReceiveBlockTime;\r
+       TickType_t xSendBlockTime;\r
        uint8_t ucSocketOptions;\r
        #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
                xQueueHandle xSelectQueue;\r
@@ -122,7 +108,7 @@ static xList xBoundSocketsList;
 \r
 /*-----------------------------------------------------------*/\r
 \r
-xSocket_t FreeRTOS_socket( portBASE_TYPE xDomain, portBASE_TYPE xType, portBASE_TYPE xProtocol )\r
+xSocket_t FreeRTOS_socket( BaseType_t xDomain, BaseType_t xType, BaseType_t xProtocol )\r
 {\r
 xFreeRTOS_Socket_t *pxSocket;\r
 \r
@@ -149,7 +135,7 @@ xFreeRTOS_Socket_t *pxSocket;
                vListInitialise( &( pxSocket->xWaitingPacketsList ) );\r
                vListInitialiseItem( &( pxSocket->xBoundSocketListItem ) );\r
                listSET_LIST_ITEM_OWNER( &( pxSocket->xBoundSocketListItem ), ( void * ) pxSocket );\r
-               pxSocket->xSendBlockTime = ( portTickType ) 0;\r
+               pxSocket->xSendBlockTime = ( TickType_t ) 0;\r
                pxSocket->xReceiveBlockTime = portMAX_DELAY;\r
                pxSocket->ucSocketOptions = FREERTOS_SO_UDPCKSUM_OUT;\r
                #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
@@ -168,7 +154,7 @@ xFreeRTOS_Socket_t *pxSocket;
 \r
 #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
 \r
-       xSocketSet_t FreeRTOS_CreateSocketSet( unsigned portBASE_TYPE uxEventQueueLength )\r
+       xSocketSet_t FreeRTOS_CreateSocketSet( UBaseType_t uxEventQueueLength )\r
        {\r
        xQueueHandle xSelectQueue;\r
 \r
@@ -184,11 +170,11 @@ xFreeRTOS_Socket_t *pxSocket;
 \r
 #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
 \r
-       portBASE_TYPE FreeRTOS_FD_SET( xSocket_t xSocket, xSocketSet_t xSocketSet )\r
+       BaseType_t FreeRTOS_FD_SET( xSocket_t xSocket, xSocketSet_t xSocketSet )\r
        {\r
        xFreeRTOS_Socket_t *pxSocket = ( xFreeRTOS_Socket_t * ) xSocket;\r
-       portBASE_TYPE xReturn = pdFALSE;\r
-       unsigned portBASE_TYPE uxMessagesWaiting;\r
+       BaseType_t xReturn = pdFALSE;\r
+       UBaseType_t uxMessagesWaiting;\r
 \r
                configASSERT( xSocket );\r
 \r
@@ -230,10 +216,10 @@ xFreeRTOS_Socket_t *pxSocket;
 \r
 #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
 \r
-       portBASE_TYPE FreeRTOS_FD_CLR( xSocket_t xSocket, xSocketSet_t xSocketSet ) \r
+       BaseType_t FreeRTOS_FD_CLR( xSocket_t xSocket, xSocketSet_t xSocketSet )\r
        {\r
        xFreeRTOS_Socket_t *pxSocket = ( xFreeRTOS_Socket_t * ) xSocket;\r
-       portBASE_TYPE xReturn;\r
+       BaseType_t xReturn;\r
 \r
                /* Is the socket a member of the select group? */\r
                if( pxSocket->xSelectQueue == ( xQueueHandle ) xSocketSet )\r
@@ -255,7 +241,7 @@ xFreeRTOS_Socket_t *pxSocket;
 \r
 #if ipconfigSUPPORT_SELECT_FUNCTION == 1\r
 \r
-       xSocket_t FreeRTOS_select( xSocketSet_t xSocketSet, portTickType xBlockTimeTicks )\r
+       xSocket_t FreeRTOS_select( xSocketSet_t xSocketSet, TickType_t xBlockTimeTicks )\r
        {\r
        xFreeRTOS_Socket_t *pxSocket;\r
 \r
@@ -361,7 +347,7 @@ xFreeRTOS_Socket_t *pxSocket;
        extern xQueueHandle xNetworkEventQueue;\r
        uint8_t *pucBuffer;\r
        xTimeOutType xTimeOut;\r
-       portTickType xTicksToWait;\r
+       TickType_t xTicksToWait;\r
        uint16_t usFragmentOffset;\r
        xFreeRTOS_Socket_t *pxSocket;\r
 \r
@@ -537,7 +523,7 @@ xFreeRTOS_Socket_t *pxSocket;
        xIPStackEvent_t xStackTxEvent = { eStackTxEvent, NULL };\r
        extern xQueueHandle xNetworkEventQueue;\r
        xTimeOutType xTimeOut;\r
-       portTickType xTicksToWait;\r
+       TickType_t xTicksToWait;\r
        int32_t lReturn = 0;\r
        xFreeRTOS_Socket_t *pxSocket;\r
        uint8_t *pucBuffer;\r
@@ -649,9 +635,9 @@ xFreeRTOS_Socket_t *pxSocket;
 #endif /* ipconfigCAN_FRAGMENT_OUTGOING_PACKETS */\r
 /*-----------------------------------------------------------*/\r
 \r
-portBASE_TYPE FreeRTOS_bind( xSocket_t xSocket, struct freertos_sockaddr * pxAddress, socklen_t xAddressLength )\r
+BaseType_t FreeRTOS_bind( xSocket_t xSocket, struct freertos_sockaddr * pxAddress, socklen_t xAddressLength )\r
 {\r
-portBASE_TYPE xReturn = 0; /* In Berkeley sockets, 0 means pass for bind(). */\r
+BaseType_t xReturn = 0; /* In Berkeley sockets, 0 means pass for bind(). */\r
 xFreeRTOS_Socket_t *pxSocket;\r
 #if ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND == 1\r
        struct freertos_sockaddr xAddress;\r
@@ -695,7 +681,7 @@ xFreeRTOS_Socket_t *pxSocket;
                vTaskSuspendAll();\r
                {\r
                        /* Check to ensure the port is not already in use. */\r
-                       if( pxListFindListItemWithValue( &xBoundSocketsList, ( portTickType ) pxAddress->sin_port ) != NULL )\r
+                       if( pxListFindListItemWithValue( &xBoundSocketsList, ( TickType_t ) pxAddress->sin_port ) != NULL )\r
                        {\r
                                xReturn = FREERTOS_EADDRINUSE;\r
                        }\r
@@ -749,7 +735,7 @@ xFreeRTOS_Socket_t *pxSocket;
 } /* Tested */\r
 /*-----------------------------------------------------------*/\r
 \r
-portBASE_TYPE FreeRTOS_closesocket( xSocket_t xSocket )\r
+BaseType_t FreeRTOS_closesocket( xSocket_t xSocket )\r
 {\r
 xNetworkBufferDescriptor_t *pxNetworkBuffer;\r
 xFreeRTOS_Socket_t *pxSocket;\r
@@ -795,11 +781,11 @@ void FreeRTOS_SocketsInit( void )
 }\r
 /*-----------------------------------------------------------*/\r
 \r
-portBASE_TYPE FreeRTOS_setsockopt( xSocket_t xSocket, int32_t lLevel, int32_t lOptionName, const void *pvOptionValue, size_t xOptionLength )\r
+BaseType_t FreeRTOS_setsockopt( xSocket_t xSocket, int32_t lLevel, int32_t lOptionName, const void *pvOptionValue, size_t xOptionLength )\r
 {\r
 /* The standard Berkeley function returns 0 for success. */\r
-portBASE_TYPE xReturn = 0;\r
-portBASE_TYPE lOptionValue;\r
+BaseType_t xReturn = 0;\r
+BaseType_t lOptionValue;\r
 xFreeRTOS_Socket_t *pxSocket;\r
 \r
        pxSocket = ( xFreeRTOS_Socket_t * ) xSocket;\r
@@ -815,7 +801,7 @@ xFreeRTOS_Socket_t *pxSocket;
        {\r
                case FREERTOS_SO_RCVTIMEO       :\r
                        /* Receive time out. */\r
-                       pxSocket->xReceiveBlockTime = *( ( portTickType * ) pvOptionValue );\r
+                       pxSocket->xReceiveBlockTime = *( ( TickType_t * ) pvOptionValue );\r
                        break;\r
 \r
                case FREERTOS_SO_SNDTIMEO       :\r
@@ -823,7 +809,7 @@ xFreeRTOS_Socket_t *pxSocket;
                        where ipconfigMAX_SEND_BLOCK_TIME_TICKS is defined in\r
                        FreeRTOSIPConfig.h (assuming an official configuration file is being\r
                        used. */\r
-                       pxSocket->xSendBlockTime = *( ( portTickType * ) pvOptionValue );\r
+                       pxSocket->xSendBlockTime = *( ( TickType_t * ) pvOptionValue );\r
                        if( pxSocket->xSendBlockTime > ipconfigMAX_SEND_BLOCK_TIME_TICKS )\r
                        {\r
                                pxSocket->xSendBlockTime = ipconfigMAX_SEND_BLOCK_TIME_TICKS;\r
@@ -832,7 +818,7 @@ xFreeRTOS_Socket_t *pxSocket;
 \r
                case FREERTOS_SO_UDPCKSUM_OUT :\r
                        /* Turn calculating of the UDP checksum on/off for this socket. */\r
-                       lOptionValue = ( portBASE_TYPE ) pvOptionValue;\r
+                       lOptionValue = ( BaseType_t ) pvOptionValue;\r
 \r
                        if( lOptionValue == 0 )\r
                        {\r
@@ -854,18 +840,18 @@ xFreeRTOS_Socket_t *pxSocket;
 } /* Tested */\r
 /*-----------------------------------------------------------*/\r
 \r
-portBASE_TYPE xProcessReceivedUDPPacket( xNetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort )\r
+BaseType_t xProcessReceivedUDPPacket( xNetworkBufferDescriptor_t *pxNetworkBuffer, uint16_t usPort )\r
 {\r
 xListItem *pxListItem;\r
-portBASE_TYPE xReturn = pdPASS;\r
+BaseType_t xReturn = pdPASS;\r
 xFreeRTOS_Socket_t *pxSocket;\r
-portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
+BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r
 \r
        vTaskSuspendAll();\r
        {\r
                /* See if there is a list item associated with the port number on the\r
                list of bound sockets. */\r
-               pxListItem = pxListFindListItemWithValue( &xBoundSocketsList, ( portTickType ) usPort );\r
+               pxListItem = pxListFindListItemWithValue( &xBoundSocketsList, ( TickType_t ) usPort );\r
        }\r
        xTaskResumeAll();\r
 \r
@@ -881,29 +867,29 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
                                /* Is the socket a member of a select() group? */\r
                                if( pxSocket->xSelectQueue != NULL )\r
                                {\r
-                                       /* Can the select group be notified that the socket is \r
+                                       /* Can the select group be notified that the socket is\r
                                        ready to be read? */\r
                                        if( xQueueSendFromISR( pxSocket->xSelectQueue, &pxSocket, &xHigherPriorityTaskWoken ) != pdPASS )\r
                                        {\r
                                                /* Could not notify the select group. */\r
                                                xReturn = pdFAIL;\r
                                                iptraceFAILED_TO_NOTIFY_SELECT_GROUP( pxSocket );\r
-                                       }                               \r
+                                       }\r
                                }\r
                        }\r
-                       #endif \r
+                       #endif\r
 \r
                        if( xReturn == pdPASS )\r
                        {\r
                                taskENTER_CRITICAL();\r
                                {\r
-                                       /* Add the network packet to the list of packets to be \r
+                                       /* Add the network packet to the list of packets to be\r
                                        processed by the socket. */\r
                                        vListInsertEnd( &( pxSocket->xWaitingPacketsList ), &( pxNetworkBuffer->xBufferListItem ) );\r
                                }\r
                                taskEXIT_CRITICAL();\r
 \r
-                               /* The socket's counting semaphore records how many packets are \r
+                               /* The socket's counting semaphore records how many packets are\r
                                waiting to be processed by the socket. */\r
                                xSemaphoreGiveFromISR( pxSocket->xWaitingPacketSemaphore, &xHigherPriorityTaskWoken );\r
                        }\r
@@ -952,7 +938,7 @@ uint16_t usReturn;
 } /* Tested */\r
 /*-----------------------------------------------------------*/\r
 \r
-xListItem * pxListFindListItemWithValue( xList *pxList, portTickType xWantedItemValue )\r
+xListItem * pxListFindListItemWithValue( xList *pxList, TickType_t xWantedItemValue )\r
 {\r
 xListItem *pxIterator, *pxReturn;\r
 \r
@@ -972,34 +958,34 @@ xListItem *pxIterator, *pxReturn;
 \r
 #if ipconfigINCLUDE_FULL_INET_ADDR == 1\r
 \r
-       uint32_t FreeRTOS_inet_addr( const uint8_t * pucIPAddress )\r
+       uint32_t FreeRTOS_inet_addr( const char *pcIPAddress )\r
        {\r
        const uint8_t ucDecimalBase = 10;\r
        uint8_t ucOctet[ socketMAX_IP_ADDRESS_OCTETS ];\r
-       const uint8_t *pucPointerOnEntering;\r
+       const char *pcPointerOnEntering;\r
        uint32_t ulReturn = 0UL, ulOctetNumber, ulValue;\r
-       portBASE_TYPE xResult = pdPASS;\r
+       BaseType_t xResult = pdPASS;\r
 \r
                for( ulOctetNumber = 0; ulOctetNumber < socketMAX_IP_ADDRESS_OCTETS; ulOctetNumber++ )\r
                {\r
                        ulValue = 0;\r
-                       pucPointerOnEntering = pucIPAddress;\r
+                       pcPointerOnEntering = pcIPAddress;\r
 \r
-                       while( ( *pucIPAddress >= ( uint8_t ) '0' ) && ( *pucIPAddress <= ( uint8_t ) '9' ) )\r
+                       while( ( *pcIPAddress >= ( uint8_t ) '0' ) && ( *pcIPAddress <= ( uint8_t ) '9' ) )\r
                        {\r
                                /* Move previous read characters into the next decimal\r
                                position. */\r
                                ulValue *= ucDecimalBase;\r
 \r
                                /* Add the binary value of the ascii character. */\r
-                               ulValue += ( *pucIPAddress - ( uint8_t ) '0' );\r
+                               ulValue += ( *pcIPAddress - ( uint8_t ) '0' );\r
 \r
                                /* Move to next character in the string. */\r
-                               pucIPAddress++;\r
+                               pcIPAddress++;\r
                        }\r
 \r
                        /* Check characters were read. */\r
-                       if( pucIPAddress == pucPointerOnEntering )\r
+                       if( pcIPAddress == pcPointerOnEntering )\r
                        {\r
                                xResult = pdFAIL;\r
                        }\r
@@ -1016,14 +1002,14 @@ xListItem *pxIterator, *pxReturn;
                                /* Check the next character is as expected. */\r
                                if( ulOctetNumber < ( socketMAX_IP_ADDRESS_OCTETS - 1 ) )\r
                                {\r
-                                       if( *pucIPAddress != ( uint8_t ) '.' )\r
+                                       if( *pcIPAddress != ( uint8_t ) '.' )\r
                                        {\r
                                                xResult = pdFAIL;\r
                                        }\r
                                        else\r
                                        {\r
                                                /* Move past the dot. */\r
-                                               pucIPAddress++;\r
+                                               pcIPAddress++;\r
                                        }\r
                                }\r
                        }\r
@@ -1035,7 +1021,7 @@ xListItem *pxIterator, *pxReturn;
                        }\r
                }\r
 \r
-               if( *pucIPAddress != ( uint8_t ) 0x00 )\r
+               if( *pcIPAddress != ( uint8_t ) 0x00 )\r
                {\r
                        /* Expected the end of the string. */\r
                        xResult = pdFAIL;\r