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_
 |