From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id C394421E1DAE6 for ; Wed, 2 Aug 2017 19:01:11 -0700 (PDT) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Aug 2017 19:03:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,314,1498546800"; d="scan'208";a="135379585" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga006.fm.intel.com with ESMTP; 02 Aug 2017 19:03:22 -0700 Received: from fmsmsx112.amr.corp.intel.com (10.18.116.6) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 2 Aug 2017 19:03:22 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX112.amr.corp.intel.com (10.18.116.6) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 2 Aug 2017 19:03:21 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.116]) by SHSMSX104.ccr.corp.intel.com ([10.239.4.70]) with mapi id 14.03.0319.002; Thu, 3 Aug 2017 10:03:20 +0800 From: "Wu, Jiaxin" To: "Fu, Siyuan" , "edk2-devel@lists.01.org" CC: "Ye, Ting" Thread-Topic: [Patch] NetworkPkg: Display HTTP redirection info to the screen if need. Thread-Index: AQHTBoqZTx2Kfyl7DEmcIZ2FueGA46Jx65Tg Date: Thu, 3 Aug 2017 02:03:19 +0000 Message-ID: <895558F6EA4E3B41AC93A00D163B7274162FE72F@SHSMSX103.ccr.corp.intel.com> References: <20170727034356.6320-1-siyuan.fu@intel.com> In-Reply-To: <20170727034356.6320-1-siyuan.fu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNTIyNTVlZmYtZjE1Ny00YTY2LWE5YzAtZjg5N2NkNjBjZTRiIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX1BVQkxJQyJ9XX1dfSwiU3ViamVjdExhYmVscyI6W10sIlRNQ1ZlcnNpb24iOiIxNi41LjkuMyIsIlRydXN0ZWRMYWJlbEhhc2giOiIwR3J6cTJjMEY0VzdzSHV2SUJkUEFXc0RyTjFtMWs5dGhuaFB3YUk2SHRRPSJ9 x-ctpclassification: CTP_PUBLIC dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch] NetworkPkg: Display HTTP redirection info to the screen if need. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Aug 2017 02:01:12 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi siyuan, > + if (HttpHeader !=3D NULL) { > + Print (L"\n HTTP ERROR: Resource Redirected.\n New > Location: %a\n", HttpHeader->FieldValue); > + } How about we use HTTP WARNING instead of HTTP ERROR? Thanks, Jiaxin > -----Original Message----- > From: Fu, Siyuan > Sent: Thursday, July 27, 2017 11:44 AM > To: edk2-devel@lists.01.org > Cc: Ye, Ting ; Wu, Jiaxin > Subject: [Patch] NetworkPkg: Display HTTP redirection info to the screen = if > need. >=20 > HTTP defines a set of status code for redirecting a request to a differen= t URI > in Section 6.4 of RFC7231 and also RFC7583. This patch updates the HTTP b= oot > driver to display the redirection info to the screen so the user would ha= ve > chance to know new URI address of the HTTP boot image. >=20 > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Fu Siyuan > Cc: Ye Ting > Cc: Wu Jiaxin > --- > NetworkPkg/HttpBootDxe/HttpBootDxe.h | 4 ++++ > NetworkPkg/HttpBootDxe/HttpBootImpl.c | 21 ++++++++++++++++++++- > NetworkPkg/HttpBootDxe/HttpBootSupport.c | 25 > ++++++++++++++++++++++++- > NetworkPkg/HttpBootDxe/HttpBootSupport.h | 13 +++++++++++++ > 4 files changed, 61 insertions(+), 2 deletions(-) >=20 > diff --git a/NetworkPkg/HttpBootDxe/HttpBootDxe.h > b/NetworkPkg/HttpBootDxe/HttpBootDxe.h > index 8d89b3e..4632ee2 100644 > --- a/NetworkPkg/HttpBootDxe/HttpBootDxe.h > +++ b/NetworkPkg/HttpBootDxe/HttpBootDxe.h > @@ -179,6 +179,10 @@ struct _HTTP_BOOT_PRIVATE_DATA { > UINT32 Id; > EFI_HTTP_BOOT_CALLBACK_PROTOCOL *HttpBootCallback; > EFI_HTTP_BOOT_CALLBACK_PROTOCOL LoadFileCallback; > + > + // > + // Data for the default HTTP Boot callback protocol > + // > UINT64 FileSize; > UINT64 ReceivedSize; > UINT32 Percentage; > diff --git a/NetworkPkg/HttpBootDxe/HttpBootImpl.c > b/NetworkPkg/HttpBootDxe/HttpBootImpl.c > index 63cf396..5cfb0f4 100644 > --- a/NetworkPkg/HttpBootDxe/HttpBootImpl.c > +++ b/NetworkPkg/HttpBootDxe/HttpBootImpl.c > @@ -1,7 +1,7 @@ > /** @file > The implementation of EFI_LOAD_FILE_PROTOCOL for UEFI HTTP boot. >=20 > -Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
> +Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.
> (C) Copyright 2016 Hewlett Packard Enterprise Development LP
> This program and the accompanying materials are licensed and made > available under > the terms and conditions of the BSD License that accompanies this > distribution. > @@ -665,6 +665,25 @@ HttpBootCallback ( > case HttpBootHttpResponse: > if (Data !=3D NULL) { > HttpMessage =3D (EFI_HTTP_MESSAGE *) Data; > + > + if (HttpMessage->Data.Response !=3D NULL) { > + if (HttpBootIsHttpRedirectStatusCode (HttpMessage->Data.Response= - > >StatusCode)) { > + // > + // Server indicates the resource has been redirected to a diff= erent URL > + // according to the section 6.4 of RFC7231 and the RFC 7538. > + // Display the redirect information on the screen. > + // > + HttpHeader =3D HttpFindHeader ( > + HttpMessage->HeaderCount, > + HttpMessage->Headers, > + HTTP_HEADER_LOCATION > + ); > + if (HttpHeader !=3D NULL) { > + Print (L"\n HTTP ERROR: Resource Redirected.\n New > Location: %a\n", HttpHeader->FieldValue); > + } > + } > + } > + > HttpHeader =3D HttpFindHeader ( > HttpMessage->HeaderCount, > HttpMessage->Headers, > diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.c > b/NetworkPkg/HttpBootDxe/HttpBootSupport.c > index 5024f2e..6d4edfc 100644 > --- a/NetworkPkg/HttpBootDxe/HttpBootSupport.c > +++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.c > @@ -1034,7 +1034,8 @@ HttpIoRecvResponse ( > HttpIo->IsRxDone =3D FALSE; > } >=20 > - if (!EFI_ERROR (HttpIo->RspToken.Status) && HttpIo->Callback !=3D NULL= ) { > + if ((HttpIo->Callback !=3D NULL) && > + (HttpIo->RspToken.Status =3D=3D EFI_SUCCESS || HttpIo->RspToken.St= atus > =3D=3D EFI_HTTP_ERROR)) { > Status =3D HttpIo->Callback ( > HttpIoResponse, > HttpIo->RspToken.Message, > @@ -1319,3 +1320,25 @@ HttpBootRegisterRamDisk ( > return Status; > } >=20 > +/** > + Indicate if the HTTP status code indicates a redirection. > + > + @param[in] StatusCode HTTP status code from server. > + > + @return TRUE if it's redirection. > + > +**/ > +BOOLEAN > +HttpBootIsHttpRedirectStatusCode ( > + IN EFI_HTTP_STATUS_CODE StatusCode > + ) > +{ > + if (StatusCode =3D=3D HTTP_STATUS_301_MOVED_PERMANENTLY || > + StatusCode =3D=3D HTTP_STATUS_302_FOUND || > + StatusCode =3D=3D HTTP_STATUS_307_TEMPORARY_REDIRECT || > + StatusCode =3D=3D HTTP_STATUS_308_PERMANENT_REDIRECT) { > + return TRUE; > + } > + > + return FALSE; > +} > diff --git a/NetworkPkg/HttpBootDxe/HttpBootSupport.h > b/NetworkPkg/HttpBootDxe/HttpBootSupport.h > index f2b1846..c10b2cf 100644 > --- a/NetworkPkg/HttpBootDxe/HttpBootSupport.h > +++ b/NetworkPkg/HttpBootDxe/HttpBootSupport.h > @@ -445,4 +445,17 @@ HttpBootRegisterRamDisk ( > IN VOID *Buffer, > IN HTTP_BOOT_IMAGE_TYPE ImageType > ); > + > +/** > + Indicate if the HTTP status code indicates a redirection. > + > + @param[in] StatusCode HTTP status code from server. > + > + @return TRUE if it's redirection. > + > +**/ > +BOOLEAN > +HttpBootIsHttpRedirectStatusCode ( > + IN EFI_HTTP_STATUS_CODE StatusCode > + ); > #endif > -- > 1.9.5.msysgit.1