public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Vladimir Olovyannikov" <vladimir.olovyannikov@broadcom.com>
To: Laszlo Ersek <lersek@redhat.com>, devel@edk2.groups.io
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 10:20:43 -0700	[thread overview]
Message-ID: <f488c867d49ea9a022300b6e6d50bea7@mail.gmail.com> (raw)
In-Reply-To: <f11162e9-8b16-ffe8-bb8e-8df5778b10a4@redhat.com>

Hi Laszlo,
> -----Original Message-----
> From: Laszlo Ersek <lersek@redhat.com>
> Sent: Thursday, July 23, 2020 6:30 AM
> 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
>
> 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
>
Thank you for spotting this, I had it from day 0 as I usually did not use
"help http".
I will fix this in patch v4.
> Thanks
> Laszlo
Thank you,
Vladimir

  reply	other threads:[~2020-07-23 17:20 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
2020-07-23 17:20   ` Vladimir Olovyannikov [this message]
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=f488c867d49ea9a022300b6e6d50bea7@mail.gmail.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