/** This is a callback function when packets are received or transmitted in Mtftp driver. A callback function that is provided by the caller to intercept the EFI_MTFTP6_OPCODE_DATA or EFI_MTFTP4_OPCODE_DATA8 packets processed in the EFI_MTFTP4_PROTOCOL.ReadFile() function, and alternatively to intercept EFI_MTFTP4_OPCODE_OACK or EFI_MTFTP4_OPCODE_ERROR packets during a call to EFI_MTFTP4_PROTOCOL.ReadFile(), WriteFile() or ReadDirectory(). @param[in] This Pointer to EFI_MTFTP4_PROTOCOL. @param[in] Token Pointer to EFI_MTFTP4_TOKEN. @param[in] PacketLen Length of EFI_MTFTP4_PACKET. @param[in] Packet Pointer to EFI_MTFTP4_PACKET to be checked. @retval EFI_SUCCESS The current operation succeeeded. @retval EFI_ABORTED Abort the current transfer process. **/ EFI_STATUS EFIAPI PxeBcMtftp4CheckPacket ( IN EFI_MTFTP4_PROTOCOL *This, IN EFI_MTFTP4_TOKEN *Token, IN UINT16 PacketLen, IN EFI_MTFTP4_PACKET *Packet ) { PXEBC_PRIVATE_DATA *Private; EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *Callback; EFI_STATUS Status; Private = (PXEBC_PRIVATE_DATA *) Token->Context; Callback = Private->PxeBcCallback; Status = EFI_SUCCESS; if (Packet->OpCode == EFI_MTFTP4_OPCODE_ERROR) { // // Store the tftp error message into mode data and set the received flag. // Private->Mode.TftpErrorReceived = TRUE; Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode; AsciiStrnCpyS ( Private->Mode.TftpError.ErrorString, PXE_MTFTP_ERROR_STRING_LENGTH, (CHAR8 *) Packet->Error.ErrorMessage, PXE_MTFTP_ERROR_STRING_LENGTH - 1 ); Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = '\0'; } if (Callback != NULL) { // // Callback to user if has when received any tftp packet. // Status = Callback->Callback ( Callback, Private->Function, TRUE, PacketLen, (EFI_PXE_BASE_CODE_PACKET *) Packet ); if (Status != EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE) { // // User wants to abort current process if not EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE. // Status = EFI_ABORTED; } else { // // User wants to continue current process if EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE. // Status = EFI_SUCCESS; } } return Status; }
EFI_STATUS PxeBcCheckPacket ( IN EFI_MTFTP4_PROTOCOL *This, IN EFI_MTFTP4_TOKEN *Token, IN UINT16 PacketLen, IN EFI_MTFTP4_PACKET *Packet ) /*++ Routine Description: This is a callback function when packets received/transmitted in Mtftp driver. Arguments: This - Pointer to Mtftp protocol instance Token - Pointer to Mtftp token PacketLen - Length of Mtftp packet Packet - Pointer to Mtftp packet Returns: EFI_SUCCESS EFI_ABORTED --*/ { PXEBC_PRIVATE_DATA *Private; EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *Callback; EFI_STATUS Status; Private = (PXEBC_PRIVATE_DATA *) Token->Context; Callback = Private->PxeBcCallback; Status = EFI_SUCCESS; if (Callback != NULL) { Status = Callback->Callback ( Callback, Private->Function, TRUE, PacketLen, (EFI_PXE_BASE_CODE_PACKET *) Packet ); if (Status != EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE) { Status = EFI_ABORTED; } else { Status = EFI_SUCCESS; } } return Status; }
/** This is a callback function when packets received/transmitted in Mtftp driver. A callback function that is provided by the caller to intercept the EFI_MTFTP4_OPCODE_DATA or EFI_MTFTP4_OPCODE_DATA8 packets processed in the EFI_MTFTP4_PROTOCOL.ReadFile() function, and alternatively to intercept EFI_MTFTP4_OPCODE_OACK or EFI_MTFTP4_OPCODE_ERROR packets during a call to EFI_MTFTP4_PROTOCOL.ReadFile(), WriteFile() or ReadDirectory(). @param This Pointer to Mtftp protocol instance @param Token Pointer to Mtftp token @param PacketLen Length of Mtftp packet @param Packet Pointer to Mtftp packet @retval EFI_SUCCESS Operation sucess @retval EFI_ABORTED Abort transfer process **/ EFI_STATUS EFIAPI PxeBcCheckPacket ( IN EFI_MTFTP4_PROTOCOL *This, IN EFI_MTFTP4_TOKEN *Token, IN UINT16 PacketLen, IN EFI_MTFTP4_PACKET *Packet ) { PXEBC_PRIVATE_DATA *Private; EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *Callback; EFI_STATUS Status; Private = (PXEBC_PRIVATE_DATA *) Token->Context; Callback = Private->PxeBcCallback; Status = EFI_SUCCESS; if (Packet->OpCode == EFI_MTFTP4_OPCODE_ERROR) { Private->Mode.TftpErrorReceived = TRUE; Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode; AsciiStrnCpy (Private->Mode.TftpError.ErrorString, (CHAR8 *) Packet->Error.ErrorMessage, 127); } if (Callback != NULL) { Status = Callback->Callback ( Callback, Private->Function, TRUE, PacketLen, (EFI_PXE_BASE_CODE_PACKET *) Packet ); if (Status != EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE) { Status = EFI_ABORTED; } else { Status = EFI_SUCCESS; } } return Status; }