} 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
\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
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
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
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
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
\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