From: "Laszlo Ersek" <lersek@redhat.com>
To: devel@edk2.groups.io, vladimir.olovyannikov@broadcom.com
Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>,
Zhichao Gao <zhichao.gao@intel.com>,
Maciej Rabeda <maciej.rabeda@linux.intel.com>,
Jiaxin Wu <jiaxin.wu@intel.com>, Siyuan Fu <siyuan.fu@intel.com>,
Ray Ni <ray.ni@intel.com>, Liming Gao <liming.gao@intel.com>,
Nd <nd@arm.com>
Subject: Re: [edk2-devel] [PATCH v3 1/1] ShellPkg/DynamicCommand: add HttpDynamicCommand
Date: Thu, 23 Jul 2020 15:30:10 +0200 [thread overview]
Message-ID: <f11162e9-8b16-ffe8-bb8e-8df5778b10a4@redhat.com> (raw)
In-Reply-To: <20200713183137.9825-1-vladimir.olovyannikov@broadcom.com>
On 07/13/20 20:31, Vladimir Olovyannikov via groups.io wrote:
> 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.
>
> Signed-off-by: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com>
> Tested-By: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.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>
> ---
> .../DynamicCommand/HttpDynamicCommand/Http.c | 1700 +++++++++++++++++
> .../DynamicCommand/HttpDynamicCommand/Http.h | 84 +
> .../HttpDynamicCommand/Http.uni | 113 ++
> .../HttpDynamicCommand/HttpApp.c | 53 +
> .../HttpDynamicCommand/HttpApp.inf | 58 +
> .../HttpDynamicCommand/HttpDynamicCommand.c | 134 ++
> .../HttpDynamicCommand/HttpDynamicCommand.inf | 63 +
> ShellPkg/Include/Guid/ShellLibHiiGuid.h | 5 +
> ShellPkg/ShellPkg.dec | 1 +
> ShellPkg/ShellPkg.dsc | 5 +
> 10 files changed, 2216 insertions(+)
> create mode 100644 ShellPkg/DynamicCommand/HttpDynamicCommand/Http.c
> create mode 100644 ShellPkg/DynamicCommand/HttpDynamicCommand/Http.h
> create mode 100644 ShellPkg/DynamicCommand/HttpDynamicCommand/Http.uni
> create mode 100644 ShellPkg/DynamicCommand/HttpDynamicCommand/HttpApp.c
> create mode 100644 ShellPkg/DynamicCommand/HttpDynamicCommand/HttpApp.inf
> create mode 100644 ShellPkg/DynamicCommand/HttpDynamicCommand/HttpDynamicCommand.c
> create mode 100644 ShellPkg/DynamicCommand/HttpDynamicCommand/HttpDynamicCommand.inf
> diff --git a/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.uni b/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.uni
> new file mode 100644
> index 000000000000..efe50e25819c
> --- /dev/null
> +++ b/ShellPkg/DynamicCommand/HttpDynamicCommand/Http.uni
> @@ -0,0 +1,113 @@
> +// /**
> +//
> +// (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
> +// Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved. <BR>
> +// Copyright (c) 2020, Broadcom. All rights reserved.<BR>
> +// SPDX-License-Identifier: BSD-2-Clause-Patent
> +//
> +// Module Name:
> +//
> +// Http.uni
> +//
> +// Abstract:
> +//
> +// String definitions for UEFI Shell HTTP command
> +//
> +//
> +// **/
> +
> +/=#
> +
> +#langdef en-US "english"
> +
> +#string STR_GEN_TOO_MANY #language en-US "%H%s%N: Too many arguments. Try help http.\r\n"
> +#string STR_GEN_TOO_FEW #language en-US "%H%s%N: Too few arguments. Try help http.\r\n"
> +#string STR_GEN_PARAM_INV #language en-US "%H%s%N: Invalid argument - '%H%s%N'. Try help http.\r\n"
> +#string STR_GEN_PROBLEM #language en-US "%H%s%N: Unknown flag - '%H%s%N'. Try help http.\r\n"
> +#string STR_GEN_FILE_OPEN_FAIL #language en-US "%H%s%N: Cannot open file - '%H%s%N'\r\n"
> +#string STR_GEN_CRLF #language en-US "\r\n"
> +
> +#string STR_HTTP_ERR_NO_NIC #language en-US "No network interface card found.\r\n"
> +#string STR_HTTP_ERR_NIC_NAME #language en-US "Failed to get the name of the network interface card number %d - %r\r\n"
> +#string STR_HTTP_ERR_OPEN_PROTOCOL #language en-US "Unable to open HTTP protocol on '%H%s%N' - %r\r\n"
> +#string STR_HTTP_ERR_CONFIGURE #language en-US "Unable to configure HTTP protocol on '%H%s%N' - %r\r\n"
> +#string STR_HTTP_ERR_DOWNLOAD #language en-US "Unable to download the file '%H%s%N' on '%H%s%N' - %r\r\n"
> +#string STR_HTTP_ERR_WRITE #language en-US "Unable to write into file '%H%s%N' - %r\r\n"
> +#string STR_HTTP_ERR_NIC_NOT_FOUND #language en-US "Network Interface Card '%H%s%N' not found.\r\n"
> +#string STR_HTTP_ERR_STATUSCODE #language en-US "\r'%H%s%N' reports '%s' for '%H%s%N' \r\n"
> +#string STR_HTTP_DOWNLOADING #language en-US "Downloading '%H%s%N'\r\n"
> +
> +#string STR_GET_HELP_HTTP #language en-US ""
> +".TH http 0 "Download a file from HTTP server."\r\n"
> +".SH NAME\r\n"
> +"Download a file from HTTP server.\r\n"
> +".SH SYNOPSIS\r\n"
> +" \r\n"
> +"HTTP [-i interface] [-l port] [-t timeout] [-s size]\r\n"
> +" <URL> [localfilepath]\r\n"
> +".SH OPTIONS\r\n"
> +" \r\n"
> +" -i interface - Specifies an adapter name, i.e., eth0.\r\n"
> +" -l port - Specifies the local port number. Default value is 0\r\n"
> +" and the port number is automatically assigned.\r\n"
> +" -s size The size of the download buffer for a chunk, in bytes.\r\n"
> +" Default is 32K. Note that larger buffer does not imply\r\n"
> +" better speed.\r\n"
> +" -t timeout - The number of seconds to wait for completion of\r\n"
> +" requests and responses. Default is 0 which is 'automatic'.\r\n"
> +" %HURL%N\r\n"
> +" Two types of providing of URLs are supported:\r\n"
> +" 1. tftp like, where host and http_uri are separate parameters\r\n"
> +" (example: host /host_uri), and\r\n\"
> +" 2. wget-like, where host and host_uri is one parameter.\r\n"
> +" (example: host/host_uri)\r\n"
> +"\r\n"
> +" host - Specifies HTTP Server address.\r\n
> + Can be either IPv4 address or 'http (or https)://addr'\r\n
> + Can use addresses resolvable by DNS as well. \r\n
> + Port can be specified after ':' if needed. \r\n
> + By default port 80 is used.\r\n"
> +" http_uri - HTTP server URI to download the file.\r\n"
> +"\r\n"
> +" localfilepath - Local destination file path.\r\n"
> +".SH DESCRIPTION\r\n"
> +" \r\n"
> +"NOTES:\r\n"
> +" 1. The HTTP command allows geting of the file specified by its 'http_uri'\r\n"
> +" path from the HTTP server specified by its 'host' IPv4 address. If the\r\n"
> +" optional 'localfilepath' parameter is provided, the downloaded file is\r\n"
> +" stored locally using the provided file path. If the local file path is\r\n"
> +" not specified, the file is stored in the current directory using the file\r\n"
> +" server's name.\r\n"
> +" 2. Before using the HTTP command, the network interface intended to be\r\n"
> +" used to retrieve the file must be configured. This configuration may be\r\n"
> +" done by means of the 'ifconfig' command.\r\n"
> +" 3. If a network interface is defined with the '-i' option then only this\r\n"
> +" interface will be used to retrieve the remote file. Otherwise, all network\r\n"
> +" interfaces are tried in the order they have been discovered during the\r\n"
> +" DXE phase.\r\n"
> +".SH EXAMPLES\r\n"
> +" \r\n"
> +"EXAMPLES:\r\n"
> +" * To get the file "dir1/file1.dat" from the HTTP server 192.168.1.1, port 8080, and\r\n"
> +" store it as file2.dat in the current directory :\r\n"
> +" fs0:\> http 192.168.1.1:8080 dir1/file1.dat file2.dat\r\n"
> +" * To get the file /image.bin via HTTPS from server 192.168.1.1 at port 443 \r\n"
> +" (default HTTPS port), and store it in the current directory: \r\n"
> +" fs0:\> http https://192.168.1.1 image.bin\r\n"
> +" To get an index file from http://google.com and place it into the \r\n"
> +" current directory:\r\n"
> +" fs0:\> http google.com index.html"
> +".SH RETURNVALUES\r\n"
The line ending with "google.com index.html" lacks the "\r\n"
terminator. Because of that, the help text is printed as follows:
To get an index file from http://google.com and place it into the
current directory:
fs0:\> http google.com index.html.SH RETURNVALUES
Thanks
Laszlo
next prev parent reply other threads:[~2020-07-23 13:30 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-13 18:31 [PATCH v3 1/1] ShellPkg/DynamicCommand: add HttpDynamicCommand Vladimir Olovyannikov
2020-07-15 12:55 ` [edk2-devel] " Laszlo Ersek
2020-07-15 12:58 ` Laszlo Ersek
2020-07-15 17:09 ` Vladimir Olovyannikov
2020-07-16 12:19 ` Laszlo Ersek
2020-07-16 15:26 ` Samer El-Haj-Mahmoud
2020-07-16 17:14 ` Vladimir Olovyannikov
2020-07-16 17:07 ` Vladimir Olovyannikov
2020-07-22 19:37 ` Laszlo Ersek
2020-07-22 19:40 ` Laszlo Ersek
2020-07-23 13:30 ` Laszlo Ersek [this message]
2020-07-23 17:20 ` Vladimir Olovyannikov
2020-07-23 14:54 ` Laszlo Ersek
2020-07-23 15:02 ` Laszlo Ersek
2020-07-23 17:18 ` Vladimir Olovyannikov
2020-07-24 15:09 ` Laszlo Ersek
2020-07-24 17:50 ` Vladimir Olovyannikov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f11162e9-8b16-ffe8-bb8e-8df5778b10a4@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox