From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (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 8B61F208F7A59 for ; Thu, 3 Aug 2017 01:28:20 -0700 (PDT) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Aug 2017 01:30:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,314,1498546800"; d="scan'208";a="135498955" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga006.fm.intel.com with ESMTP; 03 Aug 2017 01:30:31 -0700 Received: from fmsmsx121.amr.corp.intel.com (10.18.125.36) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 3 Aug 2017 01:30:30 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx121.amr.corp.intel.com (10.18.125.36) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 3 Aug 2017 01:30:30 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.116]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.122]) with mapi id 14.03.0319.002; Thu, 3 Aug 2017 16:30:28 +0800 From: "Ye, Ting" To: "Fu, Siyuan" , "edk2-devel@lists.01.org" CC: "Wu, Jiaxin" Thread-Topic: [Patch] NetworkPkg: Display HTTP redirection info to the screen if need. Thread-Index: AQHTBoqZr6TbQpDIsE+KdDVIGaEG8KJyWF2A Date: Thu, 3 Aug 2017 08:30:28 +0000 Message-ID: References: <20170727034356.6320-1-siyuan.fu@intel.com> In-Reply-To: <20170727034356.6320-1-siyuan.fu@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: 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 08:28:20 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Ye Ting =20 -----Original Message----- From: Fu, Siyuan=20 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. HTTP defines a set of status code for redirecting a request to a different = URI in Section 6.4 of RFC7231 and also RFC7583. This patch updates the HTTP= boot driver to display the redirection info to the screen so the user woul= d have chance to know new URI address of the HTTP boot image. 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 ++++++++++++++++++++++++- N= etworkPkg/HttpBootDxe/HttpBootSupport.h | 13 +++++++++++++ 4 files changed, 61 insertions(+), 2 deletions(-) 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 pro= gram and the accompanying materials are licensed and made available under = the terms and conditions of the BSD License that accompanies this distribut= ion. =20 @@ -665,6 +665,25 @@ HttpBootCallback ( case HttpBootHttpResponse: if (Data !=3D NULL) { HttpMessage =3D (EFI_HTTP_MESSAGE *) Data; + =20 + if (HttpMessage->Data.Response !=3D NULL) { + if (HttpBootIsHttpRedirectStatusCode (HttpMessage->Data.Response->= StatusCode)) { + // + // Server indicates the resource has been redirected to a differ= ent 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); + } + } + } + =20 HttpHeader =3D HttpFindHeader ( HttpMessage->HeaderCount, HttpMessage->Headers, diff --git a/NetworkPkg/HttpBoo= tDxe/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) &&=20 + (HttpIo->RspToken.Status =3D=3D EFI_SUCCESS ||=20 + HttpIo->RspToken.Status =3D=3D EFI_HTTP_ERROR)) { Status =3D HttpIo->Callback ( HttpIoResponse, HttpIo->RspToken.Message, @@ -1319,3 +1320,25 @@ HttpBootRe= gisterRamDisk ( return Status; } =20 +/** + Indicate if the HTTP status code indicates a redirection. + =20 + @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/HttpBoot= Dxe/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. + =20 + @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