Introduce an http client utilizing EDK2 HTTP protocol, to allow fast image downloading from http/https servers. HTTP download speed is usually faster than tftp. The client is based on the same approach as tftp dynamic command, and uses the same UEFI Shell command line parameters. This makes it easy integrating http into existing UEFI Shell scripts. Note that to enable HTTP download, feature Pcd gEfiNetworkPkgTokenSpaceGuid.PcdAllowHttpConnections must be set to TRUE. BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2860 Signed-off-by: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Zhichao Gao <zhichao.gao@intel.com> Cc: Maciej Rabeda <maciej.rabeda@linux.intel.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Cc: Siyuan Fu <siyuan.fu@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Liming Gao <liming.gao@intel.com> Cc: Nd <nd@arm.com> Reviewed-by: Zhichao Gao <zhichao.gao@intel.com> Tested-by: Laszlo Ersek <lersek@redhat.com>
93 lines
2.5 KiB
C
93 lines
2.5 KiB
C
/** @file
|
|
Header file for 'http' command functions.
|
|
|
|
Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved. <BR>
|
|
Copyright (c) 2015, ARM Ltd. All rights reserved.<BR>
|
|
Copyright (c) 2020, Broadcom. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef _HTTP_H_
|
|
#define _HTTP_H_
|
|
|
|
#include <Uefi.h>
|
|
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/HiiLib.h>
|
|
#include <Library/HttpLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/NetLib.h>
|
|
#include <Library/PrintLib.h>
|
|
#include <Library/ShellLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
#include <Library/UefiHiiServicesLib.h>
|
|
#include <Library/UefiLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
|
|
#include <Protocol/HiiPackageList.h>
|
|
#include <Protocol/HttpUtilities.h>
|
|
#include <Protocol/ServiceBinding.h>
|
|
|
|
#define HTTP_APP_NAME L"http"
|
|
|
|
#define REQ_OK 0
|
|
#define REQ_NEED_REPEAT 1
|
|
|
|
//
|
|
// Download Flags.
|
|
//
|
|
#define DL_FLAG_TIME BIT0 // Show elapsed time.
|
|
#define DL_FLAG_KEEP_BAD BIT1 // Keep files even if download failed.
|
|
|
|
extern EFI_HII_HANDLE mHttpHiiHandle;
|
|
|
|
typedef struct {
|
|
UINTN ContentDownloaded;
|
|
UINTN ContentLength;
|
|
UINTN LastReportedNbOfBytes;
|
|
UINTN BufferSize;
|
|
UINTN Status;
|
|
UINTN Flags;
|
|
UINT8 *Buffer;
|
|
CHAR16 *ServerAddrAndProto;
|
|
CHAR16 *Uri;
|
|
EFI_HTTP_TOKEN ResponseToken;
|
|
EFI_HTTP_TOKEN RequestToken;
|
|
EFI_HTTP_PROTOCOL *Http;
|
|
EFI_HTTP_CONFIG_DATA HttpConfigData;
|
|
} HTTP_DOWNLOAD_CONTEXT;
|
|
|
|
/**
|
|
Function for 'http' command.
|
|
|
|
@param[in] ImageHandle The image handle.
|
|
@param[in] SystemTable The system table.
|
|
|
|
@retval SHELL_SUCCESS Command completed successfully.
|
|
@retval SHELL_INVALID_PARAMETER Command usage error.
|
|
@retval SHELL_ABORTED The user aborts the operation.
|
|
@retval value Unknown error.
|
|
**/
|
|
SHELL_STATUS
|
|
RunHttp (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
);
|
|
|
|
/**
|
|
Retrieve HII package list from ImageHandle and publish to HII database.
|
|
|
|
@param[in] ImageHandle The image handle of the process.
|
|
|
|
@retval HII handle.
|
|
**/
|
|
EFI_HII_HANDLE
|
|
InitializeHiiPackage (
|
|
IN EFI_HANDLE ImageHandle
|
|
);
|
|
#endif // _HTTP_H_
|