public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Nickle Wang via groups.io" <nicklew=nvidia.com@groups.io>
To: <devel@edk2.groups.io>
Cc: Abner Chang <abner.chang@amd.com>, Igor Kulchytskyy <igork@ami.com>
Subject: [edk2-devel] [edk2-redfish-client][PATCH 1/2] RedfishClientPkg: Remove RedfishLib
Date: Wed, 06 Mar 2024 06:10:41 -0800	[thread overview]
Message-ID: <20240306141011.22590-1-nicklew@nvidia.com> (raw)

RedfishLib is no longer required in RedfishClientPkg.
Remove this library and corresponding definitions.

Signed-off-by: Nickle Wang <nicklew@nvidia.com>
Cc: Abner Chang <abner.chang@amd.com>
Cc: Igor Kulchytskyy <igork@ami.com>
---
 RedfishClientPkg/RedfishClientPkg.dec         |    5 -
 RedfishClientPkg/RedfishClientLibs.dsc.inc    |    1 -
 RedfishClientPkg/RedfishClientPkg.dsc         |    1 -
 .../PrivateLibrary/RedfishLib/RedfishLib.inf  |   62 -
 .../PrivateInclude/Library/RedfishLib.h       |  616 ------
 .../PrivateLibrary/RedfishLib/RedfishMisc.h   |   82 -
 .../edk2libredfish/include/redfish.h          |   25 -
 .../edk2libredfish/include/redfishPayload.h   |  136 --
 .../edk2libredfish/include/redfishService.h   |  203 --
 .../edk2libredfish/include/redpath.h          |   49 -
 .../PrivateLibrary/RedfishLib/RedfishLib.c    | 1352 ------------
 .../PrivateLibrary/RedfishLib/RedfishMisc.c   |  207 --
 .../RedfishLib/edk2libredfish/src/payload.c   |  918 --------
 .../RedfishLib/edk2libredfish/src/redpath.c   |  224 --
 .../RedfishLib/edk2libredfish/src/service.c   | 1882 -----------------
 15 files changed, 5763 deletions(-)
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
 delete mode 100644 RedfishClientPkg/PrivateInclude/Library/RedfishLib.h
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishMisc.h
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfish.h
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishPayload.h
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishService.h
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redpath.h
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.c
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishMisc.c
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/payload.c
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/redpath.c
 delete mode 100644 RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/service.c

diff --git a/RedfishClientPkg/RedfishClientPkg.dec b/RedfishClientPkg/RedfishClientPkg.dec
index aa018d714..d147135d4 100644
--- a/RedfishClientPkg/RedfishClientPkg.dec
+++ b/RedfishClientPkg/RedfishClientPkg.dec
@@ -28,11 +28,6 @@
   RedfishEventLib|Include/Library/RedfishEventLib.h
   RedfishVersionLib|Include/Library/RedfishVersionLib.h
 
-[LibraryClasses.Common.Private]
-  ##  @libraryclass Redfish Helper Library
-  #   Library provides Redfish helper functions.
-  RedfishLib|PrivateInclude/Library/RedfishLib.h
-
 [Protocols]
   ## Include/Protocol/EdkIIRedfishFeature.h
   gEdkIIRedfishFeatureProtocolGuid        = { 0x785CC694, 0x4930, 0xEFBF, { 0x2A, 0xCB, 0xA4, 0xB6, 0xA1, 0xCC, 0xAA, 0x34 } }
diff --git a/RedfishClientPkg/RedfishClientLibs.dsc.inc b/RedfishClientPkg/RedfishClientLibs.dsc.inc
index 8ec27baa3..6599926ab 100644
--- a/RedfishClientPkg/RedfishClientLibs.dsc.inc
+++ b/RedfishClientPkg/RedfishClientLibs.dsc.inc
@@ -31,7 +31,6 @@
 
   NetLib|NetworkPkg/Library/DxeNetLib/DxeNetLib.inf
   HttpLib|NetworkPkg/Library/DxeHttpLib/DxeHttpLib.inf
-  RedfishLib|RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
   RedfishFeatureUtilityLib|RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.inf
   RedfishPlatformConfigLib|RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.inf
   RedfishContentCodingLib|RedfishPkg/Library/RedfishContentCodingLibNull/RedfishContentCodingLibNull.inf
diff --git a/RedfishClientPkg/RedfishClientPkg.dsc b/RedfishClientPkg/RedfishClientPkg.dsc
index f37bf93ac..28d15580a 100644
--- a/RedfishClientPkg/RedfishClientPkg.dsc
+++ b/RedfishClientPkg/RedfishClientPkg.dsc
@@ -59,7 +59,6 @@
 [Components]
 
   RedfishClientPkg/Library/RedfishFeatureUtilityLib/RedfishFeatureUtilityLib.inf
-  RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
   RedfishClientPkg/Library/RedfishAddendumLib/RedfishAddendumLib.inf
 
   !include RedfishClientPkg/RedfishClient.dsc.inc
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.inf b/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
deleted file mode 100644
index a54e397d1..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
+++ /dev/null
@@ -1,62 +0,0 @@
-## @file
-#  RedfishLib Library implementation.
-#
-#  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-#  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
-#
-#    SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x0001001b
-  BASE_NAME                      = DxeRedfishLib
-  FILE_GUID                      = 9C2CA9CF-4F79-11E8-A7D1-8CDCD426C973
-  MODULE_TYPE                    = DXE_DRIVER
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = RedfishLib| DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
-
-#
-#  VALID_ARCHITECTURES           = IA32 X64 ARM AARCH64 RISCV64
-#
-
-[Sources]
-  edk2libredfish/src/redpath.c
-  edk2libredfish/src/service.c
-  edk2libredfish/src/payload.c
-  edk2libredfish/include/redfish.h
-  edk2libredfish/include/redfishPayload.h
-  edk2libredfish/include/redfishService.h
-  edk2libredfish/include/redpath.h
-  RedfishLib.c
-  RedfishMisc.h
-  RedfishMisc.c
-
-[Packages]
-  MdePkg/MdePkg.dec
-  MdeModulePkg/MdeModulePkg.dec
-  NetworkPkg/NetworkPkg.dec
-  RedfishPkg/RedfishPkg.dec
-  RedfishClientPkg/RedfishClientPkg.dec
-
-[LibraryClasses]
-  BaseLib
-  BaseMemoryLib
-  DebugLib
-  JsonLib
-  HttpLib
-  MemoryAllocationLib
-  NetLib
-  RedfishContentCodingLib
-  RedfishCrtLib
-  UefiBootServicesTableLib
-  UefiLib
-
-[Protocols]
-  gEfiRestExServiceBindingProtocolGuid  ## Consumed
-  gEfiRestExProtocolGuid                ## Consumed
-  gEdkIIRedfishCredentialProtocolGuid   ## Consumed
-
-[BuildOptions]
-  MSFT:*_*_*_CC_FLAGS = /U_WIN32 /UWIN64 /U_MSC_VER
-  GCC:*_*_*_CC_FLAGS = -Wno-unused-function -Wno-unused-but-set-variable
diff --git a/RedfishClientPkg/PrivateInclude/Library/RedfishLib.h b/RedfishClientPkg/PrivateInclude/Library/RedfishLib.h
deleted file mode 100644
index b2488abbd..000000000
--- a/RedfishClientPkg/PrivateInclude/Library/RedfishLib.h
+++ /dev/null
@@ -1,616 +0,0 @@
-/** @file
-  This library provides a set of utility APIs that allow to create/read/update/delete
-  (CRUD) Redfish resources and provide basic query abilities by using [URI/RedPath]
-  (https://github.com/DMTF/libredfish).
-
-  The query language is based on XPath (https://www.w3.org/TR/1999/REC-xpath-19991116/).
-  This library and query language essentially treat the entire Redfish Service like it
-  was a single JSON document. In other words whenever it encounters an odata.id in JSON
-  document, it will retrieve the new JSON document (if needed). We name the path as
-  RedPath:
-
-  Expression       Description
-
-  nodename         Selects the JSON entity with the name "nodename".
-                   If the value of nodename is an object with "@odata.id",
-                   it will continue get the value from "@odata.id".
-
-  /                Selects from the root node
-
-  [index]           Selects the index number JSON entity from an array or
-                   object. If the JSON entity is one collection (has
-                   Members & Members@odata.count), means to get the index
-                   member in "Members". Index number >=1, 1 means to return
-                   the first instance.
-
-  [XXX]            Operation on JSON entity.
-                   If the JSON entity is one collection (has Members &
-                   Members@odata.count), means to get all elements in
-                   "Members". If the JSON entity is one array, means to
-                   get all elements in array. Others will match the nodename
-                   directly (e.g. JSON_OBJECT, JSON_STRING, JSON_TRUE,
-                   JSON_FALSE, JSON_INTEGER).
-
-  [nodename]       Selects all the elements from an JSON entity that
-                   contain a property named "nodename"
-
-  [name=value]     Selects all the elements from an JSON entity where
-                   the property "name" is equal to "value"
-
-  [name~value]     Selects all the elements from an JSON entity where
-                   the string property "name" is equal to "value" using
-                   case insensitive comparison.
-
-  [name<value]     Selects all the elements from an JSON entity where
-                   the property "name" is less than "value"
-
-  [name<=value]    Selects all the elements from an JSON entity where
-                   the property "name" is less than or equal to "value"
-
-  [name>value]     Selects all the elements from an JSON entity where
-                   the property "name" is greater than "value"
-
-  [name>=value]    Selects all the elements from an JSON entity where
-                   the property "name" is greater than or equal to "value"
-
-  Some examples:
-
-    /v1/Chassis[1]        - Will return the first Chassis instance.
-    /v1/Chassis[SKU=1234] - Will return all Chassis instances with a SKU field equal to 1234.
-    /v1/Systems[Storage]  - Will return all the System instances that have Storage field populated.
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef REDFISH_LIB_H_
-#define REDFISH_LIB_H_
-
-#include <Library/JsonLib.h>
-
-#include <Protocol/Http.h>
-#include <Protocol/EdkIIRedfishConfigHandler.h>
-
-#define ODATA_TYPE_NAME_MAX_SIZE  128
-#define ODATA_TYPE_MAX_SIZE       128
-
-///
-/// Library class public defines
-///
-typedef  VOID  *REDFISH_SERVICE;
-typedef  VOID  *REDFISH_PAYLOAD;
-
-///
-/// Library class public structures/unions
-///
-typedef struct {
-  EFI_HTTP_STATUS_CODE    *StatusCode;
-  UINTN                   HeaderCount;
-  EFI_HTTP_HEADER         *Headers;
-  REDFISH_PAYLOAD         Payload;
-} REDFISH_RESPONSE;
-
-///
-/// Odata type-name mapping structure.
-///
-typedef struct {
-  CONST CHAR8    OdataTypeName[ODATA_TYPE_NAME_MAX_SIZE];
-  CONST CHAR8    OdataType[ODATA_TYPE_MAX_SIZE];
-} REDFISH_ODATA_TYPE_MAPPING;
-
-/**
-  This function uses REST EX protocol provided in RedfishConfigServiceInfo.
-  The service enumerator will also handle the authentication flow automatically
-  if HTTP basic auth or Redfish session login is configured to use.
-
-  Callers are responsible for freeing the returned service by RedfishCleanupService().
-
-  @param[in]  RedfishConfigServiceInfo Redfish service information the EFI Redfish
-                                       feature driver communicates with.
-
-  @return     New created Redfish Service, or NULL if error happens.
-
-**/
-REDFISH_SERVICE
-EFIAPI
-RedfishCreateService (
-  IN  REDFISH_CONFIG_SERVICE_INFORMATION  *RedfishConfigServiceInfo
-  );
-
-/**
-  Free the Service and all its related resources.
-
-  @param[in]    RedfishService     The Service to access the Redfish resources.
-
-**/
-VOID
-EFIAPI
-RedfishCleanupService (
-  IN REDFISH_SERVICE  RedfishService
-  );
-
-/**
-  Create REDFISH_PAYLOAD instance in local with JSON represented resource value and
-  the Redfish Service.
-
-  The returned REDFISH_PAYLOAD can be used to create or update Redfish resource in
-  server side.
-
-  Callers are responsible for freeing the returned payload by RedfishCleanupPayload().
-
-  @param[in]    Value                 JSON Value of the redfish resource.
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-
-  @return     REDFISH_PAYLOAD instance of the resource, or NULL if error happens.
-
-**/
-REDFISH_PAYLOAD
-EFIAPI
-RedfishCreatePayload (
-  IN EDKII_JSON_VALUE  Value,
-  IN REDFISH_SERVICE   RedfishService
-  );
-
-/**
-  Free the RedfishPayload and all its related resources.
-
-  @param[in]    Payload        Payload to be freed.
-
-**/
-VOID
-EFIAPI
-RedfishCleanupPayload (
-  IN REDFISH_PAYLOAD  Payload
-  );
-
-/**
-  This function returns the decoded JSON value of a REDFISH_PAYLOAD.
-
-  Caller doesn't need to free the returned JSON value because it will be released
-  in corresponding RedfishCleanupPayload() function.
-
-  @param[in]    Payload     A REDFISH_PAYLOAD instance.
-
-  @return     Decoded JSON value of the payload.
-
-**/
-EDKII_JSON_VALUE
-EFIAPI
-RedfishJsonInPayload (
-  IN REDFISH_PAYLOAD  Payload
-  );
-
-/**
-  Fill the input RedPath string with system UUID from SMBIOS table or use the customized
-  ID if  FromSmbios == FALSE.
-
-  This is a helper function to build a RedPath string which can be used to address
-  a Redfish resource for this computer system. The input PathString must have a Systems
-  note in format of "Systems[UUID=%g]" or "Systems[UUID~%g]" to fill the UUID value.
-
-  Example:
-    Use "/v1/Systems[UUID=%g]/Bios" to build a RedPath to address the "Bios" resource
-    for this computer system.
-
-  @param[in]    RedPath        RedPath format to be build.
-  @param[in]    FromSmbios     Get system UUID from SMBIOS as computer system instance ID.
-  @param[in]    IdString       The computer system instance ID.
-
-  @return     Full RedPath with system UUID inside, or NULL if error happens.
-
-**/
-CHAR8 *
-EFIAPI
-RedfishBuildPathWithSystemUuid (
-  IN CONST CHAR8  *RedPath,
-  IN BOOLEAN      FromSmbios,
-  IN CHAR8        *IdString OPTIONAL
-  );
-
-/**
-  Get a redfish response addressed by a RedPath string, including HTTP StatusCode, Headers
-  and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    RedPath               RedPath string to address a resource, must start
-                                      from the root node.
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The opeartion is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The corresponding redfish resource has
-                                  been returned in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   RedfishService, RedPath, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned Payload is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is NULL, indicates any error happen.
-                                  3. If the returned StatusCode is not 2XX, indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishGetByService (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *RedPath,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  );
-
-/**
-  Get a redfish response addressed by URI, including HTTP StatusCode, Headers
-  and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService    The Service to access the URI resources.
-  @param[in]    URI               String to address a resource.
-  @param[out]   RedResponse       Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The opeartion is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The corresponding redfish resource has
-                                  been returned in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   RedfishService, RedPath, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned Payload is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is NULL, indicates any error happen.
-                                  3. If the returned StatusCode is not 2XX, indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishGetByUri (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  );
-
-/**
-  Get a redfish response addressed by the input Payload and relative RedPath string,
-  including HTTP StatusCode, Headers and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    Payload           A existing REDFISH_PAYLOAD instance.
-  @param[in]    RedPath           Relative RedPath string to address a resource inside Payload.
-  @param[out]   RedResponse       Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The opeartion is successful:
-                                  1. The HTTP StatusCode is NULL and the returned Payload in
-                                  RedResponse is not NULL, indicates the Redfish resource has
-                                  been parsed from the input payload directly.
-                                  2. The HTTP StatusCode is not NULL and the value is 2XX,
-                                  indicates the corresponding redfish resource has been returned
-                                  in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   Payload, RedPath, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned Payload is NULL, indicates any error happen.
-                                  2. If StatusCode is not NULL and the returned value of StatusCode
-                                     is not 2XX, indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishGetByPayload (
-  IN     REDFISH_PAYLOAD   Payload,
-  IN     CONST CHAR8       *RedPath,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  );
-
-/**
-  Use HTTP PATCH to perform updates on pre-existing Redfish resource.
-
-  This function uses the RedfishService to patch a Redfish resource addressed by
-  Uri (only the relative path is required). Changes to one or more properties within
-  the target resource are represented in the input Content, properties not specified
-  in Content won't be changed by this request. The corresponding redfish response will
-  returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
-  messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    Uri                   Relative path to address the resource.
-  @param[in]    Content               JSON represented properties to be update.
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The opeartion is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The Redfish resource will be returned
-                                  in Payload within RedResponse if server send it back in the HTTP
-                                  response message body.
-  @retval EFI_INVALID_PARAMETER   RedfishService, Uri, Content, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishPatchToUri (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  IN     CONST CHAR8       *Content,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  );
-
-/**
-  Use HTTP PATCH to perform updates on target payload. Patch to odata.id in Payload directly.
-
-  This function uses the Payload to patch the Target. Changes to one or more properties
-  within the target resource are represented in the input Payload, properties not specified
-  in Payload won't be changed by this request. The corresponding redfish response will
-  returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
-  messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    Target           The target payload to be updated.
-  @param[in]    Payload          Palyoad with properties to be changed.
-  @param[out]   RedResponse      Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The opeartion is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The Redfish resource will be returned
-                                  in Payload within RedResponse if server send it back in the HTTP
-                                  response message body.
-  @retval EFI_INVALID_PARAMETER   Target, Payload, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishPatchToPayload (
-  IN     REDFISH_PAYLOAD   Target,
-  IN     REDFISH_PAYLOAD   Payload,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  );
-
-/**
-  Use HTTP POST to create a new resource in target payload.
-
-  The POST request should be submitted to the Resource Collection in which the new resource
-  is to belong. The Resource Collection is addressed by Target payload. The Redfish may
-  ignore any service controlled properties. The corresponding redfish response will returned,
-  including HTTP StatusCode, Headers and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    Target          Target payload of the Resource Collection.
-  @param[in]    Payload         The new resource to be created.
-  @param[out]   RedResponse     Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The opeartion is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The Redfish resource will be returned
-                                  in Payload within RedResponse if server send it back in the HTTP
-                                  response message body.
-  @retval EFI_INVALID_PARAMETER   Target, Payload, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishPostToPayload (
-  IN     REDFISH_PAYLOAD   Target,
-  IN     REDFISH_PAYLOAD   Payload,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  );
-
-/**
-  Use HTTP DELETE to remove a resource.
-
-  This function uses the RedfishService to remove a Redfish resource which is addressed
-  by input Uri (only the relative path is required). The corresponding redfish response will
-  returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
-  messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    Uri                   Relative path to address the resource.
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The opeartion is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX, the Redfish resource has been removed.
-                                  If there is any message returned from server, it will be returned
-                                  in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   RedfishService, Uri, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishDeleteByUri (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  );
-
-/**
-  Dump text in fractions.
-
-  @param[in]  String   ASCII string to dump.
-
-**/
-VOID
-RedfishDumpJsonStringFractions (
-  IN CHAR8  *String
-  );
-
-/**
-  Extract the JSON text content from REDFISH_PAYLOAD and dump to debug console.
-
-  @param[in]  Payload       The Redfish payload to dump.
-
-**/
-VOID
-RedfishDumpPayload (
-  IN REDFISH_PAYLOAD  Payload
-  );
-
-/**
-  Dump text in JSON value.
-
-  @param[in]  JsonValue       The Redfish JSON value to dump.
-
-**/
-VOID
-RedfishDumpJson (
-  IN EDKII_JSON_VALUE  JsonValue
-  );
-
-/**
-  This function will cleanup the HTTP header and Redfish payload resources.
-
-  @param[in]  StatusCode        The status code in HTTP response message.
-  @param[in]  HeaderCount       Number of HTTP header structures in Headers list.
-  @param[in]  Headers           Array containing list of HTTP headers.
-  @param[in]  Payload           The Redfish payload to dump.
-
-**/
-VOID
-RedfishFreeResponse (
-  IN EFI_HTTP_STATUS_CODE  *StatusCode,
-  IN UINTN                 HeaderCount,
-  IN EFI_HTTP_HEADER       *Headers,
-  IN REDFISH_PAYLOAD       Payload
-  );
-
-/**
-  Check if the "@odata.type" in Payload is valid or not.
-
-  @param[in]  Payload                  The Redfish payload to be checked.
-  @param[in]  OdataTypeName            OdataType will be retrived from mapping list.
-  @param[in]  OdataTypeMappingList     The list of OdataType.
-  @param[in]  OdataTypeMappingListSize The number of mapping list
-
-  @return TRUE if the "@odata.type" in Payload is valid, otherwise FALSE.
-
-**/
-BOOLEAN
-RedfishIsValidOdataType (
-  IN REDFISH_PAYLOAD             Payload,
-  IN CONST CHAR8                 *OdataTypeName,
-  IN REDFISH_ODATA_TYPE_MAPPING  *OdataTypeMappingList,
-  IN UINTN                       OdataTypeMappingListSize
-  );
-
-/**
-  Check if the payload is collection
-
-  @param[in]  Payload   The Redfish payload to be checked.
-
-  @return TRUE if the payload is  collection.
-
-**/
-BOOLEAN
-RedfishIsPayloadCollection (
-  IN REDFISH_PAYLOAD  Payload
-  );
-
-/**
-  Get collection size.
-
-  @param[in]  Payload         The Redfish collection payload
-  @param[in]  CollectionSize  Size of this collection
-
-  @return EFI_SUCCESS              Coolection size is returned in CollectionSize
-  @return EFI_INVALID_PARAMETER    The payload is not a collection.
-**/
-EFI_STATUS
-RedfishGetCollectionSize (
-  IN REDFISH_PAYLOAD  Payload,
-  IN UINTN            *CollectionSize
-  );
-
-/**
-  Get Redfish payload of collection member
-
-  @param[in]  Payload    The Redfish collection payload
-  @param[in]  Index      Index of collection member
-
-  @return NULL           Fail to get collection member.
-  @return Non NULL       Payload is returned.
-**/
-REDFISH_PAYLOAD
-RedfishGetPayloadByIndex (
-  IN REDFISH_PAYLOAD  Payload,
-  IN UINTN            Index
-  );
-
-/**
-  Check and return Redfish resource of the given Redpath.
-
-  @param[in]  RedfishService  Pointer to REDFISH_SERVICE
-  @param[in]  Redpath         Redpath of the resource.
-  @param[in]  Response        Optional return the resource.
-
-  @return EFI_STATUS
-**/
-EFI_STATUS
-RedfishCheckIfRedpathExist (
-  IN REDFISH_SERVICE   RedfishService,
-  IN CHAR8             *Redpath,
-  IN REDFISH_RESPONSE  *Response OPTIONAL
-  );
-
-/**
-  This function returns the string of Redfish service version.
-
-  @param[in]  RedfishService      Redfish service instance.
-  @param[out] ServiceVersionStr   Redfish service string.
-
-  @return     EFI_STATUS
-
-**/
-EFI_STATUS
-RedfishGetServiceVersion (
-  IN  REDFISH_SERVICE  RedfishService,
-  OUT CHAR8            **ServiceVersionStr
-  );
-
-/**
-  This function returns the string of Redfish service version.
-
-  @param[in]   ServiceVerisonStr The string of Redfish service version.
-  @param[in]   Url               The URL to build Redpath with ID.
-                                 Start with "/", for example "/Registries"
-  @param[in]   Id                ID string
-  @param[out]  Redpath           Pointer to retrive Redpath, caller has to free
-                                 the memory allocated for this string.
-  @return     EFI_STATUS
-
-**/
-EFI_STATUS
-RedfishBuildRedpathUseId (
-  IN  CHAR8  *ServiceVerisonStr,
-  IN  CHAR8  *Url,
-  IN  CHAR8  *Id,
-  OUT CHAR8  **Redpath
-  );
-
-#endif
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishMisc.h b/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishMisc.h
deleted file mode 100644
index 3b066c117..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishMisc.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/** @file
-  Internal Functions for RedfishLib.
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef DXE_REDFISH_MISC_LIB_H_
-#define DXE_REDFISH_MISC_LIB_H_
-
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/JsonLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/PrintLib.h>
-#include <Library/RedfishLib.h>
-#include <Library/UefiLib.h>
-#include <Protocol/EdkIIRedfishCredential.h>
-#include <redfish.h>
-
-#define ARRAY_SIZE(Array)  (sizeof (Array) / sizeof ((Array)[0]))
-
-/**
-  Creates a REDFISH_SERVICE which can be later used to access the Redfish resources.
-
-  This function will configure REST EX child according to parameters described in
-  Redfish network host interface in SMBIOS type 42 record. The service enumerator will also
-  handle the authentication flow automatically if HTTP basic auth or Redfish session
-  login is configured to use.
-
-  @param[in]  RedfishConfigServiceInfo Redfish service information the EFI Redfish
-                                       feature driver communicates with.
-  @param[in]  AuthMethod   None, HTTP basic auth, or Redfish session login.
-  @param[in]  UserId       User Name used for authentication.
-  @param[in]  Password     Password used for authentication.
-
-  @return     New created Redfish service, or NULL if error happens.
-
-**/
-REDFISH_SERVICE
-RedfishCreateLibredfishService (
-  IN REDFISH_CONFIG_SERVICE_INFORMATION  *RedfishConfigServiceInfo,
-  IN EDKII_REDFISH_AUTH_METHOD           AuthMethod,
-  IN CHAR8                               *UserId,
-  IN CHAR8                               *Password
-  );
-
-/**
-  Retrieve platform's Redfish authentication information.
-
-  This functions returns the Redfish authentication method together with the user
-  Id and password.
-  For AuthMethodNone, UserId and Password will point to NULL which means authentication
-  is not required to access the Redfish service.
-  For AuthMethodHttpBasic, the UserId and Password could be used for
-  HTTP header authentication as defined by RFC7235. For AuthMethodRedfishSession,
-  the UserId and Password could be used for Redfish session login as defined by
-  Redfish API specification (DSP0266).
-
-  Callers are responsible for freeing the returned string storage pointed by UserId
-  and Password.
-
-  @param[out]  AuthMethod          Type of Redfish authentication method.
-  @param[out]  UserId              The pointer to store the returned UserId string.
-  @param[out]  Password            The pointer to store the returned Password string.
-
-  @retval EFI_SUCCESS              Get the authentication information successfully.
-  @retval EFI_INVALID_PARAMETER    AuthMethod or UserId or Password is NULL.
-  @retval EFI_UNSUPPORTED          Unsupported authentication method is found.
-**/
-EFI_STATUS
-RedfishGetAuthInfo (
-  OUT  EDKII_REDFISH_AUTH_METHOD  *AuthMethod,
-  OUT  CHAR8                      **UserId,
-  OUT  CHAR8                      **Password
-  );
-
-#endif
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfish.h b/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfish.h
deleted file mode 100644
index e9b9b3fa5..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfish.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/** @file
-  This file is cloned from DMTF libredfish library tag v1.0.0 and maintained
-  by EDKII.
-
-//----------------------------------------------------------------------------
-// Copyright Notice:
-// Copyright 2017 Distributed Management Task Force, Inc. All rights reserved.
-// License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libredfish/LICENSE.md
-//----------------------------------------------------------------------------
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef LIBREDFISH_REDFISH_H_
-#define LIBREDFISH_REDFISH_H_
-
-#include <redfishService.h>
-#include <redfishPayload.h>
-#include <redpath.h>
-
-#endif
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishPayload.h b/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishPayload.h
deleted file mode 100644
index 4e91b724c..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishPayload.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/** @file
-  This file is cloned from DMTF libredfish library tag v1.0.0 and maintained
-  by EDKII.
-
-//----------------------------------------------------------------------------
-// Copyright Notice:
-// Copyright 2017 Distributed Management Task Force, Inc. All rights reserved.
-// License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libredfish/LICENSE.md
-//----------------------------------------------------------------------------
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
-  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef LIBREDFISH_REDFISH_PAYLOAD_H_
-#define LIBREDFISH_REDFISH_PAYLOAD_H_
-
-#include <Include/Library/RedfishCrtLib.h>
-#include <Library/JsonLib.h>
-#include <jansson.h>
-#include <redfishService.h>
-#include <redpath.h>
-
-redfishPayload *
-createRedfishPayload (
-  json_t          *value,
-  redfishService  *service
-  );
-
-redfishPayload *
-getPayloadByNodeName (
-  redfishPayload        *payload,
-  const char            *nodeName,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-getPayloadByIndex (
-  redfishPayload        *payload,
-  size_t                index,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-getPayloadForPath (
-  redfishPayload        *payload,
-  redPathNode           *redpath,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-getPayloadForPathString (
-  redfishPayload        *payload,
-  const char            *string,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-patchPayload (
-  redfishPayload        *target,
-  redfishPayload        *payload,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-patchPayloadEx (
-  redfishPayload        *target,
-  redfishPayload        *payload,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-postContentToPayload (
-  redfishPayload        *target,
-  const char            *data,
-  size_t                dataSize,
-  const char            *contentType,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-postContentToPayloadEx (
-  redfishPayload        *target,
-  const char            *data,
-  size_t                dataSize,
-  const char            *contentType,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-postPayload (
-  redfishPayload        *target,
-  redfishPayload        *payload,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-postPayloadEx (
-  redfishPayload        *target,
-  redfishPayload        *payload,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-void
-cleanupPayload (
-  redfishPayload  *payload
-  );
-
-bool
-isPayloadCollection (
-  redfishPayload  *Payload
-  );
-
-size_t
-getCollectionSize (
-  redfishPayload  *payload
-  );
-
-redfishPayload *
-getPayloadByIndex (
-  redfishPayload        *payload,
-  size_t                index,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-#endif
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishService.h b/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishService.h
deleted file mode 100644
index c2e0fd321..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redfishService.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/** @file
-  This file is cloned from DMTF libredfish library tag v1.0.0 and maintained
-  by EDKII.
-
-//----------------------------------------------------------------------------
-// Copyright Notice:
-// Copyright 2017 Distributed Management Task Force, Inc. All rights reserved.
-// License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libredfish/LICENSE.md
-//----------------------------------------------------------------------------
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
-  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef LIBREDFISH_REDFISH_SERVICE_H_
-#define LIBREDFISH_REDFISH_SERVICE_H_
-
-#include <IndustryStandard/Http11.h>
-
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/HttpLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/NetLib.h>
-#include <Library/RedfishContentCodingLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-
-#include <Include/Library/RedfishCrtLib.h>
-
-#include <Protocol/EdkIIRedfishConfigHandler.h>
-#include <Protocol/RestEx.h>
-
-#include <jansson.h>
-
-typedef struct {
-  char                    *host;
-  json_t                  *versions;
-  unsigned int            flags;
-  char                    *sessionToken;
-  char                    *basicAuthStr;
-  //
-  // point to the <HOST> part in above "host" field, which will be put into
-  // the "Host" header of HTTP request message.
-  //
-  char                    *HostHeaderValue;
-  EFI_REST_EX_PROTOCOL    *RestEx;
-} redfishService;
-
-typedef struct {
-  json_t            *json;
-  redfishService    *service;
-} redfishPayload;
-
-#define REDFISH_AUTH_BASIC         0
-#define REDFISH_AUTH_BEARER_TOKEN  1
-#define REDFISH_AUTH_SESSION       2
-
-#define REDFISH_HTTP_RESPONSE_TIMEOUT  5000       /// 5 seconds in uints of millisecond.
-
-///
-/// Library class public defines
-///
-#define HTTP_FLAG   L"http://"
-#define HTTPS_FLAG  L"https://"
-
-///
-/// The redfish first URL should be "/redfish/v1/", while we use "/redfish/v1" here without "/"
-/// in the end is to avoid the 301 Perment redirect response from Redfish profile simulator.
-///
-#define REDFISH_FIRST_URL  L"/redfish/v1"
-
-typedef struct {
-  unsigned int    authType;
-  union {
-    struct {
-      char    *username;
-      char    *password;
-    } userPass;
-    struct {
-      char    *token;
-    } authToken;
-  } authCodes;
-} enumeratorAuthentication;
-
-// Values for flags
-#define REDFISH_FLAG_SERVICE_NO_VERSION_DOC  0x00000001// The Redfish Service lacks the version document (in violation of the Redfish spec)
-redfishService *
-createServiceEnumerator (
-  REDFISH_CONFIG_SERVICE_INFORMATION  *RedfishConfigServiceInfo,
-  const char                          *rootUri,
-  enumeratorAuthentication            *auth,
-  unsigned int                        flags
-  );
-
-json_t *
-getUriFromService (
-  redfishService        *service,
-  const char            *uri,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-json_t *
-getUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-json_t *
-patchUriFromService (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-json_t *
-patchUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-json_t *
-postUriFromService (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  size_t                contentLength,
-  const char            *contentType,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-json_t *
-postUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  size_t                contentLength,
-  const char            *contentType,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-json_t *
-putUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  size_t                contentLength,
-  const char            *contentType,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-json_t *
-deleteUriFromService (
-  redfishService        *service,
-  const char            *uri,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-json_t *
-deleteUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-getRedfishServiceRoot (
-  redfishService        *service,
-  const char            *version,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-redfishPayload *
-getPayloadByPath (
-  redfishService        *service,
-  const char            *path,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-void
-cleanupServiceEnumerator (
-  redfishService  *service
-  );
-
-#endif
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redpath.h b/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redpath.h
deleted file mode 100644
index c1a1568bf..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/include/redpath.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/** @file
-  This file is cloned from DMTF libredfish library tag v1.0.0 and maintained
-  by EDKII.
-
-//----------------------------------------------------------------------------
-// Copyright Notice:
-// Copyright 2017 Distributed Management Task Force, Inc. All rights reserved.
-// License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libredfish/LICENSE.md
-//----------------------------------------------------------------------------
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef LIBREDFISH_REDPATH_H_
-#define LIBREDFISH_REDPATH_H_
-
-#include <Include/Library/RedfishCrtLib.h>
-
-#include <jansson.h>
-
-typedef struct _redPathNode {
-  bool                   isRoot;
-  bool                   isIndex;
-
-  char                   *version;
-  char                   *nodeName;
-  size_t                 index;
-  char                   *op;
-  char                   *propName;
-  char                   *value;
-
-  struct _redPathNode    *next;
-} redPathNode;
-
-redPathNode *
-parseRedPath (
-  const char  *path
-  );
-
-void
-cleanupRedPath (
-  redPathNode  *node
-  );
-
-#endif
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.c b/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.c
deleted file mode 100644
index 9dc649912..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishLib.c
+++ /dev/null
@@ -1,1352 +0,0 @@
-/** @file
-  Provides a set of utility APIs that allow to create/read/update/delete
-  (CRUD) Redfish resources and provide basic query.
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
-  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "RedfishMisc.h"
-
-/**
-  This function uses REST EX protocol provided in RedfishConfigServiceInfo.
-  The service enumerator will also handle the authentication flow automatically
-  if HTTP basic auth or Redfish session login is configured to use.
-
-  Callers are responsible for freeing the returned service by RedfishCleanupService().
-
-  @param[in]  RedfishConfigServiceInfo Redfish service information the EFI Redfish
-                                       feature driver communicates with.
-
-  @return     New created Redfish Service, or NULL if error happens.
-
-**/
-REDFISH_SERVICE
-EFIAPI
-RedfishCreateService (
-  IN  REDFISH_CONFIG_SERVICE_INFORMATION  *RedfishConfigServiceInfo
-  )
-{
-  REDFISH_SERVICE            RedfishService;
-  EDKII_REDFISH_AUTH_METHOD  AuthMethod;
-  CHAR8                      *UserId;
-  CHAR8                      *Password;
-  EFI_STATUS                 Status;
-
-  RedfishService = NULL;
-  UserId         = NULL;
-  Password       = NULL;
-
-  //
-  // Check Input Parameters.
-  //
-  if (RedfishConfigServiceInfo == NULL) {
-    return NULL;
-  }
-
-  //
-  // Get Authentication Configuration.
-  //
-  Status = RedfishGetAuthInfo (&AuthMethod, &UserId, &Password);
-  if (EFI_ERROR (Status)) {
-    goto ON_EXIT;
-  }
-
-  //
-  // Create a redfish service node based on Redfish network host interface.
-  //
-  RedfishService = RedfishCreateLibredfishService (
-                     RedfishConfigServiceInfo,
-                     AuthMethod,
-                     UserId,
-                     Password
-                     );
-
-ON_EXIT:
-  if (UserId != NULL) {
-    FreePool (UserId);
-  }
-
-  if (Password != NULL) {
-    FreePool (Password);
-  }
-
-  return RedfishService;
-}
-
-/**
-  Free the Service and all its related resources.
-
-  @param[in]    RedfishService     The Service to access the Redfish resources.
-
-**/
-VOID
-EFIAPI
-RedfishCleanupService (
-  IN REDFISH_SERVICE  RedfishService
-  )
-{
-  if (RedfishService == NULL) {
-    return;
-  }
-
-  cleanupServiceEnumerator (RedfishService);
-}
-
-/**
-  Create REDFISH_PAYLOAD instance in local with JSON represented resource value and
-  the Redfish Service.
-
-  The returned REDFISH_PAYLOAD can be used to create or update Redfish resource in
-  server side.
-
-  Callers are responsible for freeing the returned payload by RedfishCleanupPayload().
-
-  @param[in]    Value                 JSON Value of the redfish resource.
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-
-  @return     REDFISH_PAYLOAD instance of the resource, or NULL if error happens.
-
-**/
-REDFISH_PAYLOAD
-EFIAPI
-RedfishCreatePayload (
-  IN EDKII_JSON_VALUE  Value,
-  IN REDFISH_SERVICE   RedfishService
-  )
-{
-  EDKII_JSON_VALUE  CopyValue;
-
-  CopyValue = JsonValueClone (Value);
-  return createRedfishPayload (CopyValue, RedfishService);
-}
-
-/**
-  Free the RedfishPayload and all its related resources.
-
-  @param[in]    Payload        Payload to be freed.
-
-**/
-VOID
-EFIAPI
-RedfishCleanupPayload (
-  IN REDFISH_PAYLOAD  Payload
-  )
-{
-  if (Payload == NULL) {
-    return;
-  }
-
-  cleanupPayload ((redfishPayload *)Payload);
-}
-
-/**
-  This function returns the decoded JSON value of a REDFISH_PAYLOAD.
-
-  Caller doesn't need to free the returned JSON value because it will be released
-  in corresponding RedfishCleanupPayload() function.
-
-  @param[in]    Payload     A REDFISH_PAYLOAD instance.
-
-  @return     Decoded JSON value of the payload.
-
-**/
-EDKII_JSON_VALUE
-EFIAPI
-RedfishJsonInPayload (
-  IN REDFISH_PAYLOAD  Payload
-  )
-{
-  if (Payload == NULL) {
-    return NULL;
-  }
-
-  return ((redfishPayload *)Payload)->json;
-}
-
-/**
-  This function returns the Redfish service of a REDFISH_PAYLOAD.
-
-  Caller doesn't need to free the returned JSON value because it will be released
-  in corresponding RedfishCleanupService() function.
-
-  @param[in]    Payload     A REDFISH_PAYLOAD instance.
-
-  @return     Redfish service of the payload.
-
-**/
-REDFISH_SERVICE
-EFIAPI
-RedfishServiceInPayload (
-  IN REDFISH_PAYLOAD  Payload
-  )
-{
-  if (Payload == NULL) {
-    return NULL;
-  }
-
-  return ((redfishPayload *)Payload)->service;
-}
-
-/**
-  Fill the input RedPath string with system UUID from SMBIOS table or use the customized
-  ID if  FromSmbios == FALSE.
-
-  This is a helper function to build a RedPath string which can be used to address
-  a Redfish resource for this computer system. The input PathString must have a Systems
-  note in format of "Systems[UUID=%g]" or "Systems[UUID~%g]" to fill the UUID value.
-
-  Example:
-    Use "/v1/Systems[UUID=%g]/Bios" to build a RedPath to address the "Bios" resource
-    for this computer system.
-
-  @param[in]    RedPath        RedPath format to be build.
-  @param[in]    FromSmbios     Get system UUID from SMBIOS as computer system instance ID.
-  @param[in]    IdString       The computer system instance ID.
-
-  @return     Full RedPath with system UUID inside, or NULL if error happens.
-
-**/
-CHAR8 *
-EFIAPI
-RedfishBuildPathWithSystemUuid (
-  IN CONST CHAR8  *RedPath,
-  IN BOOLEAN      FromSmbios,
-  IN CHAR8        *IdString OPTIONAL
-  )
-{
-  UINTN       BufSize;
-  CHAR8       *RetRedPath;
-  EFI_GUID    SystemUuid;
-  EFI_STATUS  Status;
-
-  if (RedPath == NULL) {
-    return NULL;
-  }
-
-  //
-  // Find system UUID from SMBIOS table.
-  //
-  if (FromSmbios) {
-    Status = NetLibGetSystemGuid (&SystemUuid);
-    if (EFI_ERROR (Status)) {
-      return NULL;
-    }
-
-    // AsciiStrLen ("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") = 36
-    BufSize = AsciiStrSize (RedPath) + AsciiStrLen ("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
-  } else {
-    BufSize = AsciiStrSize (RedPath) + AsciiStrLen (IdString);
-  }
-
-  RetRedPath = AllocateZeroPool (BufSize);
-  if (RetRedPath == NULL) {
-    return NULL;
-  }
-
-  if (FromSmbios) {
-    AsciiSPrint (RetRedPath, BufSize, RedPath, &SystemUuid);
-  } else {
-    AsciiSPrint (RetRedPath, BufSize, RedPath, IdString);
-  }
-
-  return RetRedPath;
-}
-
-/**
-  Get a redfish response addressed by a RedPath string, including HTTP StatusCode, Headers
-  and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    RedPath               RedPath string to address a resource, must start
-                                      from the root node.
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The corresponding redfish resource has
-                                  been returned in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   RedfishService, RedPath, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned Payload is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is NULL, indicates any error happen.
-                                  3. If the returned StatusCode is not 2XX, indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishGetByService (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *RedPath,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  if ((RedfishService == NULL) || (RedPath == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  RedResponse->Payload = (REDFISH_PAYLOAD)getPayloadByPath (RedfishService, RedPath, &(RedResponse->StatusCode));
-
-  //
-  // 1. If the returned Payload is NULL, indicates any error happen.
-  // 2. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if ((RedResponse->Payload == NULL) || (RedResponse->StatusCode == NULL)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // 3. If the returned StatusCode is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Get a redfish response addressed by URI, including HTTP StatusCode, Headers
-  and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService    The Service to access the URI resources.
-  @param[in]    Uri               String to address a resource.
-  @param[out]   RedResponse       Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The corresponding redfish resource has
-                                  been returned in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   RedfishService, RedPath, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned Payload is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is NULL, indicates any error happen.
-                                  3. If the returned StatusCode is not 2XX, indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishGetByUri (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  EDKII_JSON_VALUE  JsonValue;
-
-  if ((RedfishService == NULL) || (Uri == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  JsonValue            = getUriFromServiceEx (RedfishService, Uri, &RedResponse->Headers, &RedResponse->HeaderCount, &RedResponse->StatusCode);
-  RedResponse->Payload = createRedfishPayload (JsonValue, RedfishService);
-
-  //
-  // 1. If the returned Payload is NULL, indicates any error happen.
-  // 2. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if ((RedResponse->Payload == NULL) || (RedResponse->StatusCode == NULL)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // 3. If the returned StatusCode is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Get a redfish response addressed by the input Payload and relative RedPath string,
-  including HTTP StatusCode, Headers and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    Payload           A existing REDFISH_PAYLOAD instance.
-  @param[in]    RedPath           Relative RedPath string to address a resource inside Payload.
-  @param[out]   RedResponse       Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful:
-                                  1. The HTTP StatusCode is NULL and the returned Payload in
-                                  RedResponse is not NULL, indicates the Redfish resource has
-                                  been parsed from the input payload directly.
-                                  2. The HTTP StatusCode is not NULL and the value is 2XX,
-                                  indicates the corresponding redfish resource has been returned
-                                  in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   Payload, RedPath, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned Payload is NULL, indicates any error happen.
-                                  2. If StatusCode is not NULL and the returned value of StatusCode
-                                     is not 2XX, indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishGetByPayload (
-  IN     REDFISH_PAYLOAD   Payload,
-  IN     CONST CHAR8       *RedPath,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  if ((Payload == NULL) || (RedPath == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  RedResponse->Payload = (REDFISH_PAYLOAD)getPayloadForPathString (Payload, RedPath, &(RedResponse->StatusCode));
-
-  //
-  // 1. If the returned Payload is NULL, indicates any error happen.
-  //
-  if (RedResponse->Payload == NULL) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // 2. If StatusCode is not NULL and the returned value of StatusCode is not 2XX, indicates any
-  //    error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((RedResponse->StatusCode != NULL) && \
-      ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-       (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT)
-      ))
-  {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Use HTTP PATCH to perform updates on pre-existing Redfish resource.
-
-  This function uses the RedfishService to patch a Redfish resource addressed by
-  Uri (only the relative path is required). Changes to one or more properties within
-  the target resource are represented in the input Content, properties not specified
-  in Content won't be changed by this request. The corresponding redfish response will
-  returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
-  messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    Uri                   Relative path to address the resource.
-  @param[in]    Content               JSON represented properties to be update.
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The Redfish resource will be returned
-                                  in Payload within RedResponse if server send it back in the HTTP
-                                  response message body.
-  @retval EFI_INVALID_PARAMETER   RedfishService, Uri, Content, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishPatchToUri (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  IN     CONST CHAR8       *Content,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  EFI_STATUS        Status;
-  EDKII_JSON_VALUE  JsonValue;
-
-  Status    = EFI_SUCCESS;
-  JsonValue = NULL;
-
-  if ((RedfishService == NULL) || (Uri == NULL) || (Content == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  JsonValue = (EDKII_JSON_VALUE)patchUriFromServiceEx (
-                                  RedfishService,
-                                  Uri,
-                                  Content,
-                                  &(RedResponse->Headers),
-                                  &(RedResponse->HeaderCount),
-                                  &(RedResponse->StatusCode)
-                                  );
-
-  //
-  // 1. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if (RedResponse->StatusCode == NULL) {
-    Status = EFI_DEVICE_ERROR;
-    goto ON_EXIT;
-  }
-
-  //
-  // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    Status = EFI_DEVICE_ERROR;
-  }
-
-ON_EXIT:
-  if (JsonValue != NULL) {
-    RedResponse->Payload = createRedfishPayload (JsonValue, RedfishService);
-    if (RedResponse->Payload == NULL) {
-      //
-      // Ignore the error when create RedfishPayload, just free the JsonValue since it's not what
-      // we care about if the returned StatusCode is 2XX.
-      //
-      JsonValueFree (JsonValue);
-    }
-  }
-
-  return Status;
-}
-
-/**
-  Use HTTP PATCH to perform updates on target payload. Patch to odata.id in Payload directly.
-
-  This function uses the Payload to patch the Target. Changes to one or more properties
-  within the target resource are represented in the input Payload, properties not specified
-  in Payload won't be changed by this request. The corresponding redfish response will
-  returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
-  messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    Target           The target payload to be updated.
-  @param[in]    Payload          Payload with properties to be changed.
-  @param[out]   RedResponse      Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The Redfish resource will be returned
-                                  in Payload within RedResponse if server send it back in the HTTP
-                                  response message body.
-  @retval EFI_INVALID_PARAMETER   Target, Payload, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishPatchToPayload (
-  IN     REDFISH_PAYLOAD   Target,
-  IN     REDFISH_PAYLOAD   Payload,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  if ((Target == NULL) || (Payload == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  RedResponse->Payload = (REDFISH_PAYLOAD)patchPayloadEx (
-                                            Target,
-                                            Payload,
-                                            &RedResponse->Headers,
-                                            &RedResponse->HeaderCount,
-                                            &(RedResponse->StatusCode)
-                                            );
-
-  //
-  // 1. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if (RedResponse->StatusCode == NULL) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Use HTTP POST to create new Redfish resource in the Resource Collection.
-
-  The POST request should be submitted to the Resource Collection in which the new resource
-  is to belong. The Resource Collection is addressed by URI. The Redfish may
-  ignore any service controlled properties. The corresponding redfish response will returned,
-  including HTTP StatusCode, Headers and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    Uri                   Relative path to address the resource.
-  @param[in]    Content               JSON represented properties to be update.
-  @param[in]    ContentSize           Size of the Content to be send to Redfish service
-  @param[in]    ContentType           Type of the Content to be send to Redfish service
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The Redfish resource will be returned
-                                  in Payload within RedResponse if server send it back in the HTTP
-                                  response message body.
-  @retval EFI_INVALID_PARAMETER   RedfishService, Uri, Content, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishPostToUri (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  IN     CONST CHAR8       *Content,
-  IN     UINTN             ContentSize OPTIONAL,
-  IN     CONST CHAR8       *ContentType OPTIONAL,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  EFI_STATUS        Status;
-  EDKII_JSON_VALUE  JsonValue;
-
-  Status    = EFI_SUCCESS;
-  JsonValue = NULL;
-
-  if ((RedfishService == NULL) || (Uri == NULL) || (Content == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  JsonValue = (EDKII_JSON_VALUE)postUriFromServiceEx (
-                                  RedfishService,
-                                  Uri,
-                                  Content,
-                                  ContentSize,
-                                  ContentType,
-                                  &(RedResponse->Headers),
-                                  &(RedResponse->HeaderCount),
-                                  &(RedResponse->StatusCode)
-                                  );
-
-  //
-  // 1. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if (RedResponse->StatusCode == NULL) {
-    Status = EFI_DEVICE_ERROR;
-    goto ON_EXIT;
-  }
-
-  //
-  // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    Status = EFI_DEVICE_ERROR;
-  }
-
-ON_EXIT:
-  if (JsonValue != NULL) {
-    RedResponse->Payload = createRedfishPayload (JsonValue, RedfishService);
-    if (RedResponse->Payload == NULL) {
-      //
-      // Ignore the error when create RedfishPayload, just free the JsonValue since it's not what
-      // we care about if the returned StatusCode is 2XX.
-      //
-      JsonValueFree (JsonValue);
-    }
-  }
-
-  return Status;
-}
-
-/**
-  Use HTTP POST to create a new resource in target payload.
-
-  The POST request should be submitted to the Resource Collection in which the new resource
-  is to belong. The Resource Collection is addressed by Target payload. The Redfish may
-  ignore any service controlled properties. The corresponding redfish response will returned,
-  including HTTP StatusCode, Headers and Payload which record any HTTP response messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    Target          Target payload of the Resource Collection.
-  @param[in]    Payload         The new resource to be created.
-  @param[out]   RedResponse     Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The Redfish resource will be returned
-                                  in Payload within RedResponse if server send it back in the HTTP
-                                  response message body.
-  @retval EFI_INVALID_PARAMETER   Target, Payload, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishPostToPayload (
-  IN     REDFISH_PAYLOAD   Target,
-  IN     REDFISH_PAYLOAD   Payload,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  if ((Target == NULL) || (Payload == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  RedResponse->Payload = (REDFISH_PAYLOAD)postPayloadEx (
-                                            Target,
-                                            Payload,
-                                            &RedResponse->Headers,
-                                            &RedResponse->HeaderCount,
-                                            &(RedResponse->StatusCode)
-                                            );
-
-  //
-  // 1. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if (RedResponse->StatusCode == NULL) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Use HTTP DELETE to remove a resource.
-
-  This function uses the RedfishService to remove a Redfish resource which is addressed
-  by input Uri (only the relative path is required). The corresponding redfish response will
-  returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
-  messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    Uri                   Relative path to address the resource.
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX, the Redfish resource has been removed.
-                                  If there is any message returned from server, it will be returned
-                                  in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   RedfishService, Uri, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishDeleteByUri (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  EFI_STATUS        Status;
-  EDKII_JSON_VALUE  JsonValue;
-
-  Status    = EFI_SUCCESS;
-  JsonValue = NULL;
-
-  if ((RedfishService == NULL) || (Uri == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  JsonValue = (EDKII_JSON_VALUE)deleteUriFromService (
-                                  RedfishService,
-                                  Uri,
-                                  &(RedResponse->StatusCode)
-                                  );
-
-  //
-  // 1. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if (RedResponse->StatusCode == NULL) {
-    Status = EFI_DEVICE_ERROR;
-    goto ON_EXIT;
-  }
-
-  //
-  // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    Status = EFI_DEVICE_ERROR;
-  }
-
-ON_EXIT:
-  if (JsonValue != NULL) {
-    RedResponse->Payload = createRedfishPayload (JsonValue, RedfishService);
-    if (RedResponse->Payload == NULL) {
-      //
-      // Ignore the error when create RedfishPayload, just free the JsonValue since it's not what
-      // we care about if the returned StatusCode is 2XX.
-      //
-      JsonValueFree (JsonValue);
-    }
-  }
-
-  return Status;
-}
-
-/**
-  Use HTTP DELETE to remove a resource.
-
-  This function uses the RedfishService to remove a Redfish resource which is addressed
-  by input Uri (only the relative path is required). The corresponding redfish response will
-  returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
-  messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    Uri                   Relative path to address the resource.
-  @param[in]    Content               JSON represented properties to be deleted.
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX, the Redfish resource has been removed.
-                                  If there is any message returned from server, it will be returned
-                                  in Payload within RedResponse.
-  @retval EFI_INVALID_PARAMETER   RedfishService, Uri, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishDeleteByUriEx (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  IN     CONST CHAR8       *Content,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  EFI_STATUS        Status;
-  EDKII_JSON_VALUE  JsonValue;
-
-  Status    = EFI_SUCCESS;
-  JsonValue = NULL;
-
-  if ((RedfishService == NULL) || (Content == NULL) || (Uri == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  JsonValue = (EDKII_JSON_VALUE)deleteUriFromServiceEx (
-                                  RedfishService,
-                                  Uri,
-                                  Content,
-                                  &(RedResponse->StatusCode)
-                                  );
-
-  //
-  // 1. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if (RedResponse->StatusCode == NULL) {
-    Status = EFI_DEVICE_ERROR;
-    goto ON_EXIT;
-  }
-
-  //
-  // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    Status = EFI_DEVICE_ERROR;
-  }
-
-ON_EXIT:
-  if (JsonValue != NULL) {
-    RedResponse->Payload = createRedfishPayload (JsonValue, RedfishService);
-    if (RedResponse->Payload == NULL) {
-      //
-      // Ignore the error when create RedfishPayload, just free the JsonValue since it's not what
-      // we care about if the returned StatusCode is 2XX.
-      //
-      JsonValueFree (JsonValue);
-    }
-  }
-
-  return Status;
-}
-
-/**
-  Dump text in fractions.
-
-  @param[in]  String   ASCII string to dump.
-
-**/
-VOID
-RedfishDumpJsonStringFractions (
-  IN CHAR8  *String
-  )
-{
-  CHAR8  *NextFraction;
-  UINTN  StringFractionSize;
-  UINTN  StrLen;
-  UINTN  Count;
-  CHAR8  BackupChar;
-
-  StringFractionSize = 200;
-  if (String == NULL) {
-    return;
-  }
-
-  DEBUG ((DEBUG_MANAGEABILITY, "JSON text:\n"));
-  NextFraction = String;
-  StrLen       = AsciiStrLen (String);
-  if (StrLen == 0) {
-    return;
-  }
-
-  for (Count = 0; Count < (StrLen / StringFractionSize); Count++) {
-    BackupChar                           = *(NextFraction + StringFractionSize);
-    *(NextFraction + StringFractionSize) = 0;
-    DEBUG ((DEBUG_MANAGEABILITY, "%a", NextFraction));
-    *(NextFraction + StringFractionSize) = BackupChar;
-    NextFraction                        += StringFractionSize;
-  }
-
-  if ((StrLen % StringFractionSize) != 0) {
-    DEBUG ((DEBUG_MANAGEABILITY, "%a\n\n", NextFraction));
-  }
-}
-
-/**
-  Dump text in JSON value.
-
-  @param[in]  JsonValue       The Redfish JSON value to dump.
-
-**/
-VOID
-RedfishDumpJson (
-  IN EDKII_JSON_VALUE  JsonValue
-  )
-{
-  CHAR8  *String;
-
-  String = JsonDumpString (JsonValue, 0);
-  if (String == NULL) {
-    return;
-  }
-
-  RedfishDumpJsonStringFractions (String);
-  FreePool (String);
-}
-
-/**
-  Extract the JSON text content from REDFISH_PAYLOAD and dump to debug console.
-
-  @param[in]  Payload       The Redfish payload to dump.
-
-**/
-VOID
-RedfishDumpPayload (
-  IN REDFISH_PAYLOAD  Payload
-  )
-{
-  EDKII_JSON_VALUE  JsonValue;
-  CHAR8             *String;
-
-  JsonValue = NULL;
-  String    = NULL;
-
-  if (Payload == NULL) {
-    return;
-  }
-
-  JsonValue = RedfishJsonInPayload (Payload);
-  if (JsonValue == NULL) {
-    return;
-  }
-
-  String = JsonDumpString (JsonValue, 0);
-  if (String == NULL) {
-    return;
-  }
-
-  RedfishDumpJsonStringFractions (String);
-  FreePool (String);
-}
-
-/**
-  This function will cleanup the HTTP header and Redfish payload resources.
-
-  @param[in]  StatusCode        The status code in HTTP response message.
-  @param[in]  HeaderCount       Number of HTTP header structures in Headers list.
-  @param[in]  Headers           Array containing list of HTTP headers.
-  @param[in]  Payload           The Redfish payload to dump.
-
-**/
-VOID
-RedfishFreeResponse (
-  IN EFI_HTTP_STATUS_CODE  *StatusCode,
-  IN UINTN                 HeaderCount,
-  IN EFI_HTTP_HEADER       *Headers,
-  IN REDFISH_PAYLOAD       Payload
-  )
-{
-  if (StatusCode != NULL) {
-    FreePool (StatusCode);
-    StatusCode = NULL;
-  }
-
-  if ((HeaderCount != 0) && (Headers != NULL)) {
-    HttpFreeHeaderFields (Headers, HeaderCount);
-    Headers = NULL;
-  }
-
-  if (Payload != NULL) {
-    RedfishCleanupPayload (Payload);
-    Payload = NULL;
-  }
-}
-
-/**
-  Check if the "@odata.type" in Payload is valid or not.
-
-  @param[in]  Payload                  The Redfish payload to be checked.
-  @param[in]  OdataTypeName            OdataType will be retrieved from mapping list.
-  @param[in]  OdataTypeMappingList     The list of OdataType.
-  @param[in]  OdataTypeMappingListSize The number of mapping list
-
-  @return TRUE if the "@odata.type" in Payload is valid, otherwise FALSE.
-
-**/
-BOOLEAN
-RedfishIsValidOdataType (
-  IN REDFISH_PAYLOAD             Payload,
-  IN CONST CHAR8                 *OdataTypeName,
-  IN REDFISH_ODATA_TYPE_MAPPING  *OdataTypeMappingList,
-  IN UINTN                       OdataTypeMappingListSize
-  )
-{
-  UINTN             Index;
-  EDKII_JSON_VALUE  OdataType;
-  EDKII_JSON_VALUE  JsonValue;
-
-  if ((Payload == NULL) || (OdataTypeName == NULL)) {
-    return FALSE;
-  }
-
-  JsonValue = RedfishJsonInPayload (Payload);
-  if (!JsonValueIsObject (JsonValue)) {
-    return FALSE;
-  }
-
-  OdataType = JsonObjectGetValue (JsonValueGetObject (JsonValue), "@odata.type");
-  if (!JsonValueIsString (OdataType) || (JsonValueGetAsciiString (OdataType) == NULL)) {
-    return FALSE;
-  }
-
-  for (Index = 0; Index < OdataTypeMappingListSize; Index++) {
-    if ((AsciiStrCmp (OdataTypeMappingList[Index].OdataTypeName, OdataTypeName) == 0) &&
-        (AsciiStrCmp (OdataTypeMappingList[Index].OdataType, JsonValueGetAsciiString (OdataType)) == 0))
-    {
-      return TRUE;
-    }
-  }
-
-  DEBUG ((DEBUG_MANAGEABILITY, "%a: This Odata type is not in the list.\n", __func__));
-  return FALSE;
-}
-
-/**
-  Check if the payload is collection
-
-  @param[in]  Payload                  The Redfish payload to be checked.
-
-  @return TRUE if the payload is  collection.
-
-**/
-BOOLEAN
-RedfishIsPayloadCollection (
-  IN REDFISH_PAYLOAD  Payload
-  )
-{
-  return isPayloadCollection (Payload);
-}
-
-/**
-  Get collection size.
-
-  @param[in]  Payload         The Redfish collection payload
-  @param[in]  CollectionSize  Size of this collection
-
-  @return EFI_SUCCESS              Collection size is returned in CollectionSize
-  @return EFI_INVALID_PARAMETER    The payload is not a collection.
-**/
-EFI_STATUS
-RedfishGetCollectionSize (
-  IN REDFISH_PAYLOAD  Payload,
-  IN UINTN            *CollectionSize
-  )
-{
-  if ((Payload == NULL) || (CollectionSize == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (!RedfishIsPayloadCollection (Payload)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  *CollectionSize = (UINTN)getCollectionSize (Payload);
-  return EFI_SUCCESS;
-}
-
-/**
-  Get Redfish payload of collection member
-
-  @param[in]  Payload    The Redfish collection payload
-  @param[in]  Index      Index of collection member
-
-  @return NULL           Fail to get collection member.
-  @return Non NULL       Payload is returned.
-**/
-REDFISH_PAYLOAD
-RedfishGetPayloadByIndex (
-  IN REDFISH_PAYLOAD  Payload,
-  IN UINTN            Index
-  )
-{
-  REDFISH_RESPONSE  RedfishResponse;
-  REDFISH_PAYLOAD   PayloadReturn;
-
-  PayloadReturn = (VOID *)getPayloadByIndex (Payload, Index, &RedfishResponse.StatusCode);
-  if ((PayloadReturn == NULL) ||
-      ((*(RedfishResponse.StatusCode) < HTTP_STATUS_200_OK) && (*(RedfishResponse.StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT)))
-  {
-    return NULL;
-  }
-
-  return PayloadReturn;
-}
-
-/**
-  Check and return Redfish resource of the given Redpath.
-
-  @param[in]  RedfishService  Pointer to REDFISH_SERVICE
-  @param[in]  Redpath         Redpath of the resource.
-  @param[in]  Response        Optional return the resource.
-
-  @return EFI_STATUS
-**/
-EFI_STATUS
-RedfishCheckIfRedpathExist (
-  IN REDFISH_SERVICE   RedfishService,
-  IN CHAR8             *Redpath,
-  IN REDFISH_RESPONSE  *Response OPTIONAL
-  )
-{
-  EFI_STATUS        Status;
-  REDFISH_RESPONSE  TempResponse;
-
-  if (Redpath == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Status = RedfishGetByService (RedfishService, Redpath, &TempResponse);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  if (Response == NULL) {
-    RedfishFreeResponse (
-      TempResponse.StatusCode,
-      TempResponse.HeaderCount,
-      TempResponse.Headers,
-      TempResponse.Payload
-      );
-  } else {
-    CopyMem ((VOID *)Response, (VOID *)&TempResponse, sizeof (REDFISH_RESPONSE));
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Use HTTP PUT to create new Redfish resource in the Resource Collection.
-
-  This function uses the RedfishService to put a Redfish resource addressed by
-  Uri (only the relative path is required). Changes to one or more properties within
-  the target resource are represented in the input Content, properties not specified
-  in Content won't be changed by this request. The corresponding redfish response will
-  returned, including HTTP StatusCode, Headers and Payload which record any HTTP response
-  messages.
-
-  Callers are responsible for freeing the HTTP StatusCode, Headers and Payload returned in
-  redfish response data.
-
-  @param[in]    RedfishService        The Service to access the Redfish resources.
-  @param[in]    Uri                   Relative path to address the resource.
-  @param[in]    Content               JSON represented properties to be update.
-  @param[in]    ContentSize           Size of the Content to be send to Redfish service
-  @param[in]    ContentType           Type of the Content to be send to Redfish service
-  @param[out]   RedResponse           Pointer to the Redfish response data.
-
-  @retval EFI_SUCCESS             The operation is successful, indicates the HTTP StatusCode is not
-                                  NULL and the value is 2XX. The Redfish resource will be returned
-                                  in Payload within RedResponse if server send it back in the HTTP
-                                  response message body.
-  @retval EFI_INVALID_PARAMETER   RedfishService, Uri, Content, or RedResponse is NULL.
-  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. Callers can get
-                                  more error info from returned HTTP StatusCode, Headers and Payload
-                                  within RedResponse:
-                                  1. If the returned StatusCode is NULL, indicates any error happen.
-                                  2. If the returned StatusCode is not NULL and the value is not 2XX,
-                                     indicates any error happen.
-**/
-EFI_STATUS
-EFIAPI
-RedfishPutToUri (
-  IN     REDFISH_SERVICE   RedfishService,
-  IN     CONST CHAR8       *Uri,
-  IN     CONST CHAR8       *Content,
-  IN     UINTN             ContentSize OPTIONAL,
-  IN     CONST CHAR8       *ContentType OPTIONAL,
-  OUT    REDFISH_RESPONSE  *RedResponse
-  )
-{
-  EFI_STATUS        Status;
-  EDKII_JSON_VALUE  JsonValue;
-
-  Status    = EFI_SUCCESS;
-  JsonValue = NULL;
-
-  if ((RedfishService == NULL) || (Uri == NULL) || (Content == NULL) || (RedResponse == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  ZeroMem (RedResponse, sizeof (REDFISH_RESPONSE));
-
-  JsonValue = (EDKII_JSON_VALUE)putUriFromServiceEx (
-                                  RedfishService,
-                                  Uri,
-                                  Content,
-                                  ContentSize,
-                                  ContentType,
-                                  &(RedResponse->Headers),
-                                  &(RedResponse->HeaderCount),
-                                  &(RedResponse->StatusCode)
-                                  );
-
-  //
-  // 1. If the returned StatusCode is NULL, indicates any error happen.
-  //
-  if (RedResponse->StatusCode == NULL) {
-    Status = EFI_DEVICE_ERROR;
-    goto ON_EXIT;
-  }
-
-  //
-  // 2. If the returned StatusCode is not NULL and the value is not 2XX, indicates any error happen.
-  //    NOTE: If there is any error message returned from server, it will be returned in
-  //          Payload within RedResponse.
-  //
-  if ((*(RedResponse->StatusCode) < HTTP_STATUS_200_OK) || \
-      (*(RedResponse->StatusCode) > HTTP_STATUS_206_PARTIAL_CONTENT))
-  {
-    Status = EFI_DEVICE_ERROR;
-  }
-
-ON_EXIT:
-  if (JsonValue != NULL) {
-    RedResponse->Payload = createRedfishPayload (JsonValue, RedfishService);
-    if (RedResponse->Payload == NULL) {
-      //
-      // Ignore the error when create RedfishPayload, just free the JsonValue since it's not what
-      // we care about if the returned StatusCode is 2XX.
-      //
-      JsonValueFree (JsonValue);
-    }
-  }
-
-  return Status;
-}
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishMisc.c b/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishMisc.c
deleted file mode 100644
index b6e9a1117..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/RedfishMisc.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/** @file
-  Internal Functions for RedfishLib.
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
-  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "RedfishMisc.h"
-
-EDKII_REDFISH_CREDENTIAL_PROTOCOL  *mCredentialProtocol = NULL;
-
-/**
-  This function returns the string of Redfish service version.
-
-  @param[in]   RedfishService Redfish service instance.
-  @param[out]  ServiceVersionStr   Redfish service string.
-
-  @return     EFI_STATUS
-
-**/
-EFI_STATUS
-RedfishGetServiceVersion (
-  IN  REDFISH_SERVICE  RedfishService,
-  OUT CHAR8            **ServiceVersionStr
-  )
-{
-  redfishService  *Redfish;
-  CHAR8           **KeysArray;
-  UINTN           KeysNum;
-
-  if ((RedfishService == NULL) || (ServiceVersionStr == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Redfish = (redfishService *)RedfishService;
-  if (Redfish->versions == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  KeysArray = JsonObjectGetKeys (Redfish->versions, &KeysNum);
-  if ((KeysNum == 0) || (KeysArray  == NULL)) {
-    return EFI_NOT_FOUND;
-  }
-
-  *ServiceVersionStr = *KeysArray;
-  return EFI_SUCCESS;
-}
-
-/**
-  Creates a REDFISH_SERVICE which can be later used to access the Redfish resources.
-
-  This function will configure REST EX child according to parameters described in
-  Redfish network host interface in SMBIOS type 42 record. The service enumerator will also
-  handle the authentication flow automatically if HTTP basic auth or Redfish session
-  login is configured to use.
-
-  @param[in]  RedfishConfigServiceInfo Redfish service information the EFI Redfish
-                                       feature driver communicates with.
-  @param[in]  AuthMethod   None, HTTP basic auth, or Redfish session login.
-  @param[in]  UserId       User Name used for authentication.
-  @param[in]  Password     Password used for authentication.
-
-  @return     New created Redfish service, or NULL if error happens.
-
-**/
-REDFISH_SERVICE
-RedfishCreateLibredfishService (
-  IN  REDFISH_CONFIG_SERVICE_INFORMATION  *RedfishConfigServiceInfo,
-  IN  EDKII_REDFISH_AUTH_METHOD           AuthMethod,
-  IN  CHAR8                               *UserId,
-  IN  CHAR8                               *Password
-  )
-{
-  UINTN                     Flags;
-  enumeratorAuthentication  Auth;
-  redfishService            *Redfish;
-
-  Redfish = NULL;
-
-  ZeroMem (&Auth, sizeof (Auth));
-  if (AuthMethod == AuthMethodHttpBasic) {
-    Auth.authType = REDFISH_AUTH_BASIC;
-  } else if (AuthMethod == AuthMethodRedfishSession) {
-    Auth.authType = REDFISH_AUTH_SESSION;
-  }
-
-  Auth.authCodes.userPass.username = UserId;
-  Auth.authCodes.userPass.password = Password;
-
-  Flags = REDFISH_FLAG_SERVICE_NO_VERSION_DOC;
-
-  if (AuthMethod != AuthMethodNone) {
-    Redfish = createServiceEnumerator (RedfishConfigServiceInfo, NULL, &Auth, (unsigned int)Flags);
-  } else {
-    Redfish = createServiceEnumerator (RedfishConfigServiceInfo, NULL, NULL, (unsigned int)Flags);
-  }
-
-  //
-  // Zero the Password after use.
-  //
-  if (Password != NULL) {
-    ZeroMem (Password, AsciiStrLen (Password));
-  }
-
-  return (REDFISH_SERVICE)Redfish;
-}
-
-/**
-  Retrieve platform's Redfish authentication information.
-
-  This functions returns the Redfish authentication method together with the user
-  Id and password.
-  For AuthMethodNone, UserId and Password will point to NULL which means authentication
-  is not required to access the Redfish service.
-  For AuthMethodHttpBasic, the UserId and Password could be used for
-  HTTP header authentication as defined by RFC7235. For AuthMethodRedfishSession,
-  the UserId and Password could be used for Redfish session login as defined by
-  Redfish API specification (DSP0266).
-
-  Callers are responsible for freeing the returned string storage pointed by UserId
-  and Password.
-
-  @param[out]  AuthMethod          Type of Redfish authentication method.
-  @param[out]  UserId              The pointer to store the returned UserId string.
-  @param[out]  Password            The pointer to store the returned Password string.
-
-  @retval EFI_SUCCESS              Get the authentication information successfully.
-  @retval EFI_INVALID_PARAMETER    AuthMethod or UserId or Password is NULL.
-  @retval EFI_UNSUPPORTED          Unsupported authentication method is found.
-**/
-EFI_STATUS
-RedfishGetAuthInfo (
-  OUT  EDKII_REDFISH_AUTH_METHOD  *AuthMethod,
-  OUT  CHAR8                      **UserId,
-  OUT  CHAR8                      **Password
-  )
-{
-  EFI_STATUS  Status;
-
-  if ((AuthMethod == NULL) || (UserId == NULL) || (Password == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Locate Redfish Credential Protocol.
-  //
-  if (mCredentialProtocol == NULL) {
-    Status = gBS->LocateProtocol (&gEdkIIRedfishCredentialProtocolGuid, NULL, (VOID **)&mCredentialProtocol);
-    if (EFI_ERROR (Status)) {
-      return EFI_UNSUPPORTED;
-    }
-  }
-
-  ASSERT (mCredentialProtocol != NULL);
-
-  Status = mCredentialProtocol->GetAuthInfo (mCredentialProtocol, AuthMethod, UserId, Password);
-  if (EFI_ERROR (Status)) {
-    DEBUG ((DEBUG_ERROR, "RedfishGetAuthInfo: failed to retrieve Redfish credential - %r\n", Status));
-    return Status;
-  }
-
-  return Status;
-}
-
-/**
-  This function returns the string of Redfish service version.
-
-  @param[in]   ServiceVersionStr The string of Redfish service version.
-  @param[in]   Url               The URL to build Redpath with ID.
-                                 Start with "/", for example "/Registries"
-  @param[in]   Id                ID string
-  @param[out]  Redpath           Pointer to retrieved Redpath, caller has to free
-                                 the memory allocated for this string.
-  @return     EFI_STATUS
-
-**/
-EFI_STATUS
-RedfishBuildRedpathUseId (
-  IN  CHAR8  *ServiceVersionStr,
-  IN  CHAR8  *Url,
-  IN  CHAR8  *Id,
-  OUT CHAR8  **Redpath
-  )
-{
-  UINTN  RedpathSize;
-
-  if ((Redpath == NULL) || (ServiceVersionStr == NULL) || (Url == NULL) || (Id == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  RedpathSize = AsciiStrLen ("/") +
-                AsciiStrLen (ServiceVersionStr) +
-                AsciiStrLen (Url) +
-                AsciiStrLen ("[Id=]") +
-                AsciiStrLen (Id) + 1;
-  *Redpath = AllocatePool (RedpathSize);
-  if (*Redpath == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  AsciiSPrint (*Redpath, RedpathSize, "/%a%a[Id=%a]", ServiceVersionStr, Url, Id);
-  return EFI_SUCCESS;
-}
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/payload.c b/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/payload.c
deleted file mode 100644
index d845d51fe..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/payload.c
+++ /dev/null
@@ -1,918 +0,0 @@
-/** @file
-  This file is cloned from DMTF libredfish library tag v1.0.0 and maintained
-  by EDKII.
-
-//----------------------------------------------------------------------------
-// Copyright Notice:
-// Copyright 2017 Distributed Management Task Force, Inc. All rights reserved.
-// License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libredfish/LICENSE.md
-//----------------------------------------------------------------------------
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
-  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-#include <redfishPayload.h>
-
-static redfishPayload *
-getOpResult (
-  redfishPayload        *payload,
-  const char            *propName,
-  const char            *op,
-  const char            *value,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-static redfishPayload *
-collectionEvalOp (
-  redfishPayload        *payload,
-  const char            *propName,
-  const char            *op,
-  const char            *value,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-static redfishPayload *
-arrayEvalOp (
-  redfishPayload        *payload,
-  const char            *propName,
-  const char            *op,
-  const char            *value,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  );
-
-static redfishPayload *
-createCollection (
-  redfishService  *service,
-  size_t          count,
-  redfishPayload  **payloads
-  );
-
-static json_t *
-json_object_get_by_index (
-  json_t  *json,
-  size_t  index
-  );
-
-bool
-isPayloadCollection (
-  redfishPayload  *payload
-  )
-{
-  json_t  *members;
-  json_t  *count;
-
-  if (!payload || !json_is_object (payload->json)) {
-    return false;
-  }
-
-  members = json_object_get (payload->json, "Members");
-  count   = json_object_get (payload->json, "Members@odata.count");
-  return ((members != NULL) && (count != NULL));
-}
-
-size_t
-getCollectionSize (
-  redfishPayload  *payload
-  )
-{
-  json_t  *members;
-  json_t  *count;
-
-  if (!payload || !json_is_object (payload->json)) {
-    return 0;
-  }
-
-  members = json_object_get (payload->json, "Members");
-  count   = json_object_get (payload->json, "Members@odata.count");
-  if (!members || !count) {
-    return 0;
-  }
-
-  return (size_t)json_integer_value (count);
-}
-
-bool
-isPayloadArray (
-  redfishPayload  *payload
-  )
-{
-  if (!payload || !json_is_array (payload->json)) {
-    return false;
-  }
-
-  return true;
-}
-
-char *
-payloadToString (
-  redfishPayload  *payload,
-  bool            prettyPrint
-  )
-{
-  size_t  flags = 0;
-
-  if (!payload) {
-    return NULL;
-  }
-
-  if (prettyPrint) {
-    flags = JSON_INDENT (2);
-  }
-
-  return json_dumps (payload->json, flags);
-}
-
-redfishPayload *
-createRedfishPayload (
-  json_t          *value,
-  redfishService  *service
-  )
-{
-  redfishPayload  *payload;
-
-  payload = (redfishPayload *)malloc (sizeof (redfishPayload));
-  if (payload != NULL) {
-    payload->json    = value;
-    payload->service = service;
-  }
-
-  return payload;
-}
-
-redfishPayload *
-getPayloadByNodeName (
-  redfishPayload        *payload,
-  const char            *nodeName,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  json_t      *value;
-  json_t      *odataId;
-  const char  *uri;
-
-  if (!payload || !nodeName || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  value = json_object_get (payload->json, nodeName);
-  if (value == NULL) {
-    return NULL;
-  }
-
-  json_incref (value);
-  if (json_object_size (value) == 1) {
-    odataId = json_object_get (value, "@odata.id");
-    if (odataId != NULL) {
-      json_incref (odataId);
-      uri = json_string_value (odataId);
-      json_decref (value);
-      value = getUriFromService (payload->service, uri, StatusCode);
-      json_decref (odataId);
-      if ((value == NULL) || (*StatusCode == NULL)) {
-        return NULL;
-      }
-    }
-  }
-
-  if ((*StatusCode == NULL) || ((**StatusCode >= HTTP_STATUS_200_OK) && (**StatusCode <= HTTP_STATUS_206_PARTIAL_CONTENT))) {
-    if (json_is_string (value)) {
-      odataId = json_object ();
-      json_object_set (odataId, nodeName, value);
-      json_decref (value);
-      value = odataId;
-    }
-  }
-
-  return createRedfishPayload (value, payload->service);
-}
-
-redfishPayload *
-getPayloadByIndex (
-  redfishPayload        *payload,
-  size_t                index,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  json_t      *value = NULL;
-  json_t      *odataId;
-  const char  *uri;
-  BOOLEAN     FromServerFlag = FALSE;
-
-  if (!payload || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  if (isPayloadCollection (payload)) {
-    redfishPayload  *members = getPayloadByNodeName (payload, "Members", StatusCode);
-    if (((*StatusCode == NULL) && (members == NULL)) ||
-        ((*StatusCode != NULL) && ((**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))))
-    {
-      return members;
-    }
-
-    if (*StatusCode != NULL) {
-      //
-      // The Payload (members) are retrived from server.
-      //
-      FreePool (*StatusCode);
-      *StatusCode    = NULL;
-      FromServerFlag = TRUE;
-    }
-
-    redfishPayload  *ret = getPayloadByIndex (members, index, StatusCode);
-    if ((*StatusCode == NULL) && (ret != NULL) && FromServerFlag) {
-      //
-      // In such a case, the Redfish resource is parsed from the input payload (members) directly.
-      // Since the members are retrived from server, we still return HTTP_STATUS_200_OK.
-      //
-      *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-      if (*StatusCode == NULL) {
-        ret = NULL;
-      } else {
-        **StatusCode = HTTP_STATUS_200_OK;
-      }
-    }
-
-    cleanupPayload (members);
-    return ret;
-  }
-
-  if (json_is_array (payload->json)) {
-    //
-    // The valid range for index is from 0 to the return value of json_array_size() minus 1
-    //
-    value = json_array_get (payload->json, index);
-  } else if (json_is_object (payload->json)) {
-    value = json_object_get_by_index (payload->json, index);
-  }
-
-  if (value == NULL) {
-    return NULL;
-  }
-
-  json_incref (value);
-  if (json_object_size (value) == 1) {
-    odataId = json_object_get (value, "@odata.id");
-    if (odataId != NULL) {
-      uri = json_string_value (odataId);
-      json_decref (value);
-      value = getUriFromService (payload->service, uri, StatusCode);
-      if (value == NULL) {
-        return NULL;
-      }
-    }
-  }
-
-  return createRedfishPayload (value, payload->service);
-}
-
-redfishPayload *
-getPayloadForPath (
-  redfishPayload        *payload,
-  redPathNode           *redpath,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  redfishPayload  *ret = NULL;
-  redfishPayload  *tmp;
-
-  if (!payload || !redpath || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-  BOOLEAN  FromServerFlag = FALSE;
-
-  if (redpath->nodeName) {
-    ret = getPayloadByNodeName (payload, redpath->nodeName, StatusCode);
-    if (((*StatusCode == NULL) && (ret == NULL)) ||
-        ((*StatusCode != NULL) && ((**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))))
-    {
-      //
-      // Any error happen, return directly.
-      //
-      return ret;
-    }
-  } else if (redpath->isIndex) {
-    ASSERT (redpath->index >= 1);
-    ret = getPayloadByIndex (payload, redpath->index - 1, StatusCode);
-    if (((*StatusCode == NULL) && (ret == NULL)) ||
-        ((*StatusCode != NULL) && ((**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))))
-    {
-      //
-      // Any error happen, return directly.
-      //
-      return ret;
-    }
-  } else if (redpath->op) {
-    ret = getOpResult (payload, redpath->propName, redpath->op, redpath->value, StatusCode);
-    if (((*StatusCode == NULL) && (ret == NULL)) ||
-        ((*StatusCode != NULL) && ((**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))))
-    {
-      //
-      // Any error happen, return directly.
-      //
-      return ret;
-    }
-  } else {
-    return NULL;
-  }
-
-  if ((redpath->next == NULL) || (ret == NULL)) {
-    return ret;
-  } else {
-    if (*StatusCode != NULL) {
-      FreePool (*StatusCode);
-      *StatusCode    = NULL;
-      FromServerFlag = TRUE;
-    }
-
-    tmp = getPayloadForPath (ret, redpath->next, StatusCode);
-    if ((*StatusCode == NULL) && (tmp != NULL) && FromServerFlag) {
-      //
-      // In such a case, the Redfish resource is parsed from the input payload (ret) directly.
-      // Since the ret are retrived from server, we still return HTTP_STATUS_200_OK.
-      //
-      *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-      if (*StatusCode == NULL) {
-        tmp = NULL;
-      } else {
-        **StatusCode = HTTP_STATUS_200_OK;
-      }
-    }
-
-    cleanupPayload (ret);
-    return tmp;
-  }
-}
-
-redfishPayload *
-getPayloadForPathString (
-  redfishPayload        *payload,
-  const char            *string,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  redPathNode     *redpath;
-  redfishPayload  *ret;
-
-  if (!string || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  redpath = parseRedPath (string);
-  if (redpath == NULL) {
-    return NULL;
-  }
-
-  ret = getPayloadForPath (payload, redpath, StatusCode);
-  cleanupRedPath (redpath);
-  return ret;
-}
-
-redfishPayload *
-patchPayloadEx (
-  redfishPayload        *target,
-  redfishPayload        *payload,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  json_t  *json;
-  char    *content;
-  char    *uri;
-
-  if (!target || !payload || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  json = json_object_get (target->json, "@odata.id");
-  if (json == NULL) {
-    return NULL;
-  }
-
-  uri = strdup (json_string_value (json));
-
-  content = json_dumps (payload->json, 0);
-  json_decref (json);
-
-  json = patchUriFromServiceEx (target->service, uri, content, Headers, HeaderCount, StatusCode);
-  free (uri);
-  free (content);
-  if (json == NULL) {
-    return NULL;
-  }
-
-  return createRedfishPayload (json, target->service);
-}
-
-redfishPayload *
-patchPayload (
-  redfishPayload        *target,
-  redfishPayload        *payload,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  json_t  *json;
-  char    *content;
-  char    *uri;
-
-  if (!target || !payload || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  json = json_object_get (target->json, "@odata.id");
-  if (json == NULL) {
-    return NULL;
-  }
-
-  uri = strdup (json_string_value (json));
-
-  content = json_dumps (payload->json, 0);
-  json_decref (json);
-
-  json = patchUriFromService (target->service, uri, content, StatusCode);
-  free (uri);
-  free (content);
-  if (json == NULL) {
-    return NULL;
-  }
-
-  return createRedfishPayload (json, target->service);
-}
-
-redfishPayload *
-postContentToPayloadEx (
-  redfishPayload        *target,
-  const char            *data,
-  size_t                dataSize,
-  const char            *contentType,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  json_t  *json;
-  char    *uri;
-
-  if (!target || !data || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  json = json_object_get (target->json, "@odata.id");
-  if (json == NULL) {
-    json = json_object_get (target->json, "target");
-    if (json == NULL) {
-      return NULL;
-    }
-  }
-
-  uri  = strdup (json_string_value (json));
-  json = postUriFromServiceEx (target->service, uri, data, dataSize, contentType, Headers, HeaderCount, StatusCode);
-  free (uri);
-  if (json == NULL) {
-    return NULL;
-  }
-
-  return createRedfishPayload (json, target->service);
-}
-
-redfishPayload *
-postContentToPayload (
-  redfishPayload        *target,
-  const char            *data,
-  size_t                dataSize,
-  const char            *contentType,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  json_t  *json;
-  char    *uri;
-
-  if (!target || !data || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  json = json_object_get (target->json, "@odata.id");
-  if (json == NULL) {
-    json = json_object_get (target->json, "target");
-    if (json == NULL) {
-      return NULL;
-    }
-  }
-
-  uri  = strdup (json_string_value (json));
-  json = postUriFromService (target->service, uri, data, dataSize, contentType, StatusCode);
-  free (uri);
-  if (json == NULL) {
-    return NULL;
-  }
-
-  return createRedfishPayload (json, target->service);
-}
-
-redfishPayload *
-postPayloadEx (
-  redfishPayload        *target,
-  redfishPayload        *payload,
-  EFI_HTTP_HEADER       **Headers,
-  UINTN                 *HeaderCount,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  char            *content;
-  redfishPayload  *ret;
-
-  if (!target || !payload || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  if (!json_is_object (payload->json)) {
-    return NULL;
-  }
-
-  content = payloadToString (payload, false);
-  ret     = postContentToPayloadEx (target, content, strlen (content), NULL, Headers, HeaderCount, StatusCode);
-  free (content);
-  return ret;
-}
-
-redfishPayload *
-postPayload (
-  redfishPayload        *target,
-  redfishPayload        *payload,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  char            *content;
-  redfishPayload  *ret;
-
-  if (!target || !payload || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  if (!json_is_object (payload->json)) {
-    return NULL;
-  }
-
-  content = payloadToString (payload, false);
-  ret     = postContentToPayload (target, content, strlen (content), NULL, StatusCode);
-  free (content);
-  return ret;
-}
-
-void
-cleanupPayload (
-  redfishPayload  *payload
-  )
-{
-  if (!payload) {
-    return;
-  }
-
-  json_decref (payload->json);
-  // Don't free payload->service, let the caller handle cleaning up the service
-  free (payload);
-}
-
-static redfishPayload *
-getOpResult (
-  redfishPayload        *payload,
-  const char            *propName,
-  const char            *op,
-  const char            *value,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  const char      *propStr;
-  json_t          *stringProp;
-  bool            ret = false;
-  redfishPayload  *prop;
-  long long       intVal, intPropVal;
-  json_type       jsonType;
-
-  if (isPayloadCollection (payload)) {
-    return collectionEvalOp (payload, propName, op, value, StatusCode);
-  }
-
-  if (isPayloadArray (payload)) {
-    return arrayEvalOp (payload, propName, op, value, StatusCode);
-  }
-
-  prop = getPayloadByNodeName (payload, propName, StatusCode);
-  if (((*StatusCode == NULL) && (prop == NULL)) ||
-      ((*StatusCode != NULL) && ((**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))))
-  {
-    return prop;
-  }
-
-  stringProp = prop->json;
-  jsonType   =  JsonGetType (prop->json);
-  switch (jsonType) {
-    case JSON_OBJECT:
-      stringProp = json_object_get (prop->json, propName);
-    case JSON_STRING:
-      if (strcmp (op, "=") == 0) {
-        propStr = json_string_value (stringProp);
-        if (propStr == NULL) {
-          cleanupPayload (prop);
-          return NULL;
-        }
-
-        ret = (strcmp (propStr, value) == 0);
-      } else if (strcmp (op, "~") == 0) {
-        propStr = json_string_value (stringProp);
-        if (propStr == NULL) {
-          cleanupPayload (prop);
-          return NULL;
-        }
-
-        ret = (strcasecmp (propStr, value) == 0);
-      }
-
-      break;
-    case JSON_TRUE:
-      if (strcmp (op, "=") == 0) {
-        ret = (strcmp (value, "true") == 0);
-      }
-
-      break;
-    case JSON_FALSE:
-      if (strcmp (op, "=") == 0) {
-        ret = (strcmp (value, "false") == 0);
-      }
-
-      break;
-    case JSON_INTEGER:
-      intPropVal = json_integer_value (prop->json);
-      intVal     = strtoll (value, NULL, 0);
-      if (strcmp (op, "=") == 0) {
-        ret = (intPropVal == intVal);
-      } else if (strcmp (op, "<") == 0) {
-        ret = (intPropVal < intVal);
-      } else if (strcmp (op, ">") == 0) {
-        ret = (intPropVal > intVal);
-      } else if (strcmp (op, "<=") == 0) {
-        ret = (intPropVal <= intVal);
-      } else if (strcmp (op, ">=") == 0) {
-        ret = (intPropVal >= intVal);
-      }
-
-      break;
-    default:
-      break;
-  }
-
-  cleanupPayload (prop);
-  if (ret) {
-    return payload;
-  } else {
-    return NULL;
-  }
-}
-
-static redfishPayload *
-collectionEvalOp (
-  redfishPayload        *payload,
-  const char            *propName,
-  const char            *op,
-  const char            *value,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  redfishPayload  *ret;
-  redfishPayload  *tmp;
-  redfishPayload  *members;
-  redfishPayload  **valid;
-  size_t          validMax;
-  size_t          validCount = 0;
-  size_t          i;
-
-  validMax = getCollectionSize (payload);
-  if (validMax == 0) {
-    return NULL;
-  }
-
-  valid = (redfishPayload **)calloc (validMax, sizeof (redfishPayload *));
-  if (valid == NULL) {
-    return NULL;
-  }
-
-  /*Technically getPayloadByIndex would do this, but this optimizes things*/
-  members = getPayloadByNodeName (payload, "Members", StatusCode);
-  if (((*StatusCode == NULL) && (members == NULL)) ||
-      ((*StatusCode != NULL) && ((**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))))
-  {
-    return members;
-  }
-
-  for (i = 0; i < validMax; i++) {
-    if (*StatusCode != NULL) {
-      FreePool (*StatusCode);
-      *StatusCode = NULL;
-    }
-
-    tmp = getPayloadByIndex (members, i, StatusCode);
-    if (((*StatusCode == NULL) && (tmp == NULL)) ||
-        ((*StatusCode != NULL) && ((**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))))
-    {
-      return tmp;
-    }
-
-    if (*StatusCode != NULL) {
-      FreePool (*StatusCode);
-      *StatusCode = NULL;
-    }
-
-    valid[validCount] = getOpResult (tmp, propName, op, value, StatusCode);
-
-    /*
-    if ((*StatusCode == NULL && valid[validCount] == NULL) ||
-        (*StatusCode != NULL && (**StatusCode < HTTP_STATUS_200_OK || **StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))) {
-      return valid[validCount];
-    }
-    */
-    if (valid[validCount] != NULL) {
-      validCount++;
-    } else {
-      cleanupPayload (tmp);
-    }
-  }
-
-  cleanupPayload (members);
-  if (validCount == 0) {
-    free (valid);
-    return NULL;
-  }
-
-  if (validCount == 1) {
-    ret = valid[0];
-    free (valid);
-    return ret;
-  } else {
-    ret = createCollection (payload->service, validCount, valid);
-    free (valid);
-    return ret;
-  }
-}
-
-static redfishPayload *
-arrayEvalOp (
-  redfishPayload        *payload,
-  const char            *propName,
-  const char            *op,
-  const char            *value,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  redfishPayload  *ret;
-  redfishPayload  *tmp;
-  redfishPayload  **valid;
-  size_t          validMax;
-  size_t          validCount = 0;
-  size_t          i;
-
-  validMax = json_array_size (payload->json);
-  if (validMax == 0) {
-    return NULL;
-  }
-
-  valid = (redfishPayload **)calloc (validMax, sizeof (redfishPayload *));
-  if (valid == NULL) {
-    return NULL;
-  }
-
-  for (i = 0; i < validMax; i++) {
-    if (*StatusCode != NULL) {
-      FreePool (*StatusCode);
-      *StatusCode = NULL;
-    }
-
-    tmp = getPayloadByIndex (payload, i, StatusCode);
-    if (((*StatusCode == NULL) && (tmp == NULL)) ||
-        ((*StatusCode != NULL) && ((**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))))
-    {
-      return tmp;
-    }
-
-    if (*StatusCode != NULL) {
-      FreePool (*StatusCode);
-      *StatusCode = NULL;
-    }
-
-    valid[validCount] = getOpResult (tmp, propName, op, value, StatusCode);
-
-    /*
-    if ((*StatusCode == NULL && valid[validCount] == NULL) ||
-        (*StatusCode != NULL && (**StatusCode < HTTP_STATUS_200_OK || **StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT))) {
-      return valid[validCount];
-    }
-    */
-
-    if (valid[validCount] != NULL) {
-      validCount++;
-    } else {
-      cleanupPayload (tmp);
-    }
-  }
-
-  if (validCount == 0) {
-    free (valid);
-    return NULL;
-  }
-
-  if (validCount == 1) {
-    ret = valid[0];
-    free (valid);
-    return ret;
-  } else {
-    ret = createCollection (payload->service, validCount, valid);
-    free (valid);
-    return ret;
-  }
-}
-
-static redfishPayload *
-createCollection (
-  redfishService  *service,
-  size_t          count,
-  redfishPayload  **payloads
-  )
-{
-  redfishPayload  *ret;
-  json_t          *collectionJson = json_object ();
-  json_t          *jcount         = json_integer ((json_int_t)count);
-  json_t          *members        = json_array ();
-  size_t          i;
-
-  if (!collectionJson) {
-    return NULL;
-  }
-
-  if (!members) {
-    json_decref (collectionJson);
-    return NULL;
-  }
-
-  json_object_set (collectionJson, "Members@odata.count", jcount);
-  json_decref (jcount);
-  for (i = 0; i < count; i++) {
-    json_array_append (members, payloads[i]->json);
-    cleanupPayload (payloads[i]);
-  }
-
-  json_object_set (collectionJson, "Members", members);
-  json_decref (members);
-
-  ret = createRedfishPayload (collectionJson, service);
-  return ret;
-}
-
-static json_t *
-json_object_get_by_index (
-  json_t  *json,
-  size_t  index
-  )
-{
-  void    *iter;
-  size_t  i;
-
-  iter = json_object_iter (json);
-  for (i = 0; i < index; i++) {
-    iter = json_object_iter_next (json, iter);
-    if (iter == NULL) {
-      break;
-    }
-  }
-
-  if (iter == NULL) {
-    return NULL;
-  }
-
-  return json_object_iter_value (iter);
-}
-
-/* vim: set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/redpath.c b/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/redpath.c
deleted file mode 100644
index cf5ab8516..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/redpath.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/** @file
-  This file is cloned from DMTF libredfish library tag v1.0.0 and maintained
-  by EDKII.
-
-//----------------------------------------------------------------------------
-// Copyright Notice:
-// Copyright 2017 Distributed Management Task Force, Inc. All rights reserved.
-// License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libredfish/LICENSE.md
-//----------------------------------------------------------------------------
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-#include <redpath.h>
-
-static char *
-getVersion (
-  const char  *path,
-  char        **end
-  );
-
-static void
-parseNode (
-  const char   *path,
-  redPathNode  *node,
-  redPathNode  **end
-  );
-
-static char *
-getStringTill (
-  const char  *string,
-  const char  *terminator,
-  char        **retEnd
-  );
-
-redPathNode *
-parseRedPath (
-  const char  *path
-  )
-{
-  redPathNode  *node;
-  redPathNode  *endNode;
-  char         *curPath;
-  char         *end;
-
-  if (!path || (strlen (path) == 0)) {
-    return NULL;
-  }
-
-  node = (redPathNode *)calloc (1, sizeof (redPathNode));
-  if (!node) {
-    return NULL;
-  }
-
-  if (path[0] == '/') {
-    node->isRoot = true;
-    if (path[1] == 'v') {
-      node->version = getVersion (path+1, &curPath);
-      if (curPath == NULL) {
-        return node;
-      }
-
-      if (curPath[0] == '/') {
-        curPath++;
-      }
-
-      node->next = parseRedPath (curPath);
-    } else {
-      node->next = parseRedPath (path+1);
-    }
-
-    return node;
-  }
-
-  node->isRoot = false;
-  curPath      = getStringTill (path, "/", &end);
-  endNode      = node;
-  parseNode (curPath, node, &endNode);
-  free (curPath);
-  if (end != NULL) {
-    endNode->next = parseRedPath (end+1);
-  }
-
-  return node;
-}
-
-void
-cleanupRedPath (
-  redPathNode  *node
-  )
-{
-  if (!node) {
-    return;
-  }
-
-  cleanupRedPath (node->next);
-  node->next = NULL;
-  if (node->version) {
-    free (node->version);
-  }
-
-  if (node->nodeName) {
-    free (node->nodeName);
-  }
-
-  if (node->op) {
-    free (node->op);
-  }
-
-  if (node->propName) {
-    free (node->propName);
-  }
-
-  if (node->value) {
-    free (node->value);
-  }
-
-  free (node);
-}
-
-static char *
-getVersion (
-  const char  *path,
-  char        **end
-  )
-{
-  return getStringTill (path, "/", end);
-}
-
-static void
-parseNode (
-  const char   *path,
-  redPathNode  *node,
-  redPathNode  **end
-  )
-{
-  char    *indexStart;
-  char    *index;
-  char    *indexEnd;
-  char    *nodeName = getStringTill (path, "[", &indexStart);
-  size_t  tmpIndex;
-  char    *opChars;
-
-  node->nodeName = nodeName;
-  if (indexStart == NULL) {
-    *end = node;
-    return;
-  }
-
-  node->next = (redPathNode *)calloc (1, sizeof (redPathNode));
-  if (!node->next) {
-    return;
-  }
-
-  // Skip past [
-  indexStart++;
-  *end     = node->next;
-  index    = getStringTill (indexStart, "]", NULL);
-  tmpIndex = (size_t)strtoull (index, &indexEnd, 0);
-  if (indexEnd != index) {
-    free (index);
-    node->next->index   = tmpIndex;
-    node->next->isIndex = true;
-    return;
-  }
-
-  opChars = strpbrk (index, "<>=~");
-  if (opChars == NULL) {
-    // TODO handle last() and position()
-    node->next->op       = strdup ("exists");
-    node->next->propName = index;
-    return;
-  }
-
-  node->next->propName = (char *)malloc ((opChars - index)+1);
-  memcpy (node->next->propName, index, (opChars - index));
-  node->next->propName[(opChars - index)] = 0;
-
-  tmpIndex = 1;
-  while (1) {
-    if ((opChars[tmpIndex] == '=') || (opChars[tmpIndex] == '<') || (opChars[tmpIndex] == '>') || (opChars[tmpIndex] == '~')) {
-      tmpIndex++;
-      continue;
-    }
-
-    break;
-  }
-
-  node->next->op = (char *)malloc (tmpIndex+1);
-  memcpy (node->next->op, opChars, tmpIndex);
-  node->next->op[tmpIndex] = 0;
-
-  node->next->value = strdup (opChars+tmpIndex);
-  free (index);
-}
-
-static char *
-getStringTill (
-  const char  *string,
-  const char  *terminator,
-  char        **retEnd
-  )
-{
-  char  *ret;
-  char  *end;
-
-  end = strstr ((char *)string, terminator);
-  if (retEnd) {
-    *retEnd = end;
-  }
-
-  if (end == NULL) {
-    // No terminator
-    return strdup (string);
-  }
-
-  ret = (char *)malloc ((end-string)+1);
-  memcpy (ret, string, (end-string));
-  ret[(end-string)] = 0;
-  return ret;
-}
diff --git a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/service.c b/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/service.c
deleted file mode 100644
index 293ca59c0..000000000
--- a/RedfishClientPkg/PrivateLibrary/RedfishLib/edk2libredfish/src/service.c
+++ /dev/null
@@ -1,1882 +0,0 @@
-/** @file
-  This file is cloned from DMTF libredfish library tag v1.0.0 and maintained
-  by EDKII.
-
-//----------------------------------------------------------------------------
-// Copyright Notice:
-// Copyright 2017 Distributed Management Task Force, Inc. All rights reserved.
-// License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libredfish/LICENSE.md
-//----------------------------------------------------------------------------
-
-  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-  (C) Copyright 2021-2022 Hewlett Packard Enterprise Development LP<BR>
-  Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
-  Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved.<BR>
-
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <redfishService.h>
-#include <redfishPayload.h>
-#include <redpath.h>
-
-static int
-initRest (
-  redfishService  *service,
-  void            *restProtocol
-  );
-
-static redfishService *
-createServiceEnumeratorNoAuth (
-  const char    *host,
-  const char    *rootUri,
-  bool          enumerate,
-  unsigned int  flags,
-  void          *restProtocol
-  );
-
-static redfishService *
-createServiceEnumeratorBasicAuth (
-  const char    *host,
-  const char    *rootUri,
-  const char    *username,
-  const char    *password,
-  unsigned int  flags,
-  void          *restProtocol
-  );
-
-static redfishService *
-createServiceEnumeratorSessionAuth (
-  const char    *host,
-  const char    *rootUri,
-  const char    *username,
-  const char    *password,
-  unsigned int  flags,
-  void          *restProtocol
-  );
-
-static char *
-makeUrlForService (
-  redfishService  *service,
-  const char      *uri
-  );
-
-static json_t *
-getVersions (
-  redfishService  *service,
-  const char      *rootUri
-  );
-
-static void
-addStringToJsonObject (
-  json_t      *object,
-  const char  *key,
-  const char  *value
-  );
-
-CHAR16 *
-C8ToC16 (
-  CHAR8  *AsciiStr
-  )
-{
-  CHAR16  *Str;
-  UINTN   BufLen;
-
-  BufLen = (AsciiStrLen (AsciiStr) + 1) * 2;
-  Str    = AllocatePool (BufLen);
-  ASSERT (Str != NULL);
-
-  AsciiStrToUnicodeStrS (AsciiStr, Str, AsciiStrLen (AsciiStr) + 1);
-
-  return Str;
-}
-
-VOID
-RestConfigFreeHttpRequestData (
-  IN EFI_HTTP_REQUEST_DATA  *RequestData
-  )
-{
-  if (RequestData == NULL) {
-    return;
-  }
-
-  if (RequestData->Url != NULL) {
-    FreePool (RequestData->Url);
-  }
-
-  FreePool (RequestData);
-}
-
-VOID
-RestConfigFreeHttpMessage (
-  IN EFI_HTTP_MESSAGE  *Message,
-  IN BOOLEAN           IsRequest
-  )
-{
-  if (Message == NULL) {
-    return;
-  }
-
-  if (IsRequest) {
-    RestConfigFreeHttpRequestData (Message->Data.Request);
-    Message->Data.Request = NULL;
-  } else {
-    if (Message->Data.Response != NULL) {
-      FreePool (Message->Data.Response);
-      Message->Data.Response = NULL;
-    }
-  }
-
-  if (Message->Headers != NULL) {
-    FreePool (Message->Headers);
-    Message->Headers = NULL;
-  }
-
-  if (Message->Body != NULL) {
-    FreePool (Message->Body);
-    Message->Body = NULL;
-  }
-}
-
-/**
-  Converts the Unicode string to ASCII string to a new allocated buffer.
-
-  @param[in]       String       Unicode string to be converted.
-
-  @return     Buffer points to ASCII string, or NULL if error happens.
-
-**/
-CHAR8 *
-UnicodeStrDupToAsciiStr (
-  CONST CHAR16  *String
-  )
-{
-  CHAR8       *AsciiStr;
-  UINTN       BufLen;
-  EFI_STATUS  Status;
-
-  BufLen   = StrLen (String) + 1;
-  AsciiStr = AllocatePool (BufLen);
-  if (AsciiStr == NULL) {
-    return NULL;
-  }
-
-  Status = UnicodeStrToAsciiStrS (String, AsciiStr, BufLen);
-  if (EFI_ERROR (Status)) {
-    return NULL;
-  }
-
-  return AsciiStr;
-}
-
-/**
-  This function encodes the content.
-
-  @param[in]   ContentEncodedValue   HTTP conent encoded value.
-  @param[in]   OriginalContent       Original content.
-  @param[out]  EncodedContent        Pointer to receive encoded content.
-  @param[out]  EncodedContentLength  Length of encoded content.
-
-  @retval EFI_SUCCESS              Content encoded successfully.
-  @retval EFI_UNSUPPORTED          No source encoding funciton,
-  @retval EFI_INVALID_PARAMETER    One of the given parameter is invalid.
-
-**/
-EFI_STATUS
-EncodeRequestContent (
-  IN CHAR8   *ContentEncodedValue,
-  IN CHAR8   *OriginalContent,
-  OUT VOID   **EncodedContent,
-  OUT UINTN  *EncodedContentLength
-  )
-{
-  EFI_STATUS  Status;
-  VOID        *EncodedPointer;
-  UINTN       EncodedLength;
-
-  if ((OriginalContent == NULL) || (EncodedContent == NULL) || (EncodedContentLength == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Status = RedfishContentEncode (
-             ContentEncodedValue,
-             OriginalContent,
-             AsciiStrLen (OriginalContent),
-             &EncodedPointer,
-             &EncodedLength
-             );
-  if (Status == EFI_SUCCESS) {
-    *EncodedContent       = EncodedPointer;
-    *EncodedContentLength = EncodedLength;
-    return EFI_SUCCESS;
-  }
-
-  return Status;
-}
-
-/**
-  This function decodes the content. The Memory block pointed by
-  ContentPointer would be freed and replaced with the cooked Redfish
-  payload.
-
-  @param[in]        ContentEncodedValue HTTP conent encoded value.
-  @param[in, out]   ContentPointer      Pointer to encoded content.
-                                        Pointer of decoded content when out.
-  @param[in, out]   ContentLength       Pointer to the length of encoded content.
-                                        Length of decoded content when out.
-
-  @retval EFI_SUCCESS              Functinos found.
-  @retval EFI_UNSUPPORTED          No functions found.
-  @retval EFI_INVALID_PARAMETER    One of the given parameter is invalid.
-
-**/
-EFI_STATUS
-DecodeResponseContent (
-  IN CHAR8      *ContentEncodedValue,
-  IN OUT VOID   **ContentPointer,
-  IN OUT UINTN  *ContentLength
-  )
-{
-  EFI_STATUS  Status;
-  VOID        *DecodedPointer;
-  UINTN       DecodedLength;
-
-  if (ContentEncodedValue == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Status = RedfishContentDecode (
-             ContentEncodedValue,
-             *ContentPointer,
-             *ContentLength,
-             &DecodedPointer,
-             &DecodedLength
-             );
-  if (Status == EFI_SUCCESS) {
-    FreePool (*ContentPointer);
-    *ContentPointer = DecodedPointer;
-    *ContentLength  = DecodedLength;
-  }
-
-  return Status;
-}
-
-/**
-  Create a HTTP URL string for specific Redfish resource.
-
-  This function build a URL string from the Redfish Host interface record and caller specified
-  relative path of the resource.
-
-  Callers are responsible for freeing the returned string storage pointed by HttpUrl.
-
-  @param[in]   RedfishData         Redfish network host interface record.
-  @param[in]   RelativePath        Relative path of a resource.
-  @param[out]  HttpUrl             The pointer to store the returned URL string.
-
-  @retval EFI_SUCCESS              Build the URL string successfully.
-  @retval EFI_INVALID_PARAMETER    RedfishData or HttpUrl is NULL.
-  @retval EFI_OUT_OF_RESOURCES     There are not enough memory resources.
-
-**/
-EFI_STATUS
-RedfishBuildUrl (
-  IN  REDFISH_CONFIG_SERVICE_INFORMATION  *RedfishConfigServiceInfo,
-  IN  CHAR16                              *RelativePath    OPTIONAL,
-  OUT CHAR16                              **HttpUrl
-  )
-{
-  CHAR16  *Url;
-  CHAR16  *UrlHead;
-  UINTN   UrlLength;
-  UINTN   PathLen;
-
-  if ((RedfishConfigServiceInfo == NULL) || (HttpUrl == NULL)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // RFC2616: http_URL = "http(s):" "//" host [ ":" port ] [ abs_path [ "?" query ]]
-  //
-  if (RelativePath == NULL) {
-    PathLen = 0;
-  } else {
-    PathLen = StrLen (RelativePath);
-  }
-
-  UrlLength = StrLen (HTTPS_FLAG) + StrLen (REDFISH_FIRST_URL) + 1 + StrLen (RedfishConfigServiceInfo->RedfishServiceLocation) + PathLen;
-  Url       = AllocateZeroPool (UrlLength * sizeof (CHAR16));
-  if (Url == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  UrlHead = Url;
-  //
-  // Copy "http://" or "https://" according RedfishServiceIpPort.
-  //
-  if (!RedfishConfigServiceInfo->RedfishServiceUseHttps) {
-    StrCpyS (Url, StrLen (HTTPS_FLAG) + 1, HTTP_FLAG);
-    Url = Url + StrLen (HTTP_FLAG);
-  } else {
-    StrCpyS (Url, StrLen (HTTPS_FLAG) + 1, HTTPS_FLAG);
-    Url = Url + StrLen (HTTPS_FLAG);
-  }
-
-  StrCpyS (Url, StrLen (RedfishConfigServiceInfo->RedfishServiceLocation) + 1, RedfishConfigServiceInfo->RedfishServiceLocation);
-  Url = Url + StrLen (RedfishConfigServiceInfo->RedfishServiceLocation);
-
-  //
-  // Copy abs_path
-  //
-  if ((RelativePath != NULL) && (PathLen != 0)) {
-    StrnCpyS (Url, UrlLength, RelativePath, PathLen);
-  }
-
-  *HttpUrl = UrlHead;
-  return EFI_SUCCESS;
-}
-
-redfishService *
-createServiceEnumerator (
-  REDFISH_CONFIG_SERVICE_INFORMATION  *RedfishConfigServiceInfo,
-  const char                          *rootUri,
-  enumeratorAuthentication            *auth,
-  unsigned int                        flags
-  )
-{
-  EFI_STATUS            Status;
-  CHAR16                *HttpUrl;
-  CHAR8                 *AsciiHost;
-  EFI_REST_EX_PROTOCOL  *RestEx;
-  redfishService        *ret;
-
-  HttpUrl   = NULL;
-  AsciiHost = NULL;
-  RestEx    = NULL;
-  ret       = NULL;
-
-  if (RedfishConfigServiceInfo->RedfishServiceRestExHandle == NULL) {
-    goto ON_EXIT;
-  }
-
-  Status = RedfishBuildUrl (RedfishConfigServiceInfo, NULL, &HttpUrl);
-  if (EFI_ERROR (Status)) {
-    goto ON_EXIT;
-  }
-
-  ASSERT (HttpUrl != NULL);
-
-  AsciiHost = UnicodeStrDupToAsciiStr (HttpUrl);
-  if (AsciiHost == NULL) {
-    goto ON_EXIT;
-  }
-
-  Status = gBS->HandleProtocol (
-                  RedfishConfigServiceInfo->RedfishServiceRestExHandle,
-                  &gEfiRestExProtocolGuid,
-                  (VOID **)&RestEx
-                  );
-  if (EFI_ERROR (Status)) {
-    goto ON_EXIT;
-  }
-
-  if (auth == NULL) {
-    ret = createServiceEnumeratorNoAuth (AsciiHost, rootUri, true, flags, RestEx);
-  } else if (auth->authType == REDFISH_AUTH_BASIC) {
-    ret = createServiceEnumeratorBasicAuth (AsciiHost, rootUri, auth->authCodes.userPass.username, auth->authCodes.userPass.password, flags, RestEx);
-  } else if (auth->authType == REDFISH_AUTH_SESSION) {
-    ret = createServiceEnumeratorSessionAuth (AsciiHost, rootUri, auth->authCodes.userPass.username, auth->authCodes.userPass.password, flags, RestEx);
-  } else {
-    goto ON_EXIT;
-  }
-
-  ret->RestEx = RestEx;
-ON_EXIT:
-  if (HttpUrl != NULL) {
-    FreePool (HttpUrl);
-  }
-
-  if (AsciiHost != NULL) {
-    FreePool (AsciiHost);
-  }
-
-  return ret;
-}
-
-EFI_HTTP_HEADER *
-cloneHttpHeaders (
-  EFI_HTTP_MESSAGE  *message,
-  UINTN             *HeaderCount
-  )
-{
-  EFI_HTTP_HEADER  *Buffer;
-  UINTN            Index;
-
-  if ((message == NULL) || (HeaderCount == NULL)) {
-    return NULL;
-  }
-
-  *HeaderCount = message->HeaderCount;
-  Buffer       = AllocatePool (sizeof (EFI_HTTP_HEADER) *  message->HeaderCount);
-  if (Buffer == NULL) {
-    return NULL;
-  }
-
-  for (Index = 0; Index < message->HeaderCount; Index++) {
-    Buffer[Index].FieldName = AllocateCopyPool (AsciiStrSize (message->Headers[Index].FieldName), message->Headers[Index].FieldName);
-    ASSERT (Buffer[Index].FieldName != NULL);
-    Buffer[Index].FieldValue = AllocateCopyPool (AsciiStrSize (message->Headers[Index].FieldValue), message->Headers[Index].FieldValue);
-    ASSERT (Buffer[Index].FieldValue != NULL);
-  }
-
-  return Buffer;
-}
-
-json_t *
-getUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  EFI_HTTP_HEADER       **Headers OPTIONAL,
-  UINTN                 *HeaderCount OPTIONAL,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  char                   *url;
-  json_t                 *ret;
-  HTTP_IO_HEADER         *HttpIoHeader = NULL;
-  EFI_STATUS             Status;
-  EFI_HTTP_REQUEST_DATA  *RequestData = NULL;
-  EFI_HTTP_MESSAGE       *RequestMsg  = NULL;
-  EFI_HTTP_MESSAGE       ResponseMsg;
-  EFI_HTTP_HEADER        *ContentEncodedHeader;
-
-  if ((service == NULL) || (uri == NULL) || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-  if (HeaderCount != NULL) {
-    *HeaderCount = 0;
-  }
-
-  if (Headers != NULL) {
-    *Headers = NULL;
-  }
-
-  url = makeUrlForService (service, uri);
-  if (!url) {
-    return NULL;
-  }
-
-  DEBUG ((DEBUG_MANAGEABILITY, "%a: %a\n", __func__, url));
-
-  //
-  // Step 1: Create HTTP request message with 4 headers:
-  //
-  HttpIoHeader = HttpIoCreateHeader ((service->sessionToken || service->basicAuthStr) ? 6 : 5);
-  if (HttpIoHeader == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  if (service->sessionToken) {
-    Status = HttpIoSetHeader (HttpIoHeader, "X-Auth-Token", service->sessionToken);
-    ASSERT_EFI_ERROR (Status);
-  } else if (service->basicAuthStr) {
-    Status = HttpIoSetHeader (HttpIoHeader, "Authorization", service->basicAuthStr);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  Status = HttpIoSetHeader (HttpIoHeader, "Host", service->HostHeaderValue);
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "OData-Version", "4.0");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Accept", "application/json");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "User-Agent", "libredfish");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Connection", "Keep-Alive");
-  ASSERT_EFI_ERROR (Status);
-
-  //
-  // Step 2: build the rest of HTTP request info.
-  //
-  RequestData = AllocateZeroPool (sizeof (EFI_HTTP_REQUEST_DATA));
-  if (RequestData == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  RequestData->Method = HttpMethodGet;
-  RequestData->Url    = C8ToC16 (url);
-
-  //
-  // Step 3: fill in EFI_HTTP_MESSAGE
-  //
-  RequestMsg = AllocateZeroPool (sizeof (EFI_HTTP_MESSAGE));
-  if (RequestMsg == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  RequestMsg->Data.Request = RequestData;
-  RequestMsg->HeaderCount  = HttpIoHeader->HeaderCount;
-  RequestMsg->Headers      = HttpIoHeader->Headers;
-
-  ZeroMem (&ResponseMsg, sizeof (ResponseMsg));
-
-  //
-  // Step 4: call RESTEx to get response from REST service.
-  //
-  Status = service->RestEx->SendReceive (service->RestEx, RequestMsg, &ResponseMsg);
-  if (EFI_ERROR (Status)) {
-    ret = NULL;
-
-    //
-    // Deliver status code to caller when error happens so caller can do error handling.
-    //
-    if (ResponseMsg.Data.Response != NULL) {
-      *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-      if (*StatusCode == NULL) {
-        ret = NULL;
-        goto ON_EXIT;
-      }
-
-      //
-      // The caller shall take the responsibility to free the buffer.
-      //
-      **StatusCode = ResponseMsg.Data.Response->StatusCode;
-    }
-
-    goto ON_EXIT;
-  }
-
-  //
-  // Step 5: Return the HTTP StatusCode and Body message.
-  //
-  if (ResponseMsg.Data.Response != NULL) {
-    *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-    if (*StatusCode == NULL) {
-      ret = NULL;
-      goto ON_EXIT;
-    }
-
-    //
-    // The caller shall take the responsibility to free the buffer.
-    //
-    **StatusCode = ResponseMsg.Data.Response->StatusCode;
-  }
-
-  if ((ResponseMsg.Headers != NULL) && (Headers != NULL) && (HeaderCount != NULL)) {
-    *Headers = cloneHttpHeaders (&ResponseMsg, HeaderCount);
-  }
-
-  if ((ResponseMsg.BodyLength != 0) && (ResponseMsg.Body != NULL)) {
-    //
-    // Check if data is encoded.
-    //
-    ContentEncodedHeader = HttpFindHeader (ResponseMsg.HeaderCount, ResponseMsg.Headers, HTTP_HEADER_CONTENT_ENCODING);
-    if (ContentEncodedHeader != NULL) {
-      //
-      // The content is encoded.
-      //
-      Status = DecodeResponseContent (ContentEncodedHeader->FieldValue, &ResponseMsg.Body, &ResponseMsg.BodyLength);
-      if (EFI_ERROR (Status)) {
-        DEBUG ((DEBUG_ERROR, "%a: Failed to decompress the response content %r\n.", __func__, Status));
-        ret = NULL;
-        goto ON_EXIT;
-      }
-    }
-
-    ret = json_loadb (ResponseMsg.Body, ResponseMsg.BodyLength, 0, NULL);
-  } else {
-    //
-    // There is no message body returned from server.
-    //
-    ret = NULL;
-  }
-
-ON_EXIT:
-  if (url != NULL) {
-    free (url);
-  }
-
-  if (HttpIoHeader != NULL) {
-    HttpIoFreeHeader (HttpIoHeader);
-  }
-
-  if (RequestData != NULL) {
-    RestConfigFreeHttpRequestData (RequestData);
-  }
-
-  if (RequestMsg != NULL) {
-    FreePool (RequestMsg);
-  }
-
-  RestConfigFreeHttpMessage (&ResponseMsg, FALSE);
-
-  return ret;
-}
-
-json_t *
-putUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  size_t                contentLength,
-  const char            *contentType,
-  EFI_HTTP_HEADER       **Headers OPTIONAL,
-  UINTN                 *HeaderCount OPTIONAL,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  char                   *url;
-  json_t                 *ret;
-  HTTP_IO_HEADER         *HttpIoHeader = NULL;
-  EFI_STATUS             Status;
-  EFI_HTTP_REQUEST_DATA  *RequestData = NULL;
-  EFI_HTTP_MESSAGE       *RequestMsg  = NULL;
-  EFI_HTTP_MESSAGE       ResponseMsg;
-  CHAR8                  ContentLengthStr[80];
-  CHAR8                  *EncodedContent;
-  UINTN                  EncodedContentLen;
-
-  if ((service == NULL) || (uri == NULL) || (content == NULL) || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-  if (HeaderCount != NULL) {
-    *HeaderCount = 0;
-  }
-
-  if (Headers != NULL) {
-    *Headers = NULL;
-  }
-
-  url = makeUrlForService (service, uri);
-  if (url == NULL) {
-    return NULL;
-  }
-
-  DEBUG ((DEBUG_MANAGEABILITY, "%a: %a\n", __func__, url));
-
-  if (contentLength == 0) {
-    contentLength = strlen (content);
-  }
-
-  //
-  // Step 1: Create HTTP request message with 4 headers:
-  //
-  HttpIoHeader = HttpIoCreateHeader ((service->sessionToken != NULL || service->basicAuthStr != NULL) ? 9 : 8);
-  if (HttpIoHeader == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  if (service->sessionToken) {
-    Status = HttpIoSetHeader (HttpIoHeader, "X-Auth-Token", service->sessionToken);
-    ASSERT_EFI_ERROR (Status);
-  } else if (service->basicAuthStr) {
-    Status = HttpIoSetHeader (HttpIoHeader, "Authorization", service->basicAuthStr);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  if (contentType == NULL) {
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Type", "application/json");
-    ASSERT_EFI_ERROR (Status);
-  } else {
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Type", (CHAR8 *)contentType);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  Status = HttpIoSetHeader (HttpIoHeader, "Host", service->HostHeaderValue);
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Content-Type", "application/json");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Accept", "application/json");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "User-Agent", "libredfish");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Connection", "Keep-Alive");
-  ASSERT_EFI_ERROR (Status);
-
-  AsciiSPrint (
-    ContentLengthStr,
-    sizeof (ContentLengthStr),
-    "%lu",
-    (UINT64)contentLength
-    );
-  Status = HttpIoSetHeader (HttpIoHeader, "Content-Length", ContentLengthStr);
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "OData-Version", "4.0");
-  ASSERT_EFI_ERROR (Status);
-
-  //
-  // Step 2: build the rest of HTTP request info.
-  //
-  RequestData = AllocateZeroPool (sizeof (EFI_HTTP_REQUEST_DATA));
-  if (RequestData == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  RequestData->Method = HttpMethodPut;
-  RequestData->Url    = C8ToC16 (url);
-
-  //
-  // Step 3: fill in EFI_HTTP_MESSAGE
-  //
-  RequestMsg = AllocateZeroPool (sizeof (EFI_HTTP_MESSAGE));
-  if (RequestMsg == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  EncodedContent    = (CHAR8 *)content;
-  EncodedContentLen = contentLength;
-  //
-  // We currently only support gzip Content-Encoding.
-  //
-  Status = EncodeRequestContent ((CHAR8 *)HTTP_CONTENT_ENCODING_GZIP, (CHAR8 *)content, (VOID **)&EncodedContent, &EncodedContentLen);
-  if (Status == EFI_INVALID_PARAMETER) {
-    DEBUG ((DEBUG_ERROR, "%a: Error to encode content.\n", __func__));
-    ret = NULL;
-    goto ON_EXIT;
-  } else if (Status == EFI_UNSUPPORTED) {
-    DEBUG ((DEBUG_MANAGEABILITY, "No content coding for %a! Use raw data instead.\n", HTTP_CONTENT_ENCODING_GZIP));
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Encoding", HTTP_CONTENT_ENCODING_IDENTITY);
-    ASSERT_EFI_ERROR (Status);
-  } else {
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Encoding", HTTP_CONTENT_ENCODING_GZIP);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  RequestMsg->Data.Request = RequestData;
-  RequestMsg->HeaderCount  = HttpIoHeader->HeaderCount;
-  RequestMsg->Headers      = HttpIoHeader->Headers;
-  RequestMsg->BodyLength   = EncodedContentLen;
-  RequestMsg->Body         = (VOID *)EncodedContent;
-
-  ZeroMem (&ResponseMsg, sizeof (ResponseMsg));
-
-  //
-  // Step 4: call RESTEx to get response from REST service.
-  //
-  Status = service->RestEx->SendReceive (service->RestEx, RequestMsg, &ResponseMsg);
-  if (EFI_ERROR (Status)) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  //
-  // Step 5: Return the HTTP StatusCode and Body message.
-  //
-  if (ResponseMsg.Data.Response != NULL) {
-    *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-    if (*StatusCode == NULL) {
-      ret = NULL;
-      goto ON_EXIT;
-    }
-
-    //
-    // The caller shall take the responsibility to free the buffer.
-    //
-    **StatusCode = ResponseMsg.Data.Response->StatusCode;
-  }
-
-  if ((ResponseMsg.Headers != NULL) && (Headers != NULL) && (HeaderCount != NULL)) {
-    *Headers = cloneHttpHeaders (&ResponseMsg, HeaderCount);
-  }
-
-  if (EncodedContent != content) {
-    FreePool (EncodedContent);
-  }
-
-  if ((ResponseMsg.BodyLength != 0) && (ResponseMsg.Body != NULL)) {
-    ret = json_loadb (ResponseMsg.Body, ResponseMsg.BodyLength, 0, NULL);
-  } else {
-    //
-    // There is no message body returned from server.
-    //
-    ret = NULL;
-  }
-
-ON_EXIT:
-  if (url != NULL) {
-    free (url);
-  }
-
-  if (HttpIoHeader != NULL) {
-    HttpIoFreeHeader (HttpIoHeader);
-  }
-
-  if (RequestData != NULL) {
-    RestConfigFreeHttpRequestData (RequestData);
-  }
-
-  if (RequestMsg != NULL) {
-    FreePool (RequestMsg);
-  }
-
-  RestConfigFreeHttpMessage (&ResponseMsg, FALSE);
-
-  return ret;
-}
-
-json_t *
-patchUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  EFI_HTTP_HEADER       **Headers OPTIONAL,
-  UINTN                 *HeaderCount OPTIONAL,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  char                   *url;
-  json_t                 *ret;
-  HTTP_IO_HEADER         *HttpIoHeader = NULL;
-  EFI_STATUS             Status;
-  EFI_HTTP_REQUEST_DATA  *RequestData = NULL;
-  EFI_HTTP_MESSAGE       *RequestMsg  = NULL;
-  EFI_HTTP_MESSAGE       ResponseMsg;
-  CHAR8                  ContentLengthStr[80];
-  CHAR8                  *EncodedContent;
-  UINTN                  EncodedContentLen;
-
-  if ((service == NULL) || (uri == NULL) || (content == NULL) || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-  if (HeaderCount != NULL) {
-    *HeaderCount = 0;
-  }
-
-  if (Headers != NULL) {
-    *Headers = NULL;
-  }
-
-  url = makeUrlForService (service, uri);
-  if (!url) {
-    return NULL;
-  }
-
-  DEBUG ((DEBUG_MANAGEABILITY, "%a: %a\n", __func__, url));
-
-  //
-  // Step 1: Create HTTP request message with 4 headers:
-  //
-  HttpIoHeader = HttpIoCreateHeader ((service->sessionToken || service->basicAuthStr) ? 9 : 8);
-  if (HttpIoHeader == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  if (service->sessionToken) {
-    Status = HttpIoSetHeader (HttpIoHeader, "X-Auth-Token", service->sessionToken);
-    ASSERT_EFI_ERROR (Status);
-  } else if (service->basicAuthStr) {
-    Status = HttpIoSetHeader (HttpIoHeader, "Authorization", service->basicAuthStr);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  Status = HttpIoSetHeader (HttpIoHeader, "Host", service->HostHeaderValue);
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Content-Type", "application/json");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Accept", "application/json");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "User-Agent", "libredfish");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Connection", "Keep-Alive");
-  ASSERT_EFI_ERROR (Status);
-
-  AsciiSPrint (
-    ContentLengthStr,
-    sizeof (ContentLengthStr),
-    "%lu",
-    (UINT64)strlen (content)
-    );
-  Status = HttpIoSetHeader (HttpIoHeader, "Content-Length", ContentLengthStr);
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "OData-Version", "4.0");
-  ASSERT_EFI_ERROR (Status);
-
-  //
-  // Step 2: build the rest of HTTP request info.
-  //
-  RequestData = AllocateZeroPool (sizeof (EFI_HTTP_REQUEST_DATA));
-  if (RequestData == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  RequestData->Method = HttpMethodPatch;
-  RequestData->Url    = C8ToC16 (url);
-
-  //
-  // Step 3: fill in EFI_HTTP_MESSAGE
-  //
-  RequestMsg = AllocateZeroPool (sizeof (EFI_HTTP_MESSAGE));
-  if (RequestMsg == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  EncodedContent    = (CHAR8 *)content;
-  EncodedContentLen = strlen (content);
-  //
-  // We currently only support gzip Content-Encoding.
-  //
-  Status = EncodeRequestContent ((CHAR8 *)HTTP_CONTENT_ENCODING_GZIP, (CHAR8 *)content, (VOID **)&EncodedContent, &EncodedContentLen);
-  if (Status == EFI_INVALID_PARAMETER) {
-    DEBUG ((DEBUG_ERROR, "%a: Error to encode content.\n", __func__));
-    ret = NULL;
-    goto ON_EXIT;
-  } else if (Status == EFI_UNSUPPORTED) {
-    DEBUG ((DEBUG_MANAGEABILITY, "No content coding for %a! Use raw data instead.\n", HTTP_CONTENT_ENCODING_GZIP));
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Encoding", HTTP_CONTENT_ENCODING_IDENTITY);
-    ASSERT_EFI_ERROR (Status);
-  } else {
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Encoding", HTTP_CONTENT_ENCODING_GZIP);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  RequestMsg->Data.Request = RequestData;
-  RequestMsg->HeaderCount  = HttpIoHeader->HeaderCount;
-  RequestMsg->Headers      = HttpIoHeader->Headers;
-  RequestMsg->BodyLength   = EncodedContentLen;
-  RequestMsg->Body         = (VOID *)EncodedContent;
-
-  ZeroMem (&ResponseMsg, sizeof (ResponseMsg));
-
-  //
-  // Step 4: call RESTEx to get response from REST service.
-  //
-  Status = service->RestEx->SendReceive (service->RestEx, RequestMsg, &ResponseMsg);
-  if (EFI_ERROR (Status)) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  //
-  // Step 5: Return the HTTP StatusCode and Body message.
-  //
-  if (ResponseMsg.Data.Response != NULL) {
-    *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-    if (*StatusCode == NULL) {
-      ret = NULL;
-      goto ON_EXIT;
-    }
-
-    //
-    // The caller shall take the responsibility to free the buffer.
-    //
-    **StatusCode = ResponseMsg.Data.Response->StatusCode;
-  }
-
-  if ((ResponseMsg.Headers != NULL) && (Headers != NULL) && (HeaderCount != NULL)) {
-    *Headers = cloneHttpHeaders (&ResponseMsg, HeaderCount);
-  }
-
-  if (EncodedContent != content) {
-    FreePool (EncodedContent);
-  }
-
-  if ((ResponseMsg.BodyLength != 0) && (ResponseMsg.Body != NULL)) {
-    ret = json_loadb (ResponseMsg.Body, ResponseMsg.BodyLength, 0, NULL);
-  } else {
-    //
-    // There is no message body returned from server.
-    //
-    ret = NULL;
-  }
-
-ON_EXIT:
-  if (url != NULL) {
-    free (url);
-  }
-
-  if (HttpIoHeader != NULL) {
-    HttpIoFreeHeader (HttpIoHeader);
-  }
-
-  if (RequestData != NULL) {
-    RestConfigFreeHttpRequestData (RequestData);
-  }
-
-  if (RequestMsg != NULL) {
-    FreePool (RequestMsg);
-  }
-
-  RestConfigFreeHttpMessage (&ResponseMsg, FALSE);
-
-  return ret;
-}
-
-json_t *
-postUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  size_t                contentLength,
-  const char            *contentType,
-  EFI_HTTP_HEADER       **Headers OPTIONAL,
-  UINTN                 *HeaderCount OPTIONAL,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  char                   *url = NULL;
-  json_t                 *ret;
-  HTTP_IO_HEADER         *HttpIoHeader = NULL;
-  EFI_STATUS             Status;
-  EFI_HTTP_REQUEST_DATA  *RequestData = NULL;
-  EFI_HTTP_MESSAGE       *RequestMsg  = NULL;
-  EFI_HTTP_MESSAGE       ResponseMsg;
-  CHAR8                  ContentLengthStr[80];
-  EFI_HTTP_HEADER        *HttpHeader = NULL;
-
-  ret = NULL;
-
-  if ((service == NULL) || (uri == NULL) || (content == NULL) || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-  if (HeaderCount != NULL) {
-    *HeaderCount = 0;
-  }
-
-  if (Headers != NULL) {
-    *Headers = NULL;
-  }
-
-  url = makeUrlForService (service, uri);
-  if (!url) {
-    return NULL;
-  }
-
-  DEBUG ((DEBUG_MANAGEABILITY, "%a: %a\n", __func__, url));
-
-  if (contentLength == 0) {
-    contentLength = strlen (content);
-  }
-
-  //
-  // Step 1: Create HTTP request message with 4 headers:
-  //
-  HttpIoHeader = HttpIoCreateHeader ((service->sessionToken || service->basicAuthStr) ? 8 : 7);
-  if (HttpIoHeader == NULL) {
-    goto ON_EXIT;
-  }
-
-  if (service->sessionToken) {
-    Status = HttpIoSetHeader (HttpIoHeader, "X-Auth-Token", service->sessionToken);
-    ASSERT_EFI_ERROR (Status);
-  } else if (service->basicAuthStr) {
-    Status = HttpIoSetHeader (HttpIoHeader, "Authorization", service->basicAuthStr);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  if (contentType == NULL) {
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Type", "application/json");
-    ASSERT_EFI_ERROR (Status);
-  } else {
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Type", (CHAR8 *)contentType);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  Status = HttpIoSetHeader (HttpIoHeader, "Host", service->HostHeaderValue);
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Accept", "application/json");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "User-Agent", "libredfish");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Connection", "Keep-Alive");
-  ASSERT_EFI_ERROR (Status);
-  AsciiSPrint (
-    ContentLengthStr,
-    sizeof (ContentLengthStr),
-    "%lu",
-    (UINT64)contentLength
-    );
-  Status = HttpIoSetHeader (HttpIoHeader, "Content-Length", ContentLengthStr);
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "OData-Version", "4.0");
-  ASSERT_EFI_ERROR (Status);
-
-  //
-  // Step 2: build the rest of HTTP request info.
-  //
-  RequestData = AllocateZeroPool (sizeof (EFI_HTTP_REQUEST_DATA));
-  if (RequestData == NULL) {
-    goto ON_EXIT;
-  }
-
-  RequestData->Method = HttpMethodPost;
-  RequestData->Url    = C8ToC16 (url);
-
-  //
-  // Step 3: fill in EFI_HTTP_MESSAGE
-  //
-  RequestMsg = AllocateZeroPool (sizeof (EFI_HTTP_MESSAGE));
-  if (RequestMsg == NULL) {
-    goto ON_EXIT;
-  }
-
-  RequestMsg->Data.Request = RequestData;
-  RequestMsg->HeaderCount  = HttpIoHeader->HeaderCount;
-  RequestMsg->Headers      = HttpIoHeader->Headers;
-  RequestMsg->BodyLength   = contentLength;
-  RequestMsg->Body         = (VOID *)content;
-
-  ZeroMem (&ResponseMsg, sizeof (ResponseMsg));
-
-  //
-  // Step 4: call RESTEx to get response from REST service.
-  //
-  Status = service->RestEx->SendReceive (service->RestEx, RequestMsg, &ResponseMsg);
-  if (EFI_ERROR (Status)) {
-    //
-    // If there is no response to handle, go to error exit.
-    //
-    if (ResponseMsg.Data.Response == NULL) {
-      goto ON_EXIT;
-    }
-  }
-
-  //
-  // Step 5: Return the HTTP StatusCode and Body message.
-  //
-  if (ResponseMsg.Data.Response != NULL) {
-    *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-    if (*StatusCode == NULL) {
-      goto ON_EXIT;
-    }
-
-    //
-    // The caller shall take the responsibility to free the buffer.
-    //
-    **StatusCode = ResponseMsg.Data.Response->StatusCode;
-  }
-
-  if ((ResponseMsg.Headers != NULL) && (Headers != NULL) && (HeaderCount != NULL)) {
-    *Headers = cloneHttpHeaders (&ResponseMsg, HeaderCount);
-  }
-
-  if ((ResponseMsg.BodyLength != 0) && (ResponseMsg.Body != NULL)) {
-    ret = json_loadb (ResponseMsg.Body, ResponseMsg.BodyLength, 0, NULL);
-  }
-
-  //
-  // Step 6: Parsing the HttpHeader to retrieve the X-Auth-Token if the HTTP StatusCode is correct.
-  //
-  if ((ResponseMsg.Data.Response != NULL) &&
-      ((ResponseMsg.Data.Response->StatusCode == HTTP_STATUS_200_OK) ||
-       (ResponseMsg.Data.Response->StatusCode == HTTP_STATUS_204_NO_CONTENT)))
-  {
-    HttpHeader = HttpFindHeader (ResponseMsg.HeaderCount, ResponseMsg.Headers, "X-Auth-Token");
-    if (HttpHeader != NULL) {
-      if (service->sessionToken) {
-        free (service->sessionToken);
-      }
-
-      service->sessionToken = AllocateCopyPool (AsciiStrSize (HttpHeader->FieldValue), HttpHeader->FieldValue);
-    }
-  }
-
-ON_EXIT:
-  if (url != NULL) {
-    free (url);
-  }
-
-  if (HttpIoHeader != NULL) {
-    HttpIoFreeHeader (HttpIoHeader);
-  }
-
-  if (RequestData != NULL) {
-    RestConfigFreeHttpRequestData (RequestData);
-  }
-
-  if (RequestMsg != NULL) {
-    FreePool (RequestMsg);
-  }
-
-  RestConfigFreeHttpMessage (&ResponseMsg, FALSE);
-
-  return ret;
-}
-
-json_t *
-getUriFromService (
-  redfishService        *service,
-  const char            *uri,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  return getUriFromServiceEx (service, uri, NULL, NULL, StatusCode);
-}
-
-json_t *
-patchUriFromService (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  return patchUriFromServiceEx (service, uri, content, NULL, NULL, StatusCode);
-}
-
-json_t *
-postUriFromService (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  size_t                contentLength,
-  const char            *contentType,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  return postUriFromServiceEx (service, uri, content, contentLength, contentType, NULL, NULL, StatusCode);
-}
-
-json_t *
-deleteUriFromServiceEx (
-  redfishService        *service,
-  const char            *uri,
-  const char            *content,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  char                   *url;
-  json_t                 *ret;
-  HTTP_IO_HEADER         *HttpIoHeader = NULL;
-  EFI_STATUS             Status;
-  EFI_HTTP_REQUEST_DATA  *RequestData = NULL;
-  EFI_HTTP_MESSAGE       *RequestMsg  = NULL;
-  EFI_HTTP_MESSAGE       ResponseMsg;
-  CHAR8                  ContentLengthStr[80];
-  size_t                 contentLength;
-
-  ret           = NULL;
-  contentLength = 0;
-
-  if ((service == NULL) || (uri == NULL) || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  url = makeUrlForService (service, uri);
-  if (!url) {
-    return NULL;
-  }
-
-  DEBUG ((DEBUG_MANAGEABILITY, "libredfish: deleteUriFromService(): %a\n", url));
-
-  //
-  // Step 1: Create HTTP request message with 4 headers:
-  //
-  HttpIoHeader = HttpIoCreateHeader ((service->sessionToken || service->basicAuthStr) ? 8 : 7);
-  if (HttpIoHeader == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  if (service->sessionToken) {
-    Status = HttpIoSetHeader (HttpIoHeader, "X-Auth-Token", service->sessionToken);
-    ASSERT_EFI_ERROR (Status);
-  } else if (service->basicAuthStr) {
-    Status = HttpIoSetHeader (HttpIoHeader, "Authorization", service->basicAuthStr);
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  Status = HttpIoSetHeader (HttpIoHeader, "Host", service->HostHeaderValue);
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "User-Agent", "libredfish");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "OData-Version", "4.0");
-  ASSERT_EFI_ERROR (Status);
-  Status = HttpIoSetHeader (HttpIoHeader, "Connection", "Keep-Alive");
-  ASSERT_EFI_ERROR (Status);
-
-  Status = HttpIoSetHeader (HttpIoHeader, "Content-Type", "application/json");
-  ASSERT_EFI_ERROR (Status);
-
-  if (content != NULL) {
-    contentLength = strlen (content);
-    AsciiSPrint (
-      ContentLengthStr,
-      sizeof (ContentLengthStr),
-      "%lu",
-      (UINT64)contentLength
-      );
-    Status = HttpIoSetHeader (HttpIoHeader, "Content-Length", ContentLengthStr);
-    ASSERT_EFI_ERROR (Status);
-    Status = HttpIoSetHeader (HttpIoHeader, "OData-Version", "4.0");
-    ASSERT_EFI_ERROR (Status);
-  }
-
-  //
-  // Step 2: build the rest of HTTP request info.
-  //
-  RequestData = AllocateZeroPool (sizeof (EFI_HTTP_REQUEST_DATA));
-  if (RequestData == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  RequestData->Method = HttpMethodDelete;
-  RequestData->Url    = C8ToC16 (url);
-
-  //
-  // Step 3: fill in EFI_HTTP_MESSAGE
-  //
-  RequestMsg = AllocateZeroPool (sizeof (EFI_HTTP_MESSAGE));
-  if (RequestMsg == NULL) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  RequestMsg->Data.Request = RequestData;
-  RequestMsg->HeaderCount  = HttpIoHeader->HeaderCount;
-  RequestMsg->Headers      = HttpIoHeader->Headers;
-
-  if (content != NULL) {
-    RequestMsg->BodyLength = contentLength;
-    RequestMsg->Body       = (VOID *)content;
-  }
-
-  ZeroMem (&ResponseMsg, sizeof (ResponseMsg));
-
-  //
-  // Step 4: call RESTEx to get response from REST service.
-  //
-  Status = service->RestEx->SendReceive (service->RestEx, RequestMsg, &ResponseMsg);
-  if (EFI_ERROR (Status)) {
-    ret = NULL;
-    goto ON_EXIT;
-  }
-
-  //
-  // Step 5: Return the HTTP StatusCode and Body message.
-  //
-  if (ResponseMsg.Data.Response != NULL) {
-    *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-    if (*StatusCode == NULL) {
-      ret = NULL;
-      goto ON_EXIT;
-    }
-
-    //
-    // The caller shall take the responsibility to free the buffer.
-    //
-    **StatusCode = ResponseMsg.Data.Response->StatusCode;
-  }
-
-  if ((ResponseMsg.BodyLength != 0) && (ResponseMsg.Body != NULL)) {
-    ret = json_loadb (ResponseMsg.Body, ResponseMsg.BodyLength, 0, NULL);
-  }
-
-ON_EXIT:
-  if (url != NULL) {
-    free (url);
-  }
-
-  if (HttpIoHeader != NULL) {
-    HttpIoFreeHeader (HttpIoHeader);
-  }
-
-  if (RequestData != NULL) {
-    RestConfigFreeHttpRequestData (RequestData);
-  }
-
-  if (RequestMsg != NULL) {
-    FreePool (RequestMsg);
-  }
-
-  RestConfigFreeHttpMessage (&ResponseMsg, FALSE);
-
-  return ret;
-}
-
-json_t *
-deleteUriFromService (
-  redfishService        *service,
-  const char            *uri,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  return deleteUriFromServiceEx (service, uri, NULL, StatusCode);
-}
-
-redfishPayload *
-getRedfishServiceRoot (
-  redfishService        *service,
-  const char            *version,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  json_t      *value;
-  json_t      *versionNode;
-  const char  *verUrl;
-
-  if (version == NULL) {
-    versionNode = json_object_get (service->versions, "v1");
-  } else {
-    versionNode = json_object_get (service->versions, version);
-  }
-
-  if (versionNode == NULL) {
-    return NULL;
-  }
-
-  verUrl = json_string_value (versionNode);
-  if (verUrl == NULL) {
-    return NULL;
-  }
-
-  value = getUriFromService (service, verUrl, StatusCode);
-  if (value == NULL) {
-    if ((service->flags & REDFISH_FLAG_SERVICE_NO_VERSION_DOC) == 0) {
-      json_decref (versionNode);
-    }
-
-    return NULL;
-  }
-
-  return createRedfishPayload (value, service);
-}
-
-redfishPayload *
-getPayloadByPath (
-  redfishService        *service,
-  const char            *path,
-  EFI_HTTP_STATUS_CODE  **StatusCode
-  )
-{
-  redPathNode     *redpath;
-  redfishPayload  *root;
-  redfishPayload  *ret;
-
-  if (!service || !path || (StatusCode == NULL)) {
-    return NULL;
-  }
-
-  *StatusCode = NULL;
-
-  redpath = parseRedPath (path);
-  if (!redpath) {
-    return NULL;
-  }
-
-  if (!redpath->isRoot) {
-    cleanupRedPath (redpath);
-    return NULL;
-  }
-
-  root = getRedfishServiceRoot (service, redpath->version, StatusCode);
-  if ((*StatusCode == NULL) || (**StatusCode < HTTP_STATUS_200_OK) || (**StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT)) {
-    cleanupRedPath (redpath);
-    return root;
-  }
-
-  if (redpath->next == NULL) {
-    cleanupRedPath (redpath);
-    return root;
-  }
-
-  FreePool (*StatusCode);
-  *StatusCode = NULL;
-
-  ret = getPayloadForPath (root, redpath->next, StatusCode);
-  if ((*StatusCode == NULL) && (ret != NULL)) {
-    //
-    // In such a case, the Redfish resource is parsed from the input payload (root) directly.
-    // So, we still return HTTP_STATUS_200_OK.
-    //
-    *StatusCode = AllocateZeroPool (sizeof (EFI_HTTP_STATUS_CODE));
-    if (*StatusCode == NULL) {
-      ret = NULL;
-    } else {
-      **StatusCode = HTTP_STATUS_200_OK;
-    }
-  }
-
-  cleanupPayload (root);
-  cleanupRedPath (redpath);
-  return ret;
-}
-
-void
-cleanupServiceEnumerator (
-  redfishService  *service
-  )
-{
-  if (!service) {
-    return;
-  }
-
-  free (service->host);
-  json_decref (service->versions);
-  if (service->sessionToken != NULL) {
-    ZeroMem (service->sessionToken, (UINTN)strlen (service->sessionToken));
-    FreePool (service->sessionToken);
-  }
-
-  if (service->basicAuthStr != NULL) {
-    ZeroMem (service->basicAuthStr, (UINTN)strlen (service->basicAuthStr));
-    FreePool (service->basicAuthStr);
-  }
-
-  free (service);
-}
-
-static int
-initRest (
-  redfishService  *service,
-  void            *restProtocol
-  )
-{
-  service->RestEx = restProtocol;
-  return 0;
-}
-
-static redfishService *
-createServiceEnumeratorNoAuth (
-  const char    *host,
-  const char    *rootUri,
-  bool          enumerate,
-  unsigned int  flags,
-  void          *restProtocol
-  )
-{
-  redfishService  *ret;
-  char            *HostStart;
-
-  ret = (redfishService *)calloc (1, sizeof (redfishService));
-  if (initRest (ret, restProtocol) != 0) {
-    free (ret);
-    return NULL;
-  }
-
-  ret->host  = AllocateCopyPool (AsciiStrSize (host), host);
-  ret->flags = flags;
-  if (enumerate) {
-    ret->versions = getVersions (ret, rootUri);
-  }
-
-  HostStart = strstr (ret->host, "//");
-  if ((HostStart != NULL) && (*(HostStart + 2) != '\0')) {
-    ret->HostHeaderValue = HostStart + 2;
-  }
-
-  return ret;
-}
-
-EFI_STATUS
-createBasicAuthStr (
-  IN  redfishService  *service,
-  IN  CONST CHAR8     *UserId,
-  IN  CONST CHAR8     *Password
-  )
-{
-  EFI_STATUS  Status;
-  CHAR8       *RawAuthValue;
-  UINTN       RawAuthBufSize;
-  CHAR8       *EnAuthValue;
-  UINTN       EnAuthValueSize;
-  CHAR8       *BasicWithEnAuthValue;
-  UINTN       BasicBufSize;
-
-  EnAuthValue     = NULL;
-  EnAuthValueSize = 0;
-
-  RawAuthBufSize = AsciiStrLen (UserId) + AsciiStrLen (Password) + 2;
-  RawAuthValue   = AllocatePool (RawAuthBufSize);
-  if (RawAuthValue == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  //
-  // Build raw AuthValue (UserId:Password).
-  //
-  AsciiSPrint (
-    RawAuthValue,
-    RawAuthBufSize,
-    "%a:%a",
-    UserId,
-    Password
-    );
-
-  //
-  // Encoding RawAuthValue into Base64 format.
-  //
-  Status = Base64Encode (
-             (CONST UINT8 *)RawAuthValue,
-             AsciiStrLen (RawAuthValue),
-             EnAuthValue,
-             &EnAuthValueSize
-             );
-  if (Status == EFI_BUFFER_TOO_SMALL) {
-    EnAuthValue = (CHAR8 *)AllocateZeroPool (EnAuthValueSize);
-    if (EnAuthValue == NULL) {
-      Status = EFI_OUT_OF_RESOURCES;
-      return Status;
-    }
-
-    Status = Base64Encode (
-               (CONST UINT8 *)RawAuthValue,
-               AsciiStrLen (RawAuthValue),
-               EnAuthValue,
-               &EnAuthValueSize
-               );
-  }
-
-  if (EFI_ERROR (Status)) {
-    goto Exit;
-  }
-
-  BasicBufSize         = AsciiStrLen ("Basic ") + AsciiStrLen (EnAuthValue) + 2;
-  BasicWithEnAuthValue = AllocatePool (BasicBufSize);
-  if (BasicWithEnAuthValue == NULL) {
-    Status = EFI_OUT_OF_RESOURCES;
-    goto Exit;
-  }
-
-  //
-  // Build encoded EnAuthValue with Basic (Basic EnAuthValue).
-  //
-  AsciiSPrint (
-    BasicWithEnAuthValue,
-    BasicBufSize,
-    "%a %a",
-    "Basic",
-    EnAuthValue
-    );
-
-  service->basicAuthStr = BasicWithEnAuthValue;
-
-Exit:
-  if (RawAuthValue != NULL) {
-    ZeroMem (RawAuthValue, RawAuthBufSize);
-    FreePool (RawAuthValue);
-  }
-
-  if (EnAuthValue != NULL) {
-    ZeroMem (EnAuthValue, EnAuthValueSize);
-    FreePool (EnAuthValue);
-  }
-
-  return Status;
-}
-
-static redfishService *
-createServiceEnumeratorBasicAuth (
-  const char    *host,
-  const char    *rootUri,
-  const char    *username,
-  const char    *password,
-  unsigned int  flags,
-  void          *restProtocol
-  )
-{
-  redfishService  *ret;
-  EFI_STATUS      Status;
-
-  ret = createServiceEnumeratorNoAuth (host, rootUri, false, flags, restProtocol);
-
-  // add basic auth str
-  Status = createBasicAuthStr (ret, username, password);
-  if (EFI_ERROR (Status)) {
-    cleanupServiceEnumerator (ret);
-    return NULL;
-  }
-
-  ret->versions = getVersions (ret, rootUri);
-  return ret;
-}
-
-static redfishService *
-createServiceEnumeratorSessionAuth (
-  const char    *host,
-  const char    *rootUri,
-  const char    *username,
-  const char    *password,
-  unsigned int  flags,
-  void          *restProtocol
-  )
-{
-  redfishService        *ret;
-  redfishPayload        *payload;
-  redfishPayload        *links;
-  json_t                *sessionPayload;
-  json_t                *session;
-  json_t                *odataId;
-  const char            *uri;
-  json_t                *post;
-  char                  *content;
-  EFI_HTTP_STATUS_CODE  *StatusCode;
-
-  content    = NULL;
-  StatusCode = NULL;
-
-  ret = createServiceEnumeratorNoAuth (host, rootUri, true, flags, restProtocol);
-  if (ret == NULL) {
-    return NULL;
-  }
-
-  payload = getRedfishServiceRoot (ret, NULL, &StatusCode);
-  if ((StatusCode == NULL) || (*StatusCode < HTTP_STATUS_200_OK) || (*StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT)) {
-    if (StatusCode != NULL) {
-      FreePool (StatusCode);
-    }
-
-    if (payload != NULL) {
-      cleanupPayload (payload);
-    }
-
-    cleanupServiceEnumerator (ret);
-    return NULL;
-  }
-
-  if (StatusCode != NULL) {
-    FreePool (StatusCode);
-    StatusCode = NULL;
-  }
-
-  links = getPayloadByNodeName (payload, "Links", &StatusCode);
-  cleanupPayload (payload);
-  if (links == NULL) {
-    cleanupServiceEnumerator (ret);
-    return NULL;
-  }
-
-  session = json_object_get (links->json, "Sessions");
-  if (session == NULL) {
-    cleanupPayload (links);
-    cleanupServiceEnumerator (ret);
-    return NULL;
-  }
-
-  odataId = json_object_get (session, "@odata.id");
-  if (odataId == NULL) {
-    cleanupPayload (links);
-    cleanupServiceEnumerator (ret);
-    return NULL;
-  }
-
-  uri  = json_string_value (odataId);
-  post = json_object ();
-  addStringToJsonObject (post, "UserName", username);
-  addStringToJsonObject (post, "Password", password);
-  content = json_dumps (post, 0);
-  json_decref (post);
-  sessionPayload = postUriFromService (ret, uri, content, 0, NULL, &StatusCode);
-
-  if (content != NULL) {
-    ZeroMem (content, (UINTN)strlen (content));
-    free (content);
-  }
-
-  if ((sessionPayload == NULL) || (StatusCode == NULL) || (*StatusCode < HTTP_STATUS_200_OK) || (*StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT)) {
-    // Failed to create session!
-
-    cleanupPayload (links);
-    cleanupServiceEnumerator (ret);
-
-    if (StatusCode != NULL) {
-      FreePool (StatusCode);
-    }
-
-    if (sessionPayload != NULL) {
-      json_decref (sessionPayload);
-    }
-
-    return NULL;
-  }
-
-  json_decref (sessionPayload);
-  cleanupPayload (links);
-  FreePool (StatusCode);
-  return ret;
-}
-
-static char *
-makeUrlForService (
-  redfishService  *service,
-  const char      *uri
-  )
-{
-  char  *url;
-
-  if (service->host == NULL) {
-    return NULL;
-  }
-
-  url = (char *)malloc (strlen (service->host)+strlen (uri)+1);
-  if (url == NULL) {
-    return NULL;
-  }
-
-  strcpy (url, service->host);
-  strcat (url, uri);
-  return url;
-}
-
-static json_t *
-getVersions (
-  redfishService  *service,
-  const char      *rootUri
-  )
-{
-  json_t                *ret        = NULL;
-  EFI_HTTP_STATUS_CODE  *StatusCode = NULL;
-
-  if (service->flags & REDFISH_FLAG_SERVICE_NO_VERSION_DOC) {
-    service->versions = json_object ();
-    if (service->versions == NULL) {
-      return NULL;
-    }
-
-    addStringToJsonObject (service->versions, "v1", "/redfish/v1");
-    return service->versions;
-  }
-
-  if (rootUri != NULL) {
-    ret = getUriFromService (service, rootUri, &StatusCode);
-  } else {
-    ret = getUriFromService (service, "/redfish", &StatusCode);
-  }
-
-  if ((ret == NULL) || (StatusCode == NULL) || (*StatusCode < HTTP_STATUS_200_OK) || (*StatusCode > HTTP_STATUS_206_PARTIAL_CONTENT)) {
-    if (ret != NULL) {
-      json_decref (ret);
-    }
-
-    ret = NULL;
-  }
-
-  if (StatusCode != NULL) {
-    FreePool (StatusCode);
-  }
-
-  return ret;
-}
-
-static void
-addStringToJsonObject (
-  json_t      *object,
-  const char  *key,
-  const char  *value
-  )
-{
-  json_t  *jValue = json_string (value);
-
-  json_object_set (object, key, jValue);
-
-  json_decref (jValue);
-}
-- 
2.34.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116442): https://edk2.groups.io/g/devel/message/116442
Mute This Topic: https://groups.io/mt/104766058/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



             reply	other threads:[~2024-03-06 14:10 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-06 14:10 Nickle Wang via groups.io [this message]
2024-03-07  6:02 ` [edk2-devel] [edk2-redfish-client][PATCH 1/2] RedfishClientPkg: Remove RedfishLib Chang, Abner via groups.io

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=20240306141011.22590-1-nicklew@nvidia.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