public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Chang, Abner via groups.io" <abner.chang=amd.com@groups.io>
To: Nickle Wang <nicklew@nvidia.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Igor Kulchytskyy <igork@ami.com>, Nick Ramirez <nramirez@nvidia.com>
Subject: Re: [edk2-devel] [PATCH 1/3] RedfishPkg/RedfishLib: introduce new interfaces.
Date: Thu, 26 Oct 2023 06:04:47 +0000	[thread overview]
Message-ID: <MN2PR12MB3966E80B069E59E4E27863D2EADDA@MN2PR12MB3966.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20231024083857.16006-1-nicklew@nvidia.com>

[AMD Official Use Only - General]

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

> -----Original Message-----
> From: Nickle Wang <nicklew@nvidia.com>
> Sent: Tuesday, October 24, 2023 4:39 PM
> To: devel@edk2.groups.io
> Cc: Chang, Abner <Abner.Chang@amd.com>; Igor Kulchytskyy
> <igork@ami.com>; Nick Ramirez <nramirez@nvidia.com>
> Subject: [PATCH 1/3] RedfishPkg/RedfishLib: introduce new interfaces.
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> Add two new interface: RedfishServiceInPayload() and RedfishPutToUri()
> for Redfish HTTP protocol implementation. Fix several typos and add
> missing JsonLib in INF file.
>
> Signed-off-by: Nickle Wang <nicklew@nvidia.com>
> Cc: Abner Chang <abner.chang@amd.com>
> Cc: Igor Kulchytskyy <igork@ami.com>
> Cc: Nick Ramirez <nramirez@nvidia.com>
> ---
>  .../PrivateLibrary/RedfishLib/RedfishLib.inf  |   2 +
>  RedfishPkg/Include/Library/RedfishLib.h       |  95 +++++++++--
>  .../PrivateLibrary/RedfishLib/RedfishLib.c    | 153 ++++++++++++++++--
>  .../PrivateLibrary/RedfishLib/RedfishMisc.c   |  13 +-
>  4 files changed, 226 insertions(+), 37 deletions(-)
>
> diff --git a/RedfishPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
> b/RedfishPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
> index 128d511df7c9..124ecb1e3aae 100644
> --- a/RedfishPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
> +++ b/RedfishPkg/PrivateLibrary/RedfishLib/RedfishLib.inf
> @@ -3,6 +3,7 @@
>  #
>  #  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
>  #
> @@ -42,6 +43,7 @@
>    BaseLib
>    BaseMemoryLib
>    DebugLib
> +  JsonLib
>    HttpLib
>    MemoryAllocationLib
>    NetLib
> diff --git a/RedfishPkg/Include/Library/RedfishLib.h
> b/RedfishPkg/Include/Library/RedfishLib.h
> index 28c2b290e613..8309a67c769f 100644
> --- a/RedfishPkg/Include/Library/RedfishLib.h
> +++ b/RedfishPkg/Include/Library/RedfishLib.h
> @@ -61,6 +61,7 @@
>
>    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
>
> @@ -183,6 +184,23 @@ RedfishJsonInPayload (
>    IN REDFISH_PAYLOAD  Payload
>    );
>
> +/**
> +  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
> +  );
> +
>  /**
>    Fill the input RedPath string with system UUID from SMBIOS table or use the
> customized
>    ID if  FromSmbios == FALSE.
> @@ -222,7 +240,7 @@ RedfishBuildPathWithSystemUuid (
>                                        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
> +  @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.
> @@ -252,7 +270,7 @@ RedfishGetByService (
>    @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
> +  @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.
> @@ -282,7 +300,7 @@ RedfishGetByUri (
>    @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:
> +  @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.
> @@ -323,7 +341,7 @@ RedfishGetByPayload (
>    @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
> +  @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.
> @@ -357,10 +375,10 @@ RedfishPatchToUri (
>    redfish response data.
>
>    @param[in]    Target           The target payload to be updated.
> -  @param[in]    Payload          Palyoad with properties to be changed.
> +  @param[in]    Payload          Payload 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
> +  @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.
> @@ -398,7 +416,7 @@ RedfishPatchToPayload (
>    @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 opeartion is successful, indicates the HTTP
> StatusCode is not
> +  @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.
> @@ -416,8 +434,8 @@ RedfishPostToUri (
>    IN     REDFISH_SERVICE   RedfishService,
>    IN     CONST CHAR8       *Uri,
>    IN     CONST CHAR8       *Content,
> -  IN     UINTN             ContentSize,
> -  IN     CONST CHAR8       *ContentType,
> +  IN     UINTN             ContentSize OPTIONAL,
> +  IN     CONST CHAR8       *ContentType OPTIONAL,
>    OUT    REDFISH_RESPONSE  *RedResponse
>    );
>
> @@ -436,7 +454,7 @@ RedfishPostToUri (
>    @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
> +  @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.
> @@ -471,7 +489,7 @@ RedfishPostToPayload (
>    @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
> +  @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.
> @@ -507,7 +525,7 @@ RedfishDeleteByUri (
>    @param[in]    Content               JSON represented properties to be deleted.
>    @param[out]   RedResponse           Pointer to the Redfish response data.
>
> -  @retval EFI_SUCCESS             The opeartion is successful, indicates the HTTP
> StatusCode is not
> +  @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.
> @@ -528,6 +546,49 @@ RedfishDeleteByUriEx (
>    OUT    REDFISH_RESPONSE  *RedResponse
>    );
>
> +/**
> +  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
> +  );
> +
>  /**
>    Dump text in fractions.
>
> @@ -582,7 +643,7 @@ RedfishFreeResponse (
>    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]  OdataTypeName            OdataType will be retrieved from
> mapping list.
>    @param[in]  OdataTypeMappingList     The list of OdataType.
>    @param[in]  OdataTypeMappingListSize The number of mapping list
>
> @@ -616,7 +677,7 @@ RedfishIsPayloadCollection (
>    @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_SUCCESS              Collection size is returned in CollectionSize
>    @return EFI_INVALID_PARAMETER    The payload is not a collection.
>  **/
>  EFI_STATUS
> @@ -674,18 +735,18 @@ RedfishGetServiceVersion (
>  /**
>    This function returns the string of Redfish service version.
>
> -  @param[in]   ServiceVerisonStr 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 retrive Redpath, caller has to free
> +  @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  *ServiceVerisonStr,
> +  IN  CHAR8  *ServiceVersionStr,
>    IN  CHAR8  *Url,
>    IN  CHAR8  *Id,
>    OUT CHAR8  **Redpath
> diff --git a/RedfishPkg/PrivateLibrary/RedfishLib/RedfishLib.c
> b/RedfishPkg/PrivateLibrary/RedfishLib/RedfishLib.c
> index cca0ea774893..f4045044829a 100644
> --- a/RedfishPkg/PrivateLibrary/RedfishLib/RedfishLib.c
> +++ b/RedfishPkg/PrivateLibrary/RedfishLib/RedfishLib.c
> @@ -4,6 +4,7 @@
>
>    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
>
> @@ -167,6 +168,30 @@ RedfishJsonInPayload (
>    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.
> @@ -244,7 +269,7 @@ RedfishBuildPathWithSystemUuid (
>                                        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
> +  @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.
> @@ -304,7 +329,7 @@ RedfishGetByService (
>    @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
> +  @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.
> @@ -367,7 +392,7 @@ RedfishGetByUri (
>    @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:
> +  @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.
> @@ -440,7 +465,7 @@ RedfishGetByPayload (
>    @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
> +  @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.
> @@ -527,10 +552,10 @@ ON_EXIT:
>    redfish response data.
>
>    @param[in]    Target           The target payload to be updated.
> -  @param[in]    Payload          Palyoad with properties to be changed.
> +  @param[in]    Payload          Payload 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
> +  @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.
> @@ -601,7 +626,7 @@ RedfishPatchToPayload (
>    @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 opeartion is successful, indicates the HTTP
> StatusCode is not
> +  @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.
> @@ -619,8 +644,8 @@ RedfishPostToUri (
>    IN     REDFISH_SERVICE   RedfishService,
>    IN     CONST CHAR8       *Uri,
>    IN     CONST CHAR8       *Content,
> -  IN     UINTN             ContentSize,
> -  IN     CONST CHAR8       *ContentType,
> +  IN     UINTN             ContentSize OPTIONAL,
> +  IN     CONST CHAR8       *ContentType OPTIONAL,
>    OUT    REDFISH_RESPONSE  *RedResponse
>    )
>  {
> @@ -694,7 +719,7 @@ ON_EXIT:
>    @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
> +  @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.
> @@ -762,7 +787,7 @@ RedfishPostToPayload (
>    @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
> +  @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.
> @@ -850,7 +875,7 @@ ON_EXIT:
>    @param[in]    Content               JSON represented properties to be deleted.
>    @param[out]   RedResponse           Pointer to the Redfish response data.
>
> -  @retval EFI_SUCCESS             The opeartion is successful, indicates the HTTP
> StatusCode is not
> +  @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.
> @@ -1060,7 +1085,7 @@ RedfishFreeResponse (
>    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]  OdataTypeName            OdataType will be retrieved from
> mapping list.
>    @param[in]  OdataTypeMappingList     The list of OdataType.
>    @param[in]  OdataTypeMappingListSize The number of mapping list
>
> @@ -1127,7 +1152,7 @@ RedfishIsPayloadCollection (
>    @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_SUCCESS              Collection size is returned in CollectionSize
>    @return EFI_INVALID_PARAMETER    The payload is not a collection.
>  **/
>  EFI_STATUS
> @@ -1217,3 +1242,103 @@ RedfishCheckIfRedpathExist (
>
>    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/RedfishPkg/PrivateLibrary/RedfishLib/RedfishMisc.c
> b/RedfishPkg/PrivateLibrary/RedfishLib/RedfishMisc.c
> index 0eb23196d2c2..b6e9a111785a 100644
> --- a/RedfishPkg/PrivateLibrary/RedfishLib/RedfishMisc.c
> +++ b/RedfishPkg/PrivateLibrary/RedfishLib/RedfishMisc.c
> @@ -3,6 +3,7 @@
>
>    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
>
> @@ -168,18 +169,18 @@ RedfishGetAuthInfo (
>  /**
>    This function returns the string of Redfish service version.
>
> -  @param[in]   ServiceVerisonStr 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 retrive Redpath, caller has to free
> +  @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  *ServiceVerisonStr,
> +  IN  CHAR8  *ServiceVersionStr,
>    IN  CHAR8  *Url,
>    IN  CHAR8  *Id,
>    OUT CHAR8  **Redpath
> @@ -187,12 +188,12 @@ RedfishBuildRedpathUseId (
>  {
>    UINTN  RedpathSize;
>
> -  if ((Redpath == NULL) || (ServiceVerisonStr == NULL) || (Url == NULL) || (Id
> == NULL)) {
> +  if ((Redpath == NULL) || (ServiceVersionStr == NULL) || (Url == NULL) || (Id
> == NULL)) {
>      return EFI_INVALID_PARAMETER;
>    }
>
>    RedpathSize = AsciiStrLen ("/") +
> -                AsciiStrLen (ServiceVerisonStr) +
> +                AsciiStrLen (ServiceVersionStr) +
>                  AsciiStrLen (Url) +
>                  AsciiStrLen ("[Id=]") +
>                  AsciiStrLen (Id) + 1;
> @@ -201,6 +202,6 @@ RedfishBuildRedpathUseId (
>      return EFI_OUT_OF_RESOURCES;
>    }
>
> -  AsciiSPrint (*Redpath, RedpathSize, "/%a%a[Id=%a]", ServiceVerisonStr, Url,
> Id);
> +  AsciiSPrint (*Redpath, RedpathSize, "/%a%a[Id=%a]", ServiceVersionStr, Url,
> Id);
>    return EFI_SUCCESS;
>  }
> --
> 2.17.1



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



      reply	other threads:[~2023-10-26  6:04 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-24  8:38 [edk2-devel] [PATCH 1/3] RedfishPkg/RedfishLib: introduce new interfaces Nickle Wang via groups.io
2023-10-26  6:04 ` Chang, Abner via groups.io [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=MN2PR12MB3966E80B069E59E4E27863D2EADDA@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