]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.c
Sync FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP with the version in GitHub at (23665258ca...
[freertos] / FreeRTOS-Plus / Source / FreeRTOS-Plus-TCP / FreeRTOS_Sockets.c
index 0bc5d82be5f0c73339039e995e06b8f778f1799a..e15834849ef2dd590f8671223d17e3d639a13dc8 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * FreeRTOS+TCP V2.0.11\r
+ * FreeRTOS+TCP V2.2.0\r
  * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
  *\r
  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
@@ -385,7 +385,7 @@ Socket_t xReturn;
                        }\r
                }\r
 \r
-               return ( SocketSet_t ) pxSocketSet;\r
+               return ( SocketSet_t ) pxSocketSet;\r
        }\r
 \r
 #endif /* ipconfigSUPPORT_SELECT_FUNCTION == 1 */\r
@@ -702,9 +702,11 @@ EventBits_t xEventBits = ( EventBits_t ) 0;
                }\r
                taskEXIT_CRITICAL();\r
 \r
-               /* The returned value is the data length, which may have been capped to\r
-               the receive buffer size. */\r
-               lReturn = ( int32_t ) pxNetworkBuffer->xDataLength;\r
+               /* The returned value is the length of the payload data, which is\r
+               calculated at the total packet size minus the headers.\r
+               The validity of `xDataLength` prvProcessIPPacket has been confirmed\r
+               in 'prvProcessIPPacket()'. */\r
+               lReturn = ( int32_t ) ( pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t ) );\r
 \r
                if( pxSourceAddress != NULL )\r
                {\r
@@ -833,7 +835,8 @@ FreeRTOS_Socket_t *pxSocket;
 \r
                        if( pxNetworkBuffer != NULL )\r
                        {\r
-                               pxNetworkBuffer->xDataLength = xTotalDataLength;\r
+                               /* xDataLength is the size of the total packet, including the Ethernet header. */\r
+                               pxNetworkBuffer->xDataLength = xTotalDataLength + sizeof( UDPPacket_t );\r
                                pxNetworkBuffer->usPort = pxDestinationAddress->sin_port;\r
                                pxNetworkBuffer->usBoundPort = ( uint16_t ) socketGET_SOCKET_PORT( pxSocket );\r
                                pxNetworkBuffer->ulIPAddress = pxDestinationAddress->sin_addr;\r
@@ -854,7 +857,7 @@ FreeRTOS_Socket_t *pxSocket;
                                        {\r
                                                if( ipconfigIS_VALID_PROG_ADDRESS( pxSocket->u.xUDP.pxHandleSent ) )\r
                                                {\r
-                                                       pxSocket->u.xUDP.pxHandleSent( (Socket_t *)pxSocket, xTotalDataLength );\r
+                                                       pxSocket->u.xUDP.pxHandleSent( ( Socket_t )pxSocket, xTotalDataLength );\r
                                                }\r
                                        }\r
                                        #endif /* ipconfigUSE_CALLBACKS */\r
@@ -1654,7 +1657,6 @@ const uint16_t usEphemeralPortCount =
 uint16_t usIterations = usEphemeralPortCount;\r
 uint32_t ulRandomSeed = 0;\r
 uint16_t usResult = 0;\r
-BaseType_t xGotZeroOnce = pdFALSE;\r
 const List_t *pxList;\r
 \r
 #if ipconfigUSE_TCP == 1\r
@@ -1675,21 +1677,10 @@ const List_t *pxList;
        point. */\r
        do\r
        {\r
-               /* Generate a random seed. */\r
-               ulRandomSeed = ipconfigRAND32( );\r
-\r
                /* Only proceed if the random number generator succeeded. */\r
-               if( 0 == ulRandomSeed )\r
+               if( xApplicationGetRandomNumber( &( ulRandomSeed ) ) == pdFALSE )\r
                {\r
-                       if( pdFALSE == xGotZeroOnce )\r
-                       {\r
-                               xGotZeroOnce = pdTRUE;\r
-                               continue;\r
-                       }\r
-                       else\r
-                       {\r
-                               break;\r
-                       }\r
+                       break;\r
                }\r
 \r
                /* Map the random to a candidate port. */\r
@@ -2413,8 +2404,8 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
                        xResult = -pdFREERTOS_ERRNO_ENOMEM;\r
                }\r
                else if( pxSocket->u.xTCP.ucTCPState == eCLOSED ||\r
-                                pxSocket->u.xTCP.ucTCPState == eCLOSE_WAIT ||\r
-                                pxSocket->u.xTCP.ucTCPState == eCLOSING )\r
+                 pxSocket->u.xTCP.ucTCPState == eCLOSE_WAIT ||\r
+                 pxSocket->u.xTCP.ucTCPState == eCLOSING )\r
                {\r
                        xResult = -pdFREERTOS_ERRNO_ENOTCONN;\r
                }\r
@@ -2453,25 +2444,25 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
        '*pxLength' will contain the number of bytes that may be written. */\r
        uint8_t *FreeRTOS_get_tx_head( Socket_t xSocket, BaseType_t *pxLength )\r
        {\r
-       uint8_t *pucReturn = NULL;\r
+    uint8_t *pucReturn = NULL;\r
        FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * ) xSocket;\r
        StreamBuffer_t *pxBuffer = NULL;\r
 \r
-               *pxLength = 0;\r
+        *pxLength = 0;\r
 \r
-               /* Confirm that this is a TCP socket before dereferencing structure\r
-               member pointers. */\r
-               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdTRUE )\r
-               {\r
-                       pxBuffer = pxSocket->u.xTCP.txStream;\r
-                       if( pxBuffer != NULL )\r
-                       {\r
-                       BaseType_t xSpace = ( BaseType_t )uxStreamBufferGetSpace( pxBuffer );\r
-                       BaseType_t xRemain = ( BaseType_t )( pxBuffer->LENGTH - pxBuffer->uxHead );\r
+        /* Confirm that this is a TCP socket before dereferencing structure\r
+        member pointers. */\r
+        if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdTRUE )\r
+        {\r
+            pxBuffer = pxSocket->u.xTCP.txStream;\r
+            if( pxBuffer != NULL )\r
+            {\r
+            BaseType_t xSpace = ( BaseType_t )uxStreamBufferGetSpace( pxBuffer );\r
+            BaseType_t xRemain = ( BaseType_t )( pxBuffer->LENGTH - pxBuffer->uxHead );\r
 \r
-                               *pxLength = FreeRTOS_min_BaseType( xSpace, xRemain );\r
-                               pucReturn = pxBuffer->ucArray + pxBuffer->uxHead;\r
-                       }\r
+                *pxLength = FreeRTOS_min_BaseType( xSpace, xRemain );\r
+                pucReturn = pxBuffer->ucArray + pxBuffer->uxHead;\r
+            }\r
                }\r
 \r
                return pucReturn;\r
@@ -2904,20 +2895,20 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
 \r
 #if( ipconfigUSE_TCP == 1 )\r
 \r
-       const struct xSTREAM_BUFFER *FreeRTOS_get_rx_buf( Socket_t xSocket )\r
-       {\r
-       FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * )xSocket;\r
-       struct xSTREAM_BUFFER *pxReturn = NULL;\r
+    const struct xSTREAM_BUFFER *FreeRTOS_get_rx_buf( Socket_t xSocket )\r
+    {\r
+    FreeRTOS_Socket_t *pxSocket = ( FreeRTOS_Socket_t * )xSocket;\r
+    struct xSTREAM_BUFFER *pxReturn = NULL;\r
 \r
-               /* Confirm that this is a TCP socket before dereferencing structure\r
-               member pointers. */\r
-               if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdTRUE )\r
-               {\r
-                       pxReturn = pxSocket->u.xTCP.rxStream;\r
-               }\r
+        /* Confirm that this is a TCP socket before dereferencing structure\r
+        member pointers. */\r
+        if( prvValidSocket( pxSocket, FREERTOS_IPPROTO_TCP, pdFALSE ) == pdTRUE )\r
+        {\r
+            pxReturn = pxSocket->u.xTCP.rxStream;\r
+        }\r
 \r
-               return pxReturn;\r
-       }\r
+        return pxReturn;\r
+    }\r
 \r
 #endif /* ipconfigUSE_TCP */\r
 /*-----------------------------------------------------------*/\r
@@ -3081,7 +3072,7 @@ void vSocketWakeUpUser( FreeRTOS_Socket_t *pxSocket )
                                                        break;\r
                                                }\r
 \r
-                                               pxSocket->u.xTCP.pxHandleReceive( (Socket_t *)pxSocket, ( void* )ucReadPtr, ( size_t ) ulCount );\r
+                                               pxSocket->u.xTCP.pxHandleReceive( ( Socket_t )pxSocket, ( void* )ucReadPtr, ( size_t ) ulCount );\r
                                                uxStreamBufferGet( pxStream, 0ul, NULL, ( size_t ) ulCount, pdFALSE );\r
                                        }\r
                                } else\r