public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Chang, Abner" <abner.chang@amd.com>
To: Igor Kulchytskyy <igork@ami.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "nickle.wang@hpe.com" <nickle.wang@hpe.com>
Subject: Re: [PATCH V2] RedfishPkg: Redfish third party modules may need to use the functions tat are currently private
Date: Fri, 12 Aug 2022 05:24:43 +0000	[thread overview]
Message-ID: <MN2PR12MB39663CE9186AF933914086FEEA679@MN2PR12MB3966.namprd12.prod.outlook.com> (raw)
In-Reply-To: <1660164369-7620-1-git-send-email-igork@ami.com>

[AMD Official Use Only - General]

Reviewed-by: Abner Chang <abner.chang@amd.com>

> -----Original Message-----
> From: Igor Kulchytskyy <igork@ami.com>
> Sent: Thursday, August 11, 2022 4:46 AM
> To: devel@edk2.groups.io
> Cc: Chang, Abner <Abner.Chang@amd.com>; nickle.wang@hpe.com; Igor
> Kulchytskyy <igork@ami.com>; Chang, Abner <Abner.Chang@amd.com>
> Subject: [PATCH V2] RedfishPkg: Redfish third party modules may need to
> use the functions tat are currently private
> 
> [CAUTION: External Email]
> 
> Definitions of the required functions to send requests to BMC are in the
> PrivateInclude folder.
> So, they cannot be used by the other packages.
> 
> Cc: Abner Chang <abner.chang@amd.com>
> Cc: Nickle Wang <nickle.wang@hpe.com>
> Signed-off-by: Igor Kulchytskyy <igork@ami.com>
> ---
>  RedfishPkg/Include/Library/RedfishLib.h        | 616 ++++++++++++++++++++
>  RedfishPkg/PrivateInclude/Library/RedfishLib.h | 616 --------------------
>  RedfishPkg/RedfishPkg.dec                      |   2 +-
>  3 files changed, 617 insertions(+), 617 deletions(-)
> 
> diff --git a/RedfishPkg/Include/Library/RedfishLib.h
> b/RedfishPkg/Include/Library/RedfishLib.h
> new file mode 100644
> index 0000000..b2488ab
> --- /dev/null
> +++ b/RedfishPkg/Include/Library/RedfishLib.h
> @@ -0,0 +1,616 @@
> +/** @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://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith
> ub.com%2FDMTF%2Flibredfish&amp;data=05%7C01%7CAbner.Chang%40am
> d.com%7C801a31d2d98345b0b56408da7b116295%7C3dd8961fe4884e608e11a
> 82d994e183d%7C0%7C0%7C637957611860036068%7CUnknown%7CTWFpbGZ
> sb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6M
> n0%3D%7C3000%7C%7C%7C&amp;sdata=19FpvKZ8NZ7BTkrZ8CQ34rAMUGj
> m0ElwjFyv1eHuVDA%3D&amp;reserved=0).
> +
> +  The query language is based on XPath
> (https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fww
> w.w3.org%2FTR%2F1999%2FREC-xpath-
> 19991116%2F&amp;data=05%7C01%7CAbner.Chang%40amd.com%7C801a31
> d2d98345b0b56408da7b116295%7C3dd8961fe4884e608e11a82d994e183d%7C
> 0%7C0%7C637957611860036068%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiM
> C4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000
> %7C%7C%7C&amp;sdata=0%2BnenRffAczD19E5fUu%2FT2FkUAQ8OnSGzsm
> 0UsEuwKY%3D&amp;reserved=0).
> +  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/RedfishPkg/PrivateInclude/Library/RedfishLib.h
> b/RedfishPkg/PrivateInclude/Library/RedfishLib.h
> deleted file mode 100644
> index b2488ab..0000000
> --- a/RedfishPkg/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://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgith
> ub.com%2FDMTF%2Flibredfish&amp;data=05%7C01%7CAbner.Chang%40am
> d.com%7C801a31d2d98345b0b56408da7b116295%7C3dd8961fe4884e608e11a
> 82d994e183d%7C0%7C0%7C637957611860036068%7CUnknown%7CTWFpbGZ
> sb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6M
> n0%3D%7C3000%7C%7C%7C&amp;sdata=19FpvKZ8NZ7BTkrZ8CQ34rAMUGj
> m0ElwjFyv1eHuVDA%3D&amp;reserved=0).
> -
> -  The query language is based on XPath
> (https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fww
> w.w3.org%2FTR%2F1999%2FREC-xpath-
> 19991116%2F&amp;data=05%7C01%7CAbner.Chang%40amd.com%7C801a31
> d2d98345b0b56408da7b116295%7C3dd8961fe4884e608e11a82d994e183d%7C
> 0%7C0%7C637957611860192298%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiM
> C4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000
> %7C%7C%7C&amp;sdata=YaK50FcrQhX4Fur4DPrh0yoI%2FDwhOKPce3kkNLz
> uqRQ%3D&amp;reserved=0).
> -  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/RedfishPkg/RedfishPkg.dec b/RedfishPkg/RedfishPkg.dec
> index 9886502..0aa2688 100644
> --- a/RedfishPkg/RedfishPkg.dec
> +++ b/RedfishPkg/RedfishPkg.dec
> @@ -64,7 +64,7 @@
> 
>    ##  @libraryclass Redfish Helper Library
>    #   Library provides Redfish helper functions.
> -  RedfishLib|PrivateInclude/Library/RedfishLib.h
> +  RedfishLib|Include/Library/RedfishLib.h
> 
>  [Protocols]
>    ## Include/Protocol/EdkIIRedfishCredential.h
> --
> 2.6.1.windows.1
> -The information contained in this message may be confidential and
> proprietary to American Megatrends (AMI). This communication is intended
> to be read only by the individual or entity to whom it is addressed or by their
> designee. If the reader of this message is not the intended recipient, you are
> on notice that any distribution of this message, in any form, is strictly
> prohibited. Please promptly notify the sender by reply e-mail or by
> telephone at 770-246-8600, and then delete or destroy all copies of the
> transmission.

      reply	other threads:[~2022-08-12  5:24 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-10 20:46 [PATCH V2] RedfishPkg: Redfish third party modules may need to use the functions tat are currently private Igor Kulchytskyy
2022-08-12  5:24 ` Chang, Abner [this message]

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=MN2PR12MB39663CE9186AF933914086FEEA679@MN2PR12MB3966.namprd12.prod.outlook.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