]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_DNS.c
Update TCP/IP tack to latest form Git.
[freertos] / FreeRTOS-Plus / Source / FreeRTOS-Plus-TCP / FreeRTOS_DNS.c
index 925cec929b9c46e50fc70b7b86c558fcca2e4263..465bdd3f149ff1a58ae1199f62e545d0f7064a6f 100644 (file)
@@ -151,6 +151,11 @@ static uint32_t prvGetHostByName( const char *pcHostName, TickType_t xIdentifier
        } DNSCacheRow_t;\r
 \r
        static DNSCacheRow_t xDNSCache[ ipconfigDNS_CACHE_ENTRIES ];\r
+\r
+       void FreeRTOS_dnsclear()\r
+       {\r
+               memset( xDNSCache, 0x0, sizeof( xDNSCache ) );\r
+       }\r
 #endif /* ipconfigUSE_DNS_CACHE == 1 */\r
 \r
 #if( ipconfigUSE_LLMNR == 1 )\r
@@ -809,24 +814,16 @@ static uint8_t *prvSkipNameField( uint8_t *pucByte, size_t xSourceLen )
 \r
 uint32_t ulDNSHandlePacket( NetworkBufferDescriptor_t *pxNetworkBuffer )\r
 {\r
-uint8_t *pucUDPPayloadBuffer;\r
-size_t xPlayloadBufferLength;\r
 DNSMessage_t *pxDNSMessageHeader;\r
 \r
-       xPlayloadBufferLength = pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t );\r
-       if ( xPlayloadBufferLength < sizeof( DNSMessage_t ) )\r
+       if( pxNetworkBuffer->xDataLength >= sizeof( DNSMessage_t ) )\r
        {\r
-               return pdFAIL;\r
-       }\r
-\r
-       pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );\r
-       pxDNSMessageHeader = ( DNSMessage_t * ) pucUDPPayloadBuffer;\r
+               pxDNSMessageHeader = \r
+                       ( DNSMessage_t * )( pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t ) );\r
 \r
-       if( pxNetworkBuffer->xDataLength > sizeof( UDPPacket_t ) )\r
-       {\r
-               prvParseDNSReply( pucUDPPayloadBuffer,\r
-                       xPlayloadBufferLength,\r
-                       ( uint32_t )pxDNSMessageHeader->usIdentifier );\r
+               prvParseDNSReply( ( uint8_t * )pxDNSMessageHeader,\r
+                                                 pxNetworkBuffer->xDataLength,\r
+                                                 ( uint32_t )pxDNSMessageHeader->usIdentifier );\r
        }\r
 \r
        /* The packet was not consumed. */\r
@@ -841,12 +838,11 @@ DNSMessage_t *pxDNSMessageHeader;
        UDPPacket_t *pxUDPPacket = ( UDPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer;\r
        uint8_t *pucUDPPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer + sizeof( UDPPacket_t );\r
 \r
-               if( pxNetworkBuffer->xDataLength > sizeof( UDPPacket_t) )\r
-               {\r
-                       prvTreatNBNS( pucUDPPayloadBuffer,\r
-                                                 pxNetworkBuffer->xDataLength - sizeof( UDPPacket_t ),\r
-                                                 pxUDPPacket->xIPHeader.ulSourceIPAddress );\r
-               }\r
+               /* The network buffer data length has already been set to the \r
+               length of the UDP payload. */\r
+               prvTreatNBNS( pucUDPPayloadBuffer,\r
+                                         pxNetworkBuffer->xDataLength,\r
+                                         pxUDPPacket->xIPHeader.ulSourceIPAddress );\r
 \r
                /* The packet was not consumed. */\r
                return pdFAIL;\r
@@ -1312,6 +1308,9 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
                pxUDPHeader->usLength                      = FreeRTOS_htons( lNetLength + ipSIZE_OF_UDP_HEADER );\r
                vFlip_16( pxUDPPacket->xUDPHeader.usSourcePort, pxUDPPacket->xUDPHeader.usDestinationPort );\r
 \r
+               /* Important: tell NIC driver how many bytes must be sent */\r
+               pxNetworkBuffer->xDataLength = ( size_t ) ( lNetLength + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_UDP_HEADER + ipSIZE_OF_ETH_HEADER );\r
+\r
                #if( ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM == 0 )\r
                {\r
                        /* calculate the IP header checksum */\r
@@ -1320,13 +1319,10 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
                        pxIPHeader->usHeaderChecksum       = ~FreeRTOS_htons( pxIPHeader->usHeaderChecksum );\r
 \r
                        /* calculate the UDP checksum for outgoing package */\r
-                       usGenerateProtocolChecksum( ( uint8_t* ) pxUDPPacket, lNetLength, pdTRUE );\r
+                       usGenerateProtocolChecksum( ( uint8_t* ) pxUDPPacket, pxNetworkBuffer->xDataLength, pdTRUE );\r
                }\r
                #endif\r
 \r
-               /* Important: tell NIC driver how many bytes must be sent */\r
-               pxNetworkBuffer->xDataLength = ( size_t ) ( lNetLength + ipSIZE_OF_IPv4_HEADER + ipSIZE_OF_UDP_HEADER + ipSIZE_OF_ETH_HEADER );\r
-\r
                /* This function will fill in the eth addresses and send the packet */\r
                vReturnEthernetFrame( pxNetworkBuffer, pdFALSE );\r
        }\r
@@ -1342,13 +1338,15 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
        BaseType_t xFound = pdFALSE;\r
        uint32_t ulCurrentTimeSeconds = ( xTaskGetTickCount() / portTICK_PERIOD_MS ) / 1000;\r
        static BaseType_t xFreeEntry = 0;\r
+       configASSERT(pcName);\r
+\r
 \r
                /* For each entry in the DNS cache table. */\r
                for( x = 0; x < ipconfigDNS_CACHE_ENTRIES; x++ )\r
                {\r
                        if( xDNSCache[ x ].pcName[ 0 ] == 0 )\r
                        {\r
-                               break;\r
+                               continue;\r
                        }\r
 \r
                        if( 0 == strcmp( xDNSCache[ x ].pcName, pcName ) )\r
@@ -1419,6 +1417,6 @@ TickType_t xTimeoutTime = pdMS_TO_TICKS( 200 );
 \r
 /* Provide access to private members for testing. */\r
 #ifdef AMAZON_FREERTOS_ENABLE_UNIT_TESTS\r
-       #include "aws_freertos_tcp_test_access_dns_define.h"\r
+       #include "iot_freertos_tcp_test_access_dns_define.h"\r
 #endif\r
 \r