From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 6F1E69414AC for ; Thu, 29 Feb 2024 08:53:31 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=pRit9FfcBpNH2K3wvQFvpdF0T0UI4qAt2hcEP13WbIs=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:Received-SPF:From:To:CC:Subject:Date:Message-ID:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding:Content-Type; s=20140610; t=1709196810; v=1; b=AkHryWvq+to4IgpnAyQP8XAdR7tNBQaAuDdONlGVCoziWVT8+AJCDRbxZmgVTBPcpWq54D1T XJFT7Cn9AjtZjKAJ5gysWUVmIe5yZgFhcQsPqXOWUZw7c/miGShLiCJdfMw3KNbIQV6s3oylQpJ 4P9QaP2dgEvBNz1LWLw+GtjI= X-Received: by 127.0.0.2 with SMTP id Id98YY7687511xR628RyEObE; Thu, 29 Feb 2024 00:53:30 -0800 X-Received: from NAM11-DM6-obe.outbound.protection.outlook.com (NAM11-DM6-obe.outbound.protection.outlook.com [40.107.223.77]) by mx.groups.io with SMTP id smtpd.web11.19910.1709196809469928211 for ; Thu, 29 Feb 2024 00:53:29 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WvYUfJ24zNo2Rv5g9o/8VOD0VuBBnxUcPTDSv07OPO2mgC9gbO9FpSqkwhE0HojeXn+KU0+qN8U920Lp7zrwOyl53vZ3YqqHAF4jJh07MILdjvbgDoK2I6sBkOztcknJEbEyq7JIMOvM2kGtlM6pHeWetZJyp4Rs8vY5eMf5rvHj/K/0U7P1+Y18LWIKAy4IFTvxUulxnzOJ1xgm/FMnvunk/LcWK4DUc39GH3wxEw929UvIMd7rjOLcovy+EW+YYBb8hJZgdsSJX0jVLwDcMyJ9BrEj+EsdjwEoizklL+eRR8ui20UIofl37+wrudfNqpwsnWpqo9YmrCF8S/61bA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ODRz2t6qspUDb+fRtPbsWOZrA7CrgBhRD2adTkRiFrk=; b=E9HZBoof0y0m5emQv3YLKMlGUGtYR+vOO4fH2iwvx/Q7WgdcQsTcnhLFrkOO8TxpXUJeoZibmZ99waLKAVbh/s0w1MT7zqK1Kv4oj4/GKUm6K0PPcUawF8qCOtpquLY6AqoeDOczL2mRBenSjmUcJXATDAnuPbZMqzMfXfCrp1WdPXwyI18WAoiHJ8Kg1ekwjJRvF+LFvUIy0hUhzZGgJsv12swvTU5EEhrPw7x7+qpKPtZvaWZNXuIvar4mTJR/Sc5QaTSKlESYo5+s9PhbUsaOYDoVBkLRbCDxSgyjqm653z4KBFieqMqjNSGi8ZTLPeOasv8wJXDl32TcNoVdsg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) X-Received: from BL1PR13CA0427.namprd13.prod.outlook.com (2603:10b6:208:2c3::12) by SN7PR12MB6768.namprd12.prod.outlook.com (2603:10b6:806:268::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.41; Thu, 29 Feb 2024 08:53:24 +0000 X-Received: from MN1PEPF0000F0E4.namprd04.prod.outlook.com (2603:10b6:208:2c3:cafe::c6) by BL1PR13CA0427.outlook.office365.com (2603:10b6:208:2c3::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.13 via Frontend Transport; Thu, 29 Feb 2024 08:53:24 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C X-Received: from mail.nvidia.com (216.228.117.160) by MN1PEPF0000F0E4.mail.protection.outlook.com (10.167.242.42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.25 via Frontend Transport; Thu, 29 Feb 2024 08:53:24 +0000 X-Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Thu, 29 Feb 2024 00:53:09 -0800 X-Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.12; Thu, 29 Feb 2024 00:53:08 -0800 X-Received: from NV-CL38DL3.nvidia.com (10.127.8.13) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.1258.12 via Frontend Transport; Thu, 29 Feb 2024 00:53:07 -0800 From: "Nickle Wang via groups.io" To: CC: Abner Chang , Igor Kulchytskyy Subject: [edk2-devel] [edk2-redfish-client][PATCH 02/13] RedfishClientPkg: remove RedfishHttpCacheLib Date: Thu, 29 Feb 2024 16:53:06 +0800 Message-ID: <20240229085306.111930-1-nicklew@nvidia.com> MIME-Version: 1.0 X-NVConfidentiality: public X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN1PEPF0000F0E4:EE_|SN7PR12MB6768:EE_ X-MS-Office365-Filtering-Correlation-Id: 1fadf872-74ff-4618-dff5-08dc3903e36d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: mnstgDB7js3o2qJ+2CbULS5tbS55aC2cfGb06b6WuNfPAaYFtgK5IU6ZVo0c0/a/2CsmOZmdM4ZXNQKSqkN2Gw0lQn1vrdLzCZRgnqz4hhzTiP2u8GxrQzMUgXFHfTnTjNT8UTbOpftY9alItcVU0jqAOlhzNymZLpC4ZbIDdnpFLqE6AnsHz8nsdBPeyMLgixPN3YPaoI7F17mY9b7z4coXfAGWfq0irEEXU1QYTJNA3aAhd9vjxtfqGxii+prv4xW7lxLyI1fwgAiRDhSxBYQqK88elvVFrYrdzoPQUck1zBi/wD5DdebiEDiWdtVli0Ru2fEeif4VpPOHFEH0+7Ml5kwWHAItOJHnUyumPzdV9aNKMaxPfopas2oIMG/fVD0V8bemrFcnH41V8jnMeOd5EMgo3sxmXsZwk+vTRXDqv5pqBhSyDMii2liU788oEm/FRvmnQJTEY6Vfsw6RZwgJ5OtfHXSZMqK4a8fRIR9rc7MObFQX4Zl1bgWmV0037TXLr18vCbVHjrknvKPAVscwxKpHoMM59TLQ7OUOdo0zqs6nNiOeBLAhjFtoj1zf9f5RNwA/mgfSkPEeDX8bh3yRnrV9O4ayJA2lGe3G2yrQa9jc+hrmvSlepnQEAxBIteFYsblHwZIjiBiFBD6JtHnah0X91MvqvwRlWUFAkhqiNVaWvRXSaEV/pmETQDuwqj4hwFA+qCeTUEPjBCwpbfPW1HevBnF17s7jDptoS210LrhWYnXQkXxZpknSB0Bi X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Feb 2024 08:53:24.0112 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1fadf872-74ff-4618-dff5-08dc3903e36d X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MN1PEPF0000F0E4.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB6768 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,nicklew@nvidia.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 7QuAvACcQwrXPPOeWV1LcT5fx7686176AA= Content-Transfer-Encoding: quoted-printable Content-Type: text/plain X-Spam-Flag: yes X-Spam-Level: ************ X-GND-Spam-Score: 190 X-GND-Status: SPAM Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=AkHryWvq; dmarc=pass (policy=none) header.from=groups.io; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io Remove RedfishHttpCacheLib and use EDK2 RedfishHttpLib. Signed-off-by: Nickle Wang Cc: Abner Chang Cc: Igor Kulchytskyy --- RedfishClientPkg/RedfishClientPkg.dec | 1 - RedfishClientPkg/RedfishClientLibs.dsc.inc | 2 +- RedfishClientPkg/RedfishClientPkg.dsc | 1 - .../RedfishHttpCacheLib.inf | 48 -- .../Include/Library/RedfishHttpCacheLib.h | 59 -- .../RedfishHttpCacheLibInternal.h | 63 -- .../RedfishHttpCacheLib/RedfishHttpCacheLib.c | 774 ------------------ 7 files changed, 1 insertion(+), 947 deletions(-) delete mode 100644 RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHtt= pCacheLib.inf delete mode 100644 RedfishClientPkg/Include/Library/RedfishHttpCacheLib.h delete mode 100644 RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHtt= pCacheLibInternal.h delete mode 100644 RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHtt= pCacheLib.c diff --git a/RedfishClientPkg/RedfishClientPkg.dec b/RedfishClientPkg/Redfi= shClientPkg.dec index ce3b6d975..aa018d714 100644 --- a/RedfishClientPkg/RedfishClientPkg.dec +++ b/RedfishClientPkg/RedfishClientPkg.dec @@ -27,7 +27,6 @@ EdkIIRedfishResourceConfigLib|Include/Library/EdkIIRedfishResourceConfig= Lib.h RedfishEventLib|Include/Library/RedfishEventLib.h RedfishVersionLib|Include/Library/RedfishVersionLib.h - RedfishHttpCacheLib|Include/Library/RedfishHttpCacheLib.h =20 [LibraryClasses.Common.Private] ## @libraryclass Redfish Helper Library diff --git a/RedfishClientPkg/RedfishClientLibs.dsc.inc b/RedfishClientPkg/= RedfishClientLibs.dsc.inc index 9c7889d2b..8ec27baa3 100644 --- a/RedfishClientPkg/RedfishClientLibs.dsc.inc +++ b/RedfishClientPkg/RedfishClientLibs.dsc.inc @@ -42,4 +42,4 @@ RedfishVersionLib|RedfishClientPkg/Library/RedfishVersionLib/RedfishVers= ionLib.inf RedfishAddendumLib|RedfishClientPkg/Library/RedfishAddendumLib/RedfishAd= dendumLib.inf RedfishDebugLib|RedfishPkg/Library/RedfishDebugLib/RedfishDebugLib.inf - RedfishHttpCacheLib|RedfishClientPkg/Library/RedfishHttpCacheLib/Redfish= HttpCacheLib.inf + RedfishHttpLib|RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf diff --git a/RedfishClientPkg/RedfishClientPkg.dsc b/RedfishClientPkg/Redfi= shClientPkg.dsc index 0e3ef1ac9..f37bf93ac 100644 --- a/RedfishClientPkg/RedfishClientPkg.dsc +++ b/RedfishClientPkg/RedfishClientPkg.dsc @@ -61,6 +61,5 @@ RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityL= ib.inf RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.inf RedfishClientPkg/Library/RedfishAddendumLib/RedfishAddendumLib.inf - RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheLib.inf =20 !include RedfishClientPkg/RedfishClient.dsc.inc diff --git a/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheL= ib.inf b/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheLib.i= nf deleted file mode 100644 index e76c8b65e..000000000 --- a/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheLib.inf +++ /dev/null @@ -1,48 +0,0 @@ -## @file -# Redfish HTTP cache library helps Redfish application to get Redfish res= ource -# from Redfish service with cache mechanism enabled. -# -# Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights re= served. -# -# SPDX-License-Identifier: BSD-2-Clause-Patent -# -## - -[Defines] - INF_VERSION =3D 0x00010006 - BASE_NAME =3D RedfishHttpCacheLib - FILE_GUID =3D 21F8FEEC-023C-451D-824D-823058FD9481 - MODULE_TYPE =3D DXE_DRIVER - VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D RedfishHttpCacheLib| DXE_DRIVER UEFI_= DRIVER - CONSTRUCTOR =3D RedfishHttpCacheConstructor - DESTRUCTOR =3D RedfishHttpCacheDestructor - -# -# VALID_ARCHITECTURES =3D IA32 X64 EBC -# - -[Sources] - RedfishHttpCacheLibInternal.h - RedfishHttpCacheLib.c - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - RedfishPkg/RedfishPkg.dec - RedfishClientPkg/RedfishClientPkg.dec - -[LibraryClasses] - BaseLib - DebugLib - UefiBootServicesTableLib - MemoryAllocationLib - RedfishLib - UefiLib - RedfishDebugLib - ReportStatusCodeLib - PrintLib - -[depex] - TRUE - diff --git a/RedfishClientPkg/Include/Library/RedfishHttpCacheLib.h b/Redfi= shClientPkg/Include/Library/RedfishHttpCacheLib.h deleted file mode 100644 index 1277b9814..000000000 --- a/RedfishClientPkg/Include/Library/RedfishHttpCacheLib.h +++ /dev/null @@ -1,59 +0,0 @@ -/** @file - This file defines the Redfish HTTP cache library interface. - - Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights res= erved. - - SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef REDFISH_HTTP_CACHE_LIB_H_ -#define REDFISH_HTTP_CACHE_LIB_H_ - -#include -#include - -/** - Get redfish resource from given resource URI with cache mechanism - supported. It's caller's responsibility to Response by calling - RedfishFreeResponse (). - - @param[in] Service Redfish service instance to make query. - @param[in] Uri Target resource URI. - @param[out] Response HTTP response from redfish service. - @param[in] UseCache If it is TRUE, this function will search for - cache first. If it is FALSE, this function - will query Redfish URI directly. - - @retval EFI_SUCCESS Resrouce is returned successfully. - @retval Others Errors occur. - -**/ -EFI_STATUS -RedfishHttpGetResource ( - IN REDFISH_SERVICE Service, - IN EFI_STRING Uri, - OUT REDFISH_RESPONSE *Response, - IN BOOLEAN UseCache - ); - -/** - Reset the cached data specified by given URI. When response data - returned by RedfishHttpResetResource() is modified, the response - data can not be used by other caller. Application calls this - function to make this data to be stale data and - RedfishHttpResetResource() will get latest data from remote server - again. - - @param[in] Uri Target resource URI. - - @retval EFI_SUCCESS Resrouce is reset successfully. - @retval Others Errors occur. - -**/ -EFI_STATUS -RedfishHttpResetResource ( - IN EFI_STRING Uri - ); - -#endif diff --git a/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheL= ibInternal.h b/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCach= eLibInternal.h deleted file mode 100644 index 2549335d8..000000000 --- a/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheLibInter= nal.h +++ /dev/null @@ -1,63 +0,0 @@ -/** @file - This file defines the Redfish HTTP cache library internal headers. - - Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved= . - - SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef REDFISH_HTTP_CACHE_INTERNAL_LIB_H_ -#define REDFISH_HTTP_CACHE_INTERNAL_LIB_H_ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define REDFISH_HTTP_CACHE_LIST_SIZE 0x0F -#define REDFISH_HTTP_GET_RETRY_MAX 0x0F -#define REDFISH_HTTP_RETRY_WAIT (2 * 1000000U) ///< 1 second -#define REDFISH_ERROR_MSG_MAX 128 -#define REDFISH_HTTP_ERROR_REPORT "Redfish HTTP failure(0x%x): %a" -#define REDFISH_HTTP_CACHE_DEBUG DEBUG_VERBOSE -#define REDFISH_HTTP_CACHE_DEBUG_DUMP DEBUG_VERBOSE - -/// -/// Definition of REDFISH_HTTP_CACHE_DATA -/// -typedef struct { - LIST_ENTRY List; - EFI_STRING Uri; - UINTN HitCount; - REDFISH_RESPONSE *Response; -} REDFISH_HTTP_CACHE_DATA; - -#define REDFISH_HTTP_CACHE_FROM_LIST(a) BASE_CR (a, REDFISH_HTTP_CACHE_DA= TA, List) - -/// -/// Definition of REDFISH_HTTP_CACHE_LIST -/// -typedef struct { - LIST_ENTRY Head; - UINTN Count; - UINTN Capacity; -} REDFISH_HTTP_CACHE_LIST; - -/// -/// Definition of REDFISH_HTTP_CACHE_PRIVATE -/// -typedef struct { - REDFISH_HTTP_CACHE_LIST CacheList; -} REDFISH_HTTP_CACHE_PRIVATE; - -#endif diff --git a/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheL= ib.c b/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheLib.c deleted file mode 100644 index be31706e6..000000000 --- a/RedfishClientPkg/Library/RedfishHttpCacheLib/RedfishHttpCacheLib.c +++ /dev/null @@ -1,774 +0,0 @@ -/** @file - Redfish HTTP cache library helps Redfish application to get Redfish reso= urce - from Redfish service with cache mechanism enabled. - - Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights res= erved. - - SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#include "RedfishHttpCacheLibInternal.h" - -REDFISH_HTTP_CACHE_PRIVATE *mRedfishHttpCachePrivate =3D NULL; - -/** - This function copy the data in SrcResponse to DstResponse. - - @param[in] SrcResponse Source Response to copy. - @param[out] DstResponse Destination Response. - - @retval EFI_SUCCESS Response is copied successfully. - @retval Others Error occurs. - -**/ -EFI_STATUS -CopyRedfishResponse ( - IN REDFISH_RESPONSE *SrcResponse, - OUT REDFISH_RESPONSE *DstResponse - ) -{ - EDKII_JSON_VALUE JsonValue; - REDFISH_SERVICE Service; - UINTN Index; - - if ((SrcResponse =3D=3D NULL) || (DstResponse =3D=3D NULL)) { - return EFI_INVALID_PARAMETER; - } - - if (SrcResponse =3D=3D DstResponse) { - return EFI_SUCCESS; - } - - // - // Status code - // - if (SrcResponse->StatusCode !=3D NULL) { - DstResponse->StatusCode =3D AllocateCopyPool (sizeof (EFI_HTTP_STATUS_= CODE), SrcResponse->StatusCode); - if (DstResponse->StatusCode =3D=3D NULL) { - goto ON_ERROR; - } - } - - // - // Header - // - if ((SrcResponse->HeaderCount > 0) && (SrcResponse->Headers !=3D NULL)) = { - DstResponse->HeaderCount =3D 0; - DstResponse->Headers =3D AllocateZeroPool (sizeof (EFI_HTTP_HEADER= ) * SrcResponse->HeaderCount); - if (DstResponse->Headers =3D=3D NULL) { - goto ON_ERROR; - } - - for (Index =3D 0; Index < SrcResponse->HeaderCount; Index++) { - DstResponse->Headers[Index].FieldName =3D AllocateCopyPool (AsciiStr= Size (SrcResponse->Headers[Index].FieldName), SrcResponse->Headers[Index].F= ieldName); - if (DstResponse->Headers[Index].FieldName =3D=3D NULL) { - goto ON_ERROR; - } - - DstResponse->Headers[Index].FieldValue =3D AllocateCopyPool (AsciiSt= rSize (SrcResponse->Headers[Index].FieldValue), SrcResponse->Headers[Index]= .FieldValue); - if (DstResponse->Headers[Index].FieldValue =3D=3D NULL) { - goto ON_ERROR; - } - - DstResponse->HeaderCount +=3D 1; - } - } - - // - // Payload - // - if (SrcResponse->Payload !=3D NULL) { - Service =3D RedfishServiceInPayload (SrcResponse->Payload= ); - JsonValue =3D RedfishJsonInPayload (SrcResponse->Payload); - DstResponse->Payload =3D RedfishCreatePayload (JsonValue, Service); - if (DstResponse->Payload =3D=3D NULL) { - goto ON_ERROR; - } - } - - return EFI_SUCCESS; - -ON_ERROR: - - RedfishFreeResponse ( - DstResponse->StatusCode, - DstResponse->HeaderCount, - DstResponse->Headers, - DstResponse->Payload - ); - - return EFI_OUT_OF_RESOURCES; -} - -/** - This function clone input response and return to caller - - @param[in] Response Response to clone. - - @retval REDFISH_RESPONSE * Response is cloned. - @retval NULL Errors occur. - -**/ -REDFISH_RESPONSE * -CloneRedfishResponse ( - IN REDFISH_RESPONSE *Response - ) -{ - EFI_STATUS Status; - REDFISH_RESPONSE *NewResponse; - - if (Response =3D=3D NULL) { - return NULL; - } - - NewResponse =3D AllocateZeroPool (sizeof (REDFISH_RESPONSE)); - if (NewResponse =3D=3D NULL) { - return NULL; - } - - Status =3D CopyRedfishResponse (Response, NewResponse); - if (EFI_ERROR (Status)) { - FreePool (NewResponse); - return NULL; - } - - return NewResponse; -} - -/** - - Convert Unicode string to ASCII string. It's call responsibility to rele= ase returned buffer. - - @param[in] UnicodeStr Unicode string to convert. - - @retval CHAR8 * ASCII string returned. - @retval NULL Errors occur. - -**/ -CHAR8 * -StringUnicodeToAscii ( - IN EFI_STRING UnicodeStr - ) -{ - CHAR8 *AsciiStr; - UINTN AsciiStrSize; - EFI_STATUS Status; - - if (IS_EMPTY_STRING (UnicodeStr)) { - return NULL; - } - - AsciiStrSize =3D StrLen (UnicodeStr) + 1; - AsciiStr =3D AllocatePool (AsciiStrSize); - if (AsciiStr =3D=3D NULL) { - return NULL; - } - - Status =3D UnicodeStrToAsciiStrS (UnicodeStr, AsciiStr, AsciiStrSize); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "UnicodeStrToAsciiStrS failed: %r\n", Status)); - FreePool (AsciiStr); - return NULL; - } - - return AsciiStr; -} - -/** - Release REDFISH_HTTP_CACHE_DATA resource - - @param[in] Data Pointer to REDFISH_HTTP_CACHE_DATA instance - - @retval EFI_SUCCESS REDFISH_HTTP_CACHE_DATA is released succ= essfully. - @retval EFI_INVALID_PARAMETER Data is NULL - -**/ -EFI_STATUS -ReleaseHttpCacheData ( - IN REDFISH_HTTP_CACHE_DATA *Data - ) -{ - if (Data =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - if (Data->Uri !=3D NULL) { - FreePool (Data->Uri); - } - - if (Data->Response !=3D NULL) { - if (Data->Response->Payload !=3D NULL) { - RedfishFreeResponse ( - Data->Response->StatusCode, - Data->Response->HeaderCount, - Data->Response->Headers, - Data->Response->Payload - ); - FreePool (Data->Response); - } - } - - FreePool (Data); - - return EFI_SUCCESS; -} - -/** - Create new cache data. - - @param[in] Uri The URI string matching to this cache data. - @param[in] Response HTTP response. - - @retval REDFISH_HTTP_CACHE_DATA * Pointer to newly created cache data. - @retval NULL No memory available. - -**/ -REDFISH_HTTP_CACHE_DATA * -NewHttpCacheData ( - IN EFI_STRING Uri, - IN REDFISH_RESPONSE *Response - ) -{ - REDFISH_HTTP_CACHE_DATA *NewData; - UINTN Size; - - if (IS_EMPTY_STRING (Uri) || (Response =3D=3D NULL)) { - return NULL; - } - - NewData =3D AllocateZeroPool (sizeof (REDFISH_HTTP_CACHE_DATA)); - if (NewData =3D=3D NULL) { - return NULL; - } - - Size =3D StrSize (Uri); - NewData->Uri =3D AllocateCopyPool (Size, Uri); - if (NewData->Uri =3D=3D NULL) { - goto ON_ERROR; - } - - NewData->Response =3D Response; - NewData->HitCount =3D 1; - - return NewData; - -ON_ERROR: - - if (NewData !=3D NULL) { - ReleaseHttpCacheData (NewData); - } - - return NULL; -} - -/** - Search on given ListHeader for given URI string. - - @param[in] ListHeader Target list to search. - @param[in] Uri Target URI to search. - - @retval REDFISH_HTTP_CACHE_DATA Target cache data is found. - @retval NULL No cache data with given URI is found. - -**/ -REDFISH_HTTP_CACHE_DATA * -FindHttpCacheData ( - IN LIST_ENTRY *ListHeader, - IN EFI_STRING Uri - ) -{ - LIST_ENTRY *List; - REDFISH_HTTP_CACHE_DATA *Data; - - if (IS_EMPTY_STRING (Uri)) { - return NULL; - } - - if (IsListEmpty (ListHeader)) { - return NULL; - } - - Data =3D NULL; - List =3D GetFirstNode (ListHeader); - while (!IsNull (ListHeader, List)) { - Data =3D REDFISH_HTTP_CACHE_FROM_LIST (List); - - if (StrCmp (Data->Uri, Uri) =3D=3D 0) { - return Data; - } - - List =3D GetNextNode (ListHeader, List); - } - - return NULL; -} - -/** - Search on given ListHeader and return cache data with minimum hit count. - - @param[in] ListHeader Target list to search. - - @retval REDFISH_HTTP_CACHE_DATA Target cache data is returned. - @retval NULL No cache data is found. - -**/ -REDFISH_HTTP_CACHE_DATA * -FindUnusedHttpCacheData ( - IN LIST_ENTRY *ListHeader - ) -{ - LIST_ENTRY *List; - REDFISH_HTTP_CACHE_DATA *Data; - REDFISH_HTTP_CACHE_DATA *UnusedData; - UINTN HitCount; - - if (IsListEmpty (ListHeader)) { - return NULL; - } - - Data =3D NULL; - UnusedData =3D NULL; - HitCount =3D 0; - - List =3D GetFirstNode (ListHeader); - Data =3D REDFISH_HTTP_CACHE_FROM_LIST (List); - UnusedData =3D Data; - HitCount =3D Data->HitCount; - List =3D GetNextNode (ListHeader, List); - - while (!IsNull (ListHeader, List)) { - Data =3D REDFISH_HTTP_CACHE_FROM_LIST (List); - - if (Data->HitCount < HitCount) { - HitCount =3D Data->HitCount; - UnusedData =3D Data; - } - - List =3D GetNextNode (ListHeader, List); - } - - return UnusedData; -} - -/** - Delete a cache data by given cache instance. - - @param[in] List Target cache list to be removed. - @param[in] Data Pointer to the instance to be deleted. - - @retval EFI_SUCCESS Cache data is removed. - @retval Others Fail to remove cache data. - -**/ -EFI_STATUS -DeleteHttpCacheData ( - IN REDFISH_HTTP_CACHE_LIST *List, - IN REDFISH_HTTP_CACHE_DATA *Data - ) -{ - if ((List =3D=3D NULL) || (Data =3D=3D NULL)) { - return EFI_INVALID_PARAMETER; - } - - DEBUG ((REDFISH_HTTP_CACHE_DEBUG, "%a: delete: %s\n", __func__, Data->Ur= i)); - - RemoveEntryList (&Data->List); - --List->Count; - - return ReleaseHttpCacheData (Data); -} - -/** - Add new cache by given URI and HTTP response to specify List. - - @param[in] List Target cache list to add. - @param[in] Uri The URI string matching to this cache data. - @param[in] Response HTTP response. - - @retval EFI_SUCCESS Cache data is added. - @retval Others Fail to add cache data. - -**/ -EFI_STATUS -AddHttpCacheData ( - IN REDFISH_HTTP_CACHE_LIST *List, - IN EFI_STRING Uri, - IN REDFISH_RESPONSE *Response - ) -{ - REDFISH_HTTP_CACHE_DATA *NewData; - REDFISH_HTTP_CACHE_DATA *OldData; - REDFISH_HTTP_CACHE_DATA *UnusedData; - REDFISH_RESPONSE *NewResponse; - - if ((List =3D=3D NULL) || IS_EMPTY_STRING (Uri) || (Response =3D=3D NULL= )) { - return EFI_INVALID_PARAMETER; - } - - // - // If same cache data exist, replace it with latest one. - // - OldData =3D FindHttpCacheData (&List->Head, Uri); - if (OldData !=3D NULL) { - DeleteHttpCacheData (List, OldData); - } - - // - // Check capacity - // - if (List->Count >=3D List->Capacity) { - DEBUG ((REDFISH_HTTP_CACHE_DEBUG, "%a: list is full and retire unused = cache\n", __func__)); - UnusedData =3D FindUnusedHttpCacheData (&List->Head); - if (UnusedData =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - DeleteHttpCacheData (List, UnusedData); - } - - // - // Clone a local copy - // - NewResponse =3D CloneRedfishResponse (Response); - if (NewResponse =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - NewData =3D NewHttpCacheData (Uri, NewResponse); - if (NewData =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - InsertTailList (&List->Head, &NewData->List); - ++List->Count; - - DEBUG ((REDFISH_HTTP_CACHE_DEBUG, "%a: cache(%d/%d) %s\n", __func__, Lis= t->Count, List->Capacity, NewData->Uri)); - - return EFI_SUCCESS; -} - -/** - Release all cache from list. - - @param[in] CacheList The list to be released. - - @retval EFI_SUCCESS All cache data are released. - @retval EFI_INVALID_PARAMETER CacheList is NULL. - -**/ -EFI_STATUS -ReleaseCacheList ( - IN REDFISH_HTTP_CACHE_LIST *CacheList - ) -{ - LIST_ENTRY *List; - LIST_ENTRY *Next; - REDFISH_HTTP_CACHE_DATA *Data; - - if (CacheList =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - if (IsListEmpty (&CacheList->Head)) { - return EFI_SUCCESS; - } - - Data =3D NULL; - Next =3D NULL; - List =3D GetFirstNode (&CacheList->Head); - while (!IsNull (&CacheList->Head, List)) { - Data =3D REDFISH_HTTP_CACHE_FROM_LIST (List); - Next =3D GetNextNode (&CacheList->Head, List); - - DeleteHttpCacheData (CacheList, Data); - - List =3D Next; - } - - return EFI_SUCCESS; -} - -/** - Debug output the cache list. - - @param[in] Msg Debug message string. - @param[in] ErrorLevel Output error level. - @param[in] CacheList Target list to dump. - - @retval EFI_SUCCESS Debug dump finished. - @retval EFI_INVALID_PARAMETER HttpCacheList is NULL. - -**/ -EFI_STATUS -DumpHttpCacheList ( - IN CONST CHAR8 *Msg, - IN UINTN ErrorLevel, - IN REDFISH_HTTP_CACHE_LIST *CacheList - ) -{ - LIST_ENTRY *List; - REDFISH_HTTP_CACHE_DATA *Data; - UINTN Index; - - if (CacheList =3D=3D NULL) { - return EFI_INVALID_PARAMETER; - } - - if (!IS_EMPTY_STRING (Msg)) { - DEBUG ((ErrorLevel, "%a\n", Msg)); - } - - if (IsListEmpty (&CacheList->Head)) { - DEBUG ((ErrorLevel, "list is empty\n")); - return EFI_NOT_FOUND; - } - - DEBUG ((ErrorLevel, "list count: %d capacity: %d\n", CacheList->Count, C= acheList->Capacity)); - Data =3D NULL; - Index =3D 0; - List =3D GetFirstNode (&CacheList->Head); - while (!IsNull (&CacheList->Head, List)) { - Data =3D REDFISH_HTTP_CACHE_FROM_LIST (List); - - DEBUG ((ErrorLevel, "%d) Uri: %s Hit: %d\n", ++Index, Data->Uri, Data-= >HitCount)); - - List =3D GetNextNode (&CacheList->Head, List); - } - - return EFI_SUCCESS; -} - -/** - Get redfish resource from given resource URI with cache mechanism - supported. It's caller's responsibility to Response by calling - RedfishFreeResponse (). - - @param[in] Service Redfish service instance to make query. - @param[in] Uri Target resource URI. - @param[out] Response HTTP response from redfish service. - @param[in] UseCache If it is TRUE, this function will search for - cache first. If it is FALSE, this function - will query Redfish URI directly. - - @retval EFI_SUCCESS Resrouce is returned successfully. - @retval Others Errors occur. - -**/ -EFI_STATUS -RedfishHttpGetResource ( - IN REDFISH_SERVICE Service, - IN EFI_STRING Uri, - OUT REDFISH_RESPONSE *Response, - IN BOOLEAN UseCache - ) -{ - EFI_STATUS Status; - CHAR8 *AsciiUri; - REDFISH_HTTP_CACHE_DATA *CacheData; - UINTN RetryCount; - - if ((Service =3D=3D NULL) || (Response =3D=3D NULL) || IS_EMPTY_STRING (= Uri)) { - return EFI_INVALID_PARAMETER; - } - - if (mRedfishHttpCachePrivate =3D=3D NULL) { - return EFI_NOT_READY; - } - - AsciiUri =3D NULL; - CacheData =3D NULL; - RetryCount =3D 0; - - // - // Search for cache list. - // - if (UseCache) { - CacheData =3D FindHttpCacheData (&mRedfishHttpCachePrivate->CacheList.= Head, Uri); - if (CacheData !=3D NULL) { - DEBUG ((REDFISH_HTTP_CACHE_DEBUG, "%a: cache hit! %s\n", __func__, U= ri)); - - // - // Copy cached response to caller's buffer. - // - Status =3D CopyRedfishResponse (CacheData->Response, R= esponse); - CacheData->HitCount +=3D 1; - return Status; - } - } - - AsciiUri =3D StringUnicodeToAscii (Uri); - if (AsciiUri =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - // - // Get resource from redfish service. - // - do { - RetryCount +=3D 1; - Status =3D RedfishGetByUri ( - Service, - AsciiUri, - Response - ); - if (!EFI_ERROR (Status) || (RetryCount >=3D REDFISH_HTTP_GET_RETRY_MAX= )) { - break; - } - - // - // Retry when Redfish service is not ready. - // - if ((Response->StatusCode !=3D NULL)) { - DEBUG_CODE ( - DumpRedfishResponse (NULL, DEBUG_ERROR, Response); - ); - - if (*Response->StatusCode !=3D HTTP_STATUS_500_INTERNAL_SERVER_ERROR= ) { - break; - } - - FreePool (Response->StatusCode); - Response->StatusCode =3D NULL; - } - - DEBUG ((DEBUG_WARN, "%a: RedfishGetByUri failed, retry (%d/%d)\n", __f= unc__, RetryCount, REDFISH_HTTP_GET_RETRY_MAX)); - gBS->Stall (REDFISH_HTTP_RETRY_WAIT); - } while (TRUE); - - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: get %a failed (%d/%d): %r\n", __func__, Asci= iUri, RetryCount, REDFISH_HTTP_GET_RETRY_MAX, Status)); - if (Response->Payload !=3D NULL) { - RedfishFreeResponse ( - NULL, - 0, - NULL, - Response->Payload - ); - Response->Payload =3D NULL; - } - - goto ON_RELEASE; - } - - // - // Keep response in cache list - // - Status =3D AddHttpCacheData (&mRedfishHttpCachePrivate->CacheList, Uri, = Response); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_ERROR, "%a: failed to cache %s: %r\n", __func__, Uri, St= atus)); - goto ON_RELEASE; - } - - DEBUG_CODE ( - DumpHttpCacheList (__func__, REDFISH_HTTP_CACHE_DEBUG_DUMP, &mRedfishH= ttpCachePrivate->CacheList); - ); - -ON_RELEASE: - - if (AsciiUri !=3D NULL) { - FreePool (AsciiUri); - } - - return Status; -} - -/** - Reset the cached data specified by given URI. When response data - returned by RedfishHttpResetResource() is modified, the response - data can not be used by other caller. Application calls this - function to make this data to be stale data and - RedfishHttpResetResource() will get latest data from remote server - again. - - @param[in] Uri Target resource URI. - - @retval EFI_SUCCESS Resrouce is reset successfully. - @retval Others Errors occur. - -**/ -EFI_STATUS -RedfishHttpResetResource ( - IN EFI_STRING Uri - ) -{ - REDFISH_HTTP_CACHE_DATA *CacheData; - - if (IS_EMPTY_STRING (Uri)) { - return EFI_INVALID_PARAMETER; - } - - if (mRedfishHttpCachePrivate =3D=3D NULL) { - return EFI_NOT_READY; - } - - CacheData =3D FindHttpCacheData (&mRedfishHttpCachePrivate->CacheList.He= ad, Uri); - if (CacheData =3D=3D NULL) { - return EFI_NOT_FOUND; - } - - DeleteHttpCacheData (&mRedfishHttpCachePrivate->CacheList, CacheData); - - return EFI_SUCCESS; -} - -/** - - Initial HTTP cache library instance. - - @param[in] ImageHandle The image handle. - @param[in] SystemTable The system table. - - @retval EFI_SUCCESS Initial library successfully. - @retval Other Return error status. - -**/ -EFI_STATUS -EFIAPI -RedfishHttpCacheConstructor ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - mRedfishHttpCachePrivate =3D AllocateZeroPool (sizeof (REDFISH_HTTP_CACH= E_PRIVATE)); - if (mRedfishHttpCachePrivate =3D=3D NULL) { - return EFI_OUT_OF_RESOURCES; - } - - // - // Initial cache list - // - mRedfishHttpCachePrivate->CacheList.Capacity =3D REDFISH_HTTP_CACHE_LIST= _SIZE; - mRedfishHttpCachePrivate->CacheList.Count =3D 0x00; - InitializeListHead (&mRedfishHttpCachePrivate->CacheList.Head); - - return EFI_SUCCESS; -} - -/** - Release allocated resource. - - @param[in] ImageHandle Handle that identifies the image to be unlo= aded. - @param[in] SystemTable The system table. - - @retval EFI_SUCCESS The image has been unloaded. - -**/ -EFI_STATUS -EFIAPI -RedfishHttpCacheDestructor ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - if (mRedfishHttpCachePrivate !=3D NULL) { - if (!IsListEmpty (&mRedfishHttpCachePrivate->CacheList.Head)) { - ReleaseCacheList (&mRedfishHttpCachePrivate->CacheList); - } - - FreePool (mRedfishHttpCachePrivate); - mRedfishHttpCachePrivate =3D NULL; - } - - return EFI_SUCCESS; -} --=20 2.34.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116142): https://edk2.groups.io/g/devel/message/116142 Mute This Topic: https://groups.io/mt/104640216/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-