UINT16 WindowSize;\r
\r
//\r
- // Record the total received block number and the already acked block number.\r
+ // Record the total received and saved block number.\r
//\r
UINT64 TotalBlock;\r
+ \r
+ //\r
+ // Record the acked block number.\r
+ //\r
UINT64 AckedBlock;\r
\r
EFI_IPv6_ADDRESS ServerIp;\r
UINT16 Block;\r
UINT64 Start;\r
UINT32 DataLen;\r
+ UINT64 BlockCounter;\r
BOOLEAN Completed;\r
\r
Completed = FALSE;\r
// Remove this block number from the file hole. If Mtftp6RemoveBlockNum\r
// returns EFI_NOT_FOUND, the block has been saved, don't save it again.\r
// Note that : For bigger files, allowing the block counter to roll over\r
- // to accept transfers of unlimited size. So TotalBlock is memorised as\r
+ // to accept transfers of unlimited size. So BlockCounter is memorised as\r
// continuous block counter.\r
//\r
- Status = Mtftp6RemoveBlockNum (&Instance->BlkList, Block, Completed, &Instance->TotalBlock);\r
+ Status = Mtftp6RemoveBlockNum (&Instance->BlkList, Block, Completed, &BlockCounter);\r
\r
if (Status == EFI_NOT_FOUND) {\r
return EFI_SUCCESS;\r
\r
if (Token->Buffer != NULL) {\r
\r
- Start = MultU64x32 (Instance->TotalBlock - 1, Instance->BlkSize);\r
+ Start = MultU64x32 (BlockCounter - 1, Instance->BlkSize);\r
if (Start + DataLen <= Token->BufferSize) {\r
CopyMem ((UINT8 *) Token->Buffer + Start, Packet->Data.Data, DataLen);\r
//\r
ASSERT (Expected >= 0);\r
\r
//\r
- // If we are active and received an unexpected packet, transmit\r
+ // If we are active (Master) and received an unexpected packet, transmit\r
// the ACK for the block we received, then restart receiving the\r
- // expected one. If we are passive, save the block.\r
+ // expected one. If we are passive (Slave), save the block.\r
//\r
if (Instance->IsMaster && (Expected != BlockNum)) {\r
//\r
return Status;\r
}\r
\r
+ //\r
+ // Record the total received and saved block number.\r
+ //\r
+ Instance->TotalBlock ++;\r
+\r
//\r
// Reset the passive client's timer whenever it received a valid data packet.\r
//\r
\r
@param[in] Head The block range list to remove from.\r
@param[in] Num The block number to remove.\r
- @param[in] Completed Whether Num is the last block number\r
- @param[out] TotalBlock The continuous block number in all\r
+ @param[in] Completed Whether Num is the last block number.\r
+ @param[out] BlockCounter The continuous block counter instead of the value after roll-over.\r
\r
@retval EFI_NOT_FOUND The block number isn't in the block range list.\r
@retval EFI_SUCCESS The block number has been removed from the list.\r
IN LIST_ENTRY *Head,\r
IN UINT16 Num,\r
IN BOOLEAN Completed,\r
- OUT UINT64 *TotalBlock\r
+ OUT UINT64 *BlockCounter\r
)\r
{\r
MTFTP6_BLOCK_RANGE *Range;\r
// wrap to zero, because this is the simplest to implement. Here we choose\r
// this solution.\r
//\r
- *TotalBlock = Num;\r
+ *BlockCounter = Num;\r
\r
if (Range->Round > 0) {\r
- *TotalBlock += Range->Bound + MultU64x32 (Range->Round - 1, (UINT32)(Range->Bound + 1)) + 1;\r
+ *BlockCounter += Range->Bound + MultU64x32 (Range->Round - 1, (UINT32)(Range->Bound + 1)) + 1;\r
}\r
\r
if (Range->Start > Range->Bound) {\r
/** @file\r
Mtftp6 support functions declaration.\r
\r
- Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
\r
@param[in] Head The block range list to remove from.\r
@param[in] Num The block number to remove.\r
- @param[in] Completed Whether Num is the last block number\r
- @param[out] TotalBlock The continuous block number in all\r
+ @param[in] Completed Whether Num is the last block number.\r
+ @param[out] BlockCounter The continuous block counter instead of the value after roll-over.\r
\r
@retval EFI_NOT_FOUND The block number isn't in the block range list.\r
@retval EFI_SUCCESS The block number has been removed from the list.\r
IN LIST_ENTRY *Head,\r
IN UINT16 Num,\r
IN BOOLEAN Completed,\r
- OUT UINT64 *TotalBlock\r
+ OUT UINT64 *BlockCounter\r
);\r
\r
\r
{\r
UINT16 AckNum;\r
INTN Expected;\r
- UINT64 TotalBlock;\r
+ UINT64 BlockCounter;\r
\r
*IsCompleted = FALSE;\r
AckNum = NTOHS (Packet->Ack.Block[0]);\r
//\r
// Remove the acked block number, if this is the last block number,\r
// tell the Mtftp6WrqInput to finish the transfer. This is the last\r
- // block number if the block range are empty..\r
+ // block number if the block range are empty.\r
//\r
- Mtftp6RemoveBlockNum (&Instance->BlkList, AckNum, *IsCompleted, &TotalBlock);\r
+ Mtftp6RemoveBlockNum (&Instance->BlkList, AckNum, *IsCompleted, &BlockCounter);\r
\r
Expected = Mtftp6GetNextBlockNum (&Instance->BlkList);\r
\r