/** @file\r
Support routines for Mtftp.\r
- \r
+\r
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
\r
\r
/**\r
- Initialize the block range for either RRQ or WRQ. \r
- \r
- RRQ and WRQ have different requirements for Start and End. \r
- For example, during start up, WRQ initializes its whole valid block range \r
- to [0, 0xffff]. This is bacause the server will send us a ACK0 to inform us \r
- to start the upload. When the client received ACK0, it will remove 0 from the \r
+ Initialize the block range for either RRQ or WRQ.\r
+\r
+ RRQ and WRQ have different requirements for Start and End.\r
+ For example, during start up, WRQ initializes its whole valid block range\r
+ to [0, 0xffff]. This is bacause the server will send us a ACK0 to inform us\r
+ to start the upload. When the client received ACK0, it will remove 0 from the\r
range, get the next block number, which is 1, then upload the BLOCK1. For RRQ\r
- without option negotiation, the server will directly send us the BLOCK1 in \r
- response to the client's RRQ. When received BLOCK1, the client will remove \r
- it from the block range and send an ACK. It also works if there is option \r
+ without option negotiation, the server will directly send us the BLOCK1 in\r
+ response to the client's RRQ. When received BLOCK1, the client will remove\r
+ it from the block range and send an ACK. It also works if there is option\r
negotiation.\r
\r
@param Head The block range head to initialize\r
\r
@param Head The block range head\r
\r
- @return The first valid block number, -1 if the block range is empty. \r
+ @return The first valid block number, -1 if the block range is empty.\r
\r
**/\r
INTN\r
\r
\r
/**\r
- Set the last block number of the block range list. \r
- \r
+ Set the last block number of the block range list.\r
+\r
It will remove all the blocks after the Last. MTFTP initialize the block range\r
- to the maximum possible range, such as [0, 0xffff] for WRQ. When it gets the \r
+ to the maximum possible range, such as [0, 0xffff] for WRQ. When it gets the\r
last block number, it will call this function to set the last block number.\r
\r
@param Head The block range list\r
@param Head The block range list to remove from\r
@param Num The block number to remove\r
@param Completed Whether Num is the last block number\r
- @param TotalBlock The continuous block number in all \r
+ @param TotalBlock The continuous block number in all\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
Range->Start++;\r
\r
//\r
- // Note that: RFC 1350 does not mention block counter roll-over, \r
- // but several TFTP hosts implement the roll-over be able to accept \r
- // transfers of unlimited size. There is no consensus, however, whether \r
- // the counter should wrap around to zero or to one. Many implementations \r
- // wrap to zero, because this is the simplest to implement. Here we choose \r
+ // Note that: RFC 1350 does not mention block counter roll-over,\r
+ // but several TFTP hosts implement the roll-over be able to accept\r
+ // transfers of unlimited size. There is no consensus, however, whether\r
+ // the counter should wrap around to zero or to one. Many implementations\r
+ // wrap to zero, because this is the simplest to implement. Here we choose\r
// this solution.\r
//\r
- *TotalBlock = Num;\r
- \r
+ *TotalBlock = Num;\r
+\r
if (Range->Round > 0) {\r
- *TotalBlock += Range->Bound + MultU64x32 ((UINTN) (Range->Round -1), (UINT32) (Range->Bound + 1)) + 1;\r
- }\r
+ *TotalBlock += Range->Bound + MultU64x32 ((UINTN) (Range->Round -1), (UINT32) (Range->Bound + 1)) + 1;\r
+ }\r
\r
if (Range->Start > Range->Bound) {\r
- Range->Start = 0;\r
- Range->Round ++;\r
+ Range->Start = 0;\r
+ Range->Round ++;\r
}\r
\r
if ((Range->Start > Range->End) || Completed) {\r
\r
Packet->OpCode = HTONS (Instance->Operation);\r
BufferLength -= sizeof (Packet->OpCode);\r
- \r
+\r
Cur = Packet->Rrq.Filename;\r
Status = AsciiStrCpyS ((CHAR8 *) Cur, BufferLength, (CHAR8 *) Token->Filename);\r
ASSERT_EFI_ERROR (Status);\r
for (Index = 0; Index < Token->OptionCount; ++Index) {\r
OptionStrLength = AsciiStrLen ((CHAR8 *) Options[Index].OptionStr);\r
ValueStrLength = AsciiStrLen ((CHAR8 *) Options[Index].ValueStr);\r
- \r
+\r
Status = AsciiStrCpyS ((CHAR8 *) Cur, BufferLength, (CHAR8 *) Options[Index].OptionStr);\r
ASSERT_EFI_ERROR (Status);\r
BufferLength -= (UINT32) (OptionStrLength + 1);\r
Cur += OptionStrLength + 1;\r
- \r
+\r
Status = AsciiStrCpyS ((CHAR8 *) Cur, BufferLength, (CHAR8 *) Options[Index].ValueStr);\r
ASSERT_EFI_ERROR (Status);\r
BufferLength -= (UINT32) (ValueStrLength + 1);\r
Cur += ValueStrLength + 1;\r
- \r
+\r
}\r
\r
return Mtftp4SendPacket (Instance, Nbuf);\r
Build then send an error message.\r
\r
@param Instance The MTFTP session\r
- @param ErrCode The error code \r
+ @param ErrCode The error code\r
@param ErrInfo The error message\r
\r
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory for the error packet\r
\r
/**\r
The callback function called when the packet is transmitted.\r
- \r
+\r
It simply frees the packet.\r
\r
@param Packet The transmitted (or failed to) packet\r
\r
\r
/**\r
- Send the packet for the instance. \r
- \r
- It will first save a reference to the packet for later retransmission. \r
- Then determine the destination port, listen port for requests, and connected \r
+ Send the packet for the instance.\r
+\r
+ It will first save a reference to the packet for later retransmission.\r
+ Then determine the destination port, listen port for requests, and connected\r
port for others. At last, send the packet out.\r
\r
@param Instance The Mtftp instance\r
ASSERT (Buffer != NULL);\r
OpCode = NTOHS (*(UINT16 *)Buffer);\r
\r
- if ((OpCode == EFI_MTFTP4_OPCODE_RRQ) || \r
+ if ((OpCode == EFI_MTFTP4_OPCODE_RRQ) ||\r
(OpCode == EFI_MTFTP4_OPCODE_DIR) ||\r
(OpCode == EFI_MTFTP4_OPCODE_WRQ)) {\r
UdpPoint.RemotePort = Instance->ListeningPort;\r
if (!Instance->HasTimeout) {\r
continue;\r
}\r
- \r
+\r
Instance->HasTimeout = FALSE;\r
\r
//\r