Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion source/FreeRTOS_TCP_IP.c
Original file line number Diff line number Diff line change
Expand Up @@ -882,7 +882,7 @@
pxSocket->u.xTCP.xTCPWindow.xSize.ulRxWindowLength ) != pdFALSE ) )
{
/* Send a challenge ACK. */
( void ) prvTCPSendChallengeAck( pxNetworkBuffer );
( void ) prvTCPSendChallengeAck( pxNetworkBuffer, pxSocket->u.xTCP.xTCPWindow.rx.ulCurrentSequenceNumber );
}
else
{
Expand Down
11 changes: 10 additions & 1 deletion source/FreeRTOS_TCP_Transmission.c
Original file line number Diff line number Diff line change
Expand Up @@ -1352,11 +1352,20 @@
* unexpected but still within the window.
*
* @param[in] pxNetworkBuffer The network buffer descriptor with the packet.
* @param[in] ulCurrentSequenceNumber The current sequence number of the connection.
*
* @return Returns the value back from #prvTCPSendSpecialPacketHelper.
*/
BaseType_t prvTCPSendChallengeAck( NetworkBufferDescriptor_t * pxNetworkBuffer )
BaseType_t prvTCPSendChallengeAck( NetworkBufferDescriptor_t * pxNetworkBuffer,
uint32_t ulCurrentSequenceNumber )
{
ProtocolHeaders_t * pxProtocolHeaders = ( ( ProtocolHeaders_t * )
&( pxNetworkBuffer->pucEthernetBuffer[ ipSIZE_OF_ETH_HEADER + uxIPHeaderSizePacket( pxNetworkBuffer ) ] ) );

/* Correct the sequence number to avoid an endless ACK/RST sequence. When sending the
* same number again the next RST will not match as well. */
pxProtocolHeaders->xTCPHeader.ulSequenceNumber = FreeRTOS_htonl( ulCurrentSequenceNumber );

return prvTCPSendSpecialPacketHelper( pxNetworkBuffer, tcpTCP_FLAG_ACK );
}
/*-----------------------------------------------------------*/
Expand Down
3 changes: 2 additions & 1 deletion source/include/FreeRTOS_TCP_Transmission.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ BaseType_t prvSendData( FreeRTOS_Socket_t * pxSocket,
* case #3. In summary, an RST was received with a sequence number that is
* unexpected but still within the window.
*/
BaseType_t prvTCPSendChallengeAck( NetworkBufferDescriptor_t * pxNetworkBuffer );
BaseType_t prvTCPSendChallengeAck( NetworkBufferDescriptor_t * pxNetworkBuffer,
uint32_t ulCurrentSequenceNumber );

/*
* Reply to a peer with the RST flag on, in case a packet can not be handled.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2610,7 +2610,7 @@ void test_prvTCPSendChallengeAck( void )
eARPGetCacheEntry_ExpectAnyArgsAndReturn( eResolutionCacheHit );
eARPGetCacheEntry_ReturnThruPtr_ppxEndPoint( &pxEndPoint );

Return = prvTCPSendChallengeAck( pxNetworkBuffer );
Return = prvTCPSendChallengeAck( pxNetworkBuffer, 0x3333 );
TEST_ASSERT_EQUAL( pdFALSE, Return );
TEST_ASSERT_EQUAL( 1, NetworkInterfaceOutputFunction_Stub_Called );
TEST_ASSERT_EQUAL( tcpTCP_FLAG_ACK, pxTCPPacket->xTCPHeader.ucTCPFlags );
Expand Down
Loading