\r
**/\r
\r
-\r
#include "Mtftp4Impl.h"\r
\r
-\r
/**\r
The packet process callback for MTFTP download.\r
\r
VOID\r
EFIAPI\r
Mtftp4RrqInput (\r
- IN NET_BUF *UdpPacket,\r
- IN UDP_END_POINT *EndPoint,\r
- IN EFI_STATUS IoStatus,\r
- IN VOID *Context\r
+ IN NET_BUF *UdpPacket,\r
+ IN UDP_END_POINT *EndPoint,\r
+ IN EFI_STATUS IoStatus,\r
+ IN VOID *Context\r
);\r
\r
-\r
/**\r
Start the MTFTP session to download.\r
\r
**/\r
EFI_STATUS\r
Mtftp4RrqStart (\r
- IN MTFTP4_PROTOCOL *Instance,\r
- IN UINT16 Operation\r
+ IN MTFTP4_PROTOCOL *Instance,\r
+ IN UINT16 Operation\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
//\r
// The valid block number range are [1, 0xffff]. For example:\r
return UdpIoRecvDatagram (Instance->UnicastPort, Mtftp4RrqInput, Instance, 0);\r
}\r
\r
-\r
/**\r
Build and send a ACK packet for the download session.\r
\r
**/\r
EFI_STATUS\r
Mtftp4RrqSendAck (\r
- IN MTFTP4_PROTOCOL *Instance,\r
- IN UINT16 BlkNo\r
+ IN MTFTP4_PROTOCOL *Instance,\r
+ IN UINT16 BlkNo\r
)\r
{\r
- EFI_MTFTP4_PACKET *Ack;\r
- NET_BUF *Packet;\r
- EFI_STATUS Status;\r
+ EFI_MTFTP4_PACKET *Ack;\r
+ NET_BUF *Packet;\r
+ EFI_STATUS Status;\r
\r
Status = EFI_SUCCESS;\r
\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- Ack = (EFI_MTFTP4_PACKET *) NetbufAllocSpace (\r
- Packet,\r
- sizeof (EFI_MTFTP4_ACK_HEADER),\r
- FALSE\r
- );\r
+ Ack = (EFI_MTFTP4_PACKET *)NetbufAllocSpace (\r
+ Packet,\r
+ sizeof (EFI_MTFTP4_ACK_HEADER),\r
+ FALSE\r
+ );\r
ASSERT (Ack != NULL);\r
\r
Ack->Ack.OpCode = HTONS (EFI_MTFTP4_OPCODE_ACK);\r
return Status;\r
}\r
\r
-\r
/**\r
Deliver the received data block to the user, which can be saved\r
in the user provide buffer or through the CheckPacket callback.\r
**/\r
EFI_STATUS\r
Mtftp4RrqSaveBlock (\r
- IN OUT MTFTP4_PROTOCOL *Instance,\r
- IN EFI_MTFTP4_PACKET *Packet,\r
- IN UINT32 Len\r
+ IN OUT MTFTP4_PROTOCOL *Instance,\r
+ IN EFI_MTFTP4_PACKET *Packet,\r
+ IN UINT32 Len\r
)\r
{\r
- EFI_MTFTP4_TOKEN *Token;\r
- EFI_STATUS Status;\r
- UINT16 Block;\r
- UINT64 Start;\r
- UINT32 DataLen;\r
- UINT64 BlockCounter;\r
- BOOLEAN Completed;\r
+ EFI_MTFTP4_TOKEN *Token;\r
+ EFI_STATUS Status;\r
+ UINT16 Block;\r
+ UINT64 Start;\r
+ UINT32 DataLen;\r
+ UINT64 BlockCounter;\r
+ BOOLEAN Completed;\r
\r
Completed = FALSE;\r
Token = Instance->Token;\r
// This is the last block, save the block no\r
//\r
if (DataLen < Instance->BlkSize) {\r
- Completed = TRUE;\r
+ Completed = TRUE;\r
Instance->LastBlock = Block;\r
Mtftp4SetLastBlockNum (&Instance->Blocks, Block);\r
}\r
}\r
\r
if (Token->CheckPacket != NULL) {\r
- Status = Token->CheckPacket (&Instance->Mtftp4, Token, (UINT16) Len, Packet);\r
+ Status = Token->CheckPacket (&Instance->Mtftp4, Token, (UINT16)Len, Packet);\r
\r
if (EFI_ERROR (Status)) {\r
Mtftp4SendError (\r
Instance,\r
EFI_MTFTP4_ERRORCODE_ILLEGAL_OPERATION,\r
- (UINT8 *) "User aborted download"\r
+ (UINT8 *)"User aborted download"\r
);\r
\r
return EFI_ABORTED;\r
}\r
\r
if (Token->Buffer != NULL) {\r
- Start = MultU64x32 (BlockCounter - 1, Instance->BlkSize);\r
+ Start = MultU64x32 (BlockCounter - 1, Instance->BlkSize);\r
\r
if (Start + DataLen <= Token->BufferSize) {\r
- CopyMem ((UINT8 *) Token->Buffer + Start, Packet->Data.Data, DataLen);\r
+ CopyMem ((UINT8 *)Token->Buffer + Start, Packet->Data.Data, DataLen);\r
\r
//\r
// Update the file size when received the last block\r
if ((Instance->LastBlock == Block) && Completed) {\r
Token->BufferSize = Start + DataLen;\r
}\r
-\r
} else if (Instance->LastBlock != 0) {\r
//\r
// Don't save the data if the buffer is too small, return\r
Mtftp4SendError (\r
Instance,\r
EFI_MTFTP4_ERRORCODE_DISK_FULL,\r
- (UINT8 *) "User provided memory block is too small"\r
+ (UINT8 *)"User provided memory block is too small"\r
);\r
\r
return EFI_BUFFER_TOO_SMALL;\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Function to process the received data packets.\r
\r
**/\r
EFI_STATUS\r
Mtftp4RrqHandleData (\r
- IN MTFTP4_PROTOCOL *Instance,\r
- IN EFI_MTFTP4_PACKET *Packet,\r
- IN UINT32 Len,\r
- IN BOOLEAN Multicast,\r
- OUT BOOLEAN *Completed\r
+ IN MTFTP4_PROTOCOL *Instance,\r
+ IN EFI_MTFTP4_PACKET *Packet,\r
+ IN UINT32 Len,\r
+ IN BOOLEAN Multicast,\r
+ OUT BOOLEAN *Completed\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT16 BlockNum;\r
- INTN Expected;\r
+ EFI_STATUS Status;\r
+ UINT16 BlockNum;\r
+ INTN Expected;\r
\r
- *Completed = FALSE;\r
- Status = EFI_SUCCESS;\r
- BlockNum = NTOHS (Packet->Data.Block);\r
- Expected = Mtftp4GetNextBlockNum (&Instance->Blocks);\r
+ *Completed = FALSE;\r
+ Status = EFI_SUCCESS;\r
+ BlockNum = NTOHS (Packet->Data.Block);\r
+ Expected = Mtftp4GetNextBlockNum (&Instance->Blocks);\r
\r
ASSERT (Expected >= 0);\r
\r
//\r
// If Expected is 0, (UINT16) (Expected - 1) is also the expected Ack number (65535).\r
//\r
- return Mtftp4RrqSendAck (Instance, (UINT16) (Expected - 1));\r
+ return Mtftp4RrqSendAck (Instance, (UINT16)(Expected - 1));\r
}\r
\r
Status = Mtftp4RrqSaveBlock (Instance, Packet, Len);\r
//\r
// Record the total received and saved block number.\r
//\r
- Instance->TotalBlock ++;\r
+ Instance->TotalBlock++;\r
\r
//\r
// Reset the passive client's timer whenever it received a\r
//\r
BlockNum = Instance->LastBlock;\r
*Completed = TRUE;\r
-\r
} else {\r
- BlockNum = (UINT16) (Expected - 1);\r
+ BlockNum = (UINT16)(Expected - 1);\r
}\r
\r
- if (Instance->WindowSize == (Instance->TotalBlock - Instance->AckedBlock) || Expected < 0) {\r
+ if ((Instance->WindowSize == (Instance->TotalBlock - Instance->AckedBlock)) || (Expected < 0)) {\r
Status = Mtftp4RrqSendAck (Instance, BlockNum);\r
}\r
-\r
}\r
\r
return Status;\r
}\r
\r
-\r
/**\r
Validate whether the options received in the server's OACK packet is valid.\r
\r
**/\r
BOOLEAN\r
Mtftp4RrqOackValid (\r
- IN MTFTP4_PROTOCOL *This,\r
- IN MTFTP4_OPTION *Reply,\r
- IN MTFTP4_OPTION *Request\r
+ IN MTFTP4_PROTOCOL *This,\r
+ IN MTFTP4_OPTION *Reply,\r
+ IN MTFTP4_OPTION *Request\r
)\r
{\r
-\r
//\r
// It is invalid for server to return options we don't request\r
//\r
// Server can only specify a smaller block size and window size to be used and\r
// return the timeout matches that requested.\r
//\r
- if ((((Reply->Exist & MTFTP4_BLKSIZE_EXIST) != 0)&& (Reply->BlkSize > Request->BlkSize)) ||\r
- (((Reply->Exist & MTFTP4_WINDOWSIZE_EXIST) != 0)&& (Reply->WindowSize > Request->WindowSize)) ||\r
+ if ((((Reply->Exist & MTFTP4_BLKSIZE_EXIST) != 0) && (Reply->BlkSize > Request->BlkSize)) ||\r
+ (((Reply->Exist & MTFTP4_WINDOWSIZE_EXIST) != 0) && (Reply->WindowSize > Request->WindowSize)) ||\r
(((Reply->Exist & MTFTP4_TIMEOUT_EXIST) != 0) && (Reply->Timeout != Request->Timeout))\r
- ) {\r
+ )\r
+ {\r
return FALSE;\r
}\r
\r
return TRUE;\r
}\r
\r
-\r
/**\r
Configure a UDP IO port to receive the multicast.\r
\r
EFI_STATUS\r
EFIAPI\r
Mtftp4RrqConfigMcastPort (\r
- IN UDP_IO *McastIo,\r
- IN VOID *Context\r
+ IN UDP_IO *McastIo,\r
+ IN VOID *Context\r
)\r
{\r
- MTFTP4_PROTOCOL *Instance;\r
- EFI_MTFTP4_CONFIG_DATA *Config;\r
- EFI_UDP4_CONFIG_DATA UdpConfig;\r
- EFI_IPv4_ADDRESS Group;\r
- EFI_STATUS Status;\r
- IP4_ADDR Ip;\r
+ MTFTP4_PROTOCOL *Instance;\r
+ EFI_MTFTP4_CONFIG_DATA *Config;\r
+ EFI_UDP4_CONFIG_DATA UdpConfig;\r
+ EFI_IPv4_ADDRESS Group;\r
+ EFI_STATUS Status;\r
+ IP4_ADDR Ip;\r
\r
- Instance = (MTFTP4_PROTOCOL *) Context;\r
- Config = &Instance->Config;\r
+ Instance = (MTFTP4_PROTOCOL *)Context;\r
+ Config = &Instance->Config;\r
\r
UdpConfig.AcceptBroadcast = FALSE;\r
UdpConfig.AcceptPromiscuous = FALSE;\r
UdpConfig.UseDefaultAddress = Config->UseDefaultSetting;\r
IP4_COPY_ADDRESS (&UdpConfig.StationAddress, &Config->StationIp);\r
IP4_COPY_ADDRESS (&UdpConfig.SubnetMask, &Config->SubnetMask);\r
- UdpConfig.StationPort = Instance->McastPort;\r
- UdpConfig.RemotePort = 0;\r
+ UdpConfig.StationPort = Instance->McastPort;\r
+ UdpConfig.RemotePort = 0;\r
\r
Ip = HTONL (Instance->ServerIp);\r
IP4_COPY_ADDRESS (&UdpConfig.RemoteAddress, &Ip);\r
}\r
\r
if (!Config->UseDefaultSetting &&\r
- !EFI_IP4_EQUAL (&mZeroIp4Addr, &Config->GatewayIp)) {\r
+ !EFI_IP4_EQUAL (&mZeroIp4Addr, &Config->GatewayIp))\r
+ {\r
//\r
// The station IP address is manually configured and the Gateway IP is not 0.\r
// Add the default route for this UDP instance.\r
return McastIo->Protocol.Udp4->Groups (McastIo->Protocol.Udp4, TRUE, &Group);\r
}\r
\r
-\r
/**\r
Function to process the OACK.\r
\r
**/\r
EFI_STATUS\r
Mtftp4RrqHandleOack (\r
- IN OUT MTFTP4_PROTOCOL *Instance,\r
- IN EFI_MTFTP4_PACKET *Packet,\r
- IN UINT32 Len,\r
- IN BOOLEAN Multicast,\r
- OUT BOOLEAN *Completed\r
+ IN OUT MTFTP4_PROTOCOL *Instance,\r
+ IN EFI_MTFTP4_PACKET *Packet,\r
+ IN UINT32 Len,\r
+ IN BOOLEAN Multicast,\r
+ OUT BOOLEAN *Completed\r
)\r
{\r
- MTFTP4_OPTION Reply;\r
- EFI_STATUS Status;\r
- INTN Expected;\r
- EFI_UDP4_PROTOCOL *Udp4;\r
+ MTFTP4_OPTION Reply;\r
+ EFI_STATUS Status;\r
+ INTN Expected;\r
+ EFI_UDP4_PROTOCOL *Udp4;\r
\r
*Completed = FALSE;\r
\r
Status = Mtftp4ParseOptionOack (Packet, Len, Instance->Operation, &Reply);\r
\r
if (EFI_ERROR (Status) ||\r
- !Mtftp4RrqOackValid (Instance, &Reply, &Instance->RequestOption)) {\r
+ !Mtftp4RrqOackValid (Instance, &Reply, &Instance->RequestOption))\r
+ {\r
//\r
// Don't send an ERROR packet if the error is EFI_OUT_OF_RESOURCES.\r
//\r
Mtftp4SendError (\r
Instance,\r
EFI_MTFTP4_ERRORCODE_ILLEGAL_OPERATION,\r
- (UINT8 *) "Malformatted OACK packet"\r
+ (UINT8 *)"Malformatted OACK packet"\r
);\r
}\r
\r
}\r
\r
if ((Reply.Exist & MTFTP4_MCAST_EXIST) != 0) {\r
-\r
//\r
// Save the multicast info. Always update the Master, only update the\r
// multicast IP address, block size, window size, timeout at the first time.\r
Mtftp4SendError (\r
Instance,\r
EFI_MTFTP4_ERRORCODE_ILLEGAL_OPERATION,\r
- (UINT8 *) "Illegal multicast setting"\r
+ (UINT8 *)"Illegal multicast setting"\r
);\r
\r
return EFI_TFTP_ERROR;\r
//\r
// Create a UDP child then start receive the multicast from it.\r
//\r
- Instance->McastIp = Reply.McastIp;\r
- Instance->McastPort = Reply.McastPort;\r
+ Instance->McastIp = Reply.McastIp;\r
+ Instance->McastPort = Reply.McastPort;\r
if (Instance->McastUdpPort == NULL) {\r
Instance->McastUdpPort = UdpIoCreateIo (\r
Instance->Service->Controller,\r
Status = gBS->OpenProtocol (\r
Instance->McastUdpPort->UdpHandle,\r
&gEfiUdp4ProtocolGuid,\r
- (VOID **) &Udp4,\r
+ (VOID **)&Udp4,\r
Instance->Service->Image,\r
Instance->Handle,\r
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
}\r
}\r
\r
-\r
if (Instance->McastUdpPort == NULL) {\r
return EFI_DEVICE_ERROR;\r
}\r
Mtftp4SendError (\r
Instance,\r
EFI_MTFTP4_ERRORCODE_ACCESS_VIOLATION,\r
- (UINT8 *) "Failed to create socket to receive multicast packet"\r
+ (UINT8 *)"Failed to create socket to receive multicast packet"\r
);\r
\r
return Status;\r
Instance->Timeout = Reply.Timeout;\r
}\r
}\r
-\r
} else {\r
Instance->Master = TRUE;\r
\r
// Send an ACK to (Expected - 1) which is 0 for unicast download,\r
// or tell the server we want to receive the Expected block.\r
//\r
- return Mtftp4RrqSendAck (Instance, (UINT16) (Expected - 1));\r
+ return Mtftp4RrqSendAck (Instance, (UINT16)(Expected - 1));\r
}\r
\r
-\r
/**\r
The packet process callback for MTFTP download.\r
\r
VOID\r
EFIAPI\r
Mtftp4RrqInput (\r
- IN NET_BUF *UdpPacket,\r
- IN UDP_END_POINT *EndPoint,\r
- IN EFI_STATUS IoStatus,\r
- IN VOID *Context\r
+ IN NET_BUF *UdpPacket,\r
+ IN UDP_END_POINT *EndPoint,\r
+ IN EFI_STATUS IoStatus,\r
+ IN VOID *Context\r
)\r
{\r
- MTFTP4_PROTOCOL *Instance;\r
- EFI_MTFTP4_PACKET *Packet;\r
- BOOLEAN Completed;\r
- BOOLEAN Multicast;\r
- EFI_STATUS Status;\r
- UINT16 Opcode;\r
- UINT32 Len;\r
-\r
- Instance = (MTFTP4_PROTOCOL *) Context;\r
+ MTFTP4_PROTOCOL *Instance;\r
+ EFI_MTFTP4_PACKET *Packet;\r
+ BOOLEAN Completed;\r
+ BOOLEAN Multicast;\r
+ EFI_STATUS Status;\r
+ UINT16 Opcode;\r
+ UINT32 Len;\r
+\r
+ Instance = (MTFTP4_PROTOCOL *)Context;\r
NET_CHECK_SIGNATURE (Instance, MTFTP4_PROTOCOL_SIGNATURE);\r
\r
Status = EFI_SUCCESS;\r
//\r
// Find the port this packet is from to restart receive correctly.\r
//\r
- Multicast = (BOOLEAN) (EndPoint->LocalAddr.Addr[0] == Instance->McastIp);\r
+ Multicast = (BOOLEAN)(EndPoint->LocalAddr.Addr[0] == Instance->McastIp);\r
\r
if (UdpPacket->TotalSize < MTFTP4_OPCODE_LEN) {\r
goto ON_EXIT;\r
goto ON_EXIT;\r
}\r
\r
- NetbufCopy (UdpPacket, 0, Len, (UINT8 *) Packet);\r
-\r
+ NetbufCopy (UdpPacket, 0, Len, (UINT8 *)Packet);\r
} else {\r
- Packet = (EFI_MTFTP4_PACKET *) NetbufGetByte (UdpPacket, 0, NULL);\r
+ Packet = (EFI_MTFTP4_PACKET *)NetbufGetByte (UdpPacket, 0, NULL);\r
ASSERT (Packet != NULL);\r
}\r
\r
// if CheckPacket returns an EFI_ERROR code.\r
//\r
if ((Instance->Token->CheckPacket != NULL) &&\r
- ((Opcode == EFI_MTFTP4_OPCODE_OACK) || (Opcode == EFI_MTFTP4_OPCODE_ERROR))) {\r
-\r
+ ((Opcode == EFI_MTFTP4_OPCODE_OACK) || (Opcode == EFI_MTFTP4_OPCODE_ERROR)))\r
+ {\r
Status = Instance->Token->CheckPacket (\r
&Instance->Mtftp4,\r
Instance->Token,\r
- (UINT16) Len,\r
+ (UINT16)Len,\r
Packet\r
);\r
\r
Mtftp4SendError (\r
Instance,\r
EFI_MTFTP4_ERRORCODE_REQUEST_DENIED,\r
- (UINT8 *) "User aborted the transfer"\r
+ (UINT8 *)"User aborted the transfer"\r
);\r
}\r
\r
}\r
\r
switch (Opcode) {\r
- case EFI_MTFTP4_OPCODE_DATA:\r
- if ((Len > (UINT32) (MTFTP4_DATA_HEAD_LEN + Instance->BlkSize)) ||\r
- (Len < (UINT32) MTFTP4_DATA_HEAD_LEN)) {\r
- goto ON_EXIT;\r
- }\r
+ case EFI_MTFTP4_OPCODE_DATA:\r
+ if ((Len > (UINT32)(MTFTP4_DATA_HEAD_LEN + Instance->BlkSize)) ||\r
+ (Len < (UINT32)MTFTP4_DATA_HEAD_LEN))\r
+ {\r
+ goto ON_EXIT;\r
+ }\r
\r
- Status = Mtftp4RrqHandleData (Instance, Packet, Len, Multicast, &Completed);\r
- break;\r
+ Status = Mtftp4RrqHandleData (Instance, Packet, Len, Multicast, &Completed);\r
+ break;\r
\r
- case EFI_MTFTP4_OPCODE_OACK:\r
- if (Multicast || (Len <= MTFTP4_OPCODE_LEN)) {\r
- goto ON_EXIT;\r
- }\r
+ case EFI_MTFTP4_OPCODE_OACK:\r
+ if (Multicast || (Len <= MTFTP4_OPCODE_LEN)) {\r
+ goto ON_EXIT;\r
+ }\r
\r
- Status = Mtftp4RrqHandleOack (Instance, Packet, Len, Multicast, &Completed);\r
- break;\r
+ Status = Mtftp4RrqHandleOack (Instance, Packet, Len, Multicast, &Completed);\r
+ break;\r
\r
- case EFI_MTFTP4_OPCODE_ERROR:\r
- Status = EFI_TFTP_ERROR;\r
- break;\r
+ case EFI_MTFTP4_OPCODE_ERROR:\r
+ Status = EFI_TFTP_ERROR;\r
+ break;\r
\r
- default:\r
- break;\r
+ default:\r
+ break;\r
}\r
\r
ON_EXIT:\r