예제 #1
0
/**
  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;
}
예제 #2
0
파일: PxeBcMtftp.c 프로젝트: Kohrara/edk
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;
}
예제 #3
0
/**
  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;
}