[AMD Official Use Only - General] As I already reviewed offline on Nickle's personal Git repo, Reviewed-by: Abner Chang <abner.ch...@amd.com>
> -----Original Message----- > From: Nickle Wang <nick...@nvidia.com> > Sent: Tuesday, February 20, 2024 2:42 PM > To: devel@edk2.groups.io > Cc: Chang, Abner <abner.ch...@amd.com>; Igor Kulchytskyy > <ig...@ami.com>; Nick Ramirez <nrami...@nvidia.com> > Subject: [PATCH 3/6] RedfishPkg: introduce RedfishHttpLib > > Caution: This message originated from an External Source. Use proper caution > when opening attachments, clicking links, or responding. > > > RedfishHttpLib is a wrapper library for Redfish feature drivers to > call Redfish HTTP Protocol easily. > > Signed-off-by: Nickle Wang <nick...@nvidia.com> > Cc: Abner Chang <abner.ch...@amd.com> > Cc: Igor Kulchytskyy <ig...@ami.com> > Cc: Nick Ramirez <nrami...@nvidia.com> > --- > RedfishPkg/RedfishPkg.dec | 5 + > RedfishPkg/RedfishLibs.dsc.inc | 3 +- > RedfishPkg/RedfishPkg.dsc | 3 +- > .../Library/RedfishHttpLib/RedfishHttpLib.inf | 43 ++ > RedfishPkg/Include/Library/RedfishHttpLib.h | 326 ++++++++++ > .../Library/RedfishHttpLib/RedfishHttpLib.c | 585 ++++++++++++++++++ > 6 files changed, 963 insertions(+), 2 deletions(-) > create mode 100644 RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf > create mode 100644 RedfishPkg/Include/Library/RedfishHttpLib.h > create mode 100644 RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.c > > diff --git a/RedfishPkg/RedfishPkg.dec b/RedfishPkg/RedfishPkg.dec > index 114f8d2ad8..1a9c9ed7bc 100644 > --- a/RedfishPkg/RedfishPkg.dec > +++ b/RedfishPkg/RedfishPkg.dec > @@ -69,6 +69,11 @@ > # > RedfishPlatformConfigLib|Include/Library/RedfishPlatformConfigLib.h > > + ## @libraryclass Provides the library functions to access Redfish HTTP > + # protocol. > + # > + RedfishHttpLib|Include/Library/RedfishHttpLib.h > + > [LibraryClasses.Common.Private] > ## @libraryclass Provides the private C runtime library functions. > # CRT library is currently used by edk2 JsonLib (open source > diff --git a/RedfishPkg/RedfishLibs.dsc.inc b/RedfishPkg/RedfishLibs.dsc.inc > index 5426957da8..55846aaa9d 100644 > --- a/RedfishPkg/RedfishLibs.dsc.inc > +++ b/RedfishPkg/RedfishLibs.dsc.inc > @@ -6,7 +6,7 @@ > # of EDKII network library classes. > # > # (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR> > -# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights > reserved. > +# Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights > reserved. > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -21,5 +21,6 @@ > > RedfishPlatformCredentialLib|RedfishPkg/Library/RedfishPlatformCredentialI > pmiLib/RedfishPlatformCredentialIpmiLib.inf > HiiUtilityLib|RedfishPkg/Library/HiiUtilityLib/HiiUtilityLib.inf > > RedfishPlatformConfigLib|RedfishPkg/Library/RedfishPlatformConfigLib/Red > fishPlatformConfigLib.inf > + RedfishHttpLib|RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf > !endif > > diff --git a/RedfishPkg/RedfishPkg.dsc b/RedfishPkg/RedfishPkg.dsc > index 5849e7cf9e..b0150043a9 100644 > --- a/RedfishPkg/RedfishPkg.dsc > +++ b/RedfishPkg/RedfishPkg.dsc > @@ -4,7 +4,7 @@ > # Copyright (c) 2019 - 2021, Intel Corporation. All rights reserved.<BR> > # (C) Copyright 2021 Hewlett-Packard Enterprise Development LP. > # Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. > -# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights > reserved. > +# Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights > reserved. > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -74,5 +74,6 @@ > RedfishPkg/Library/RedfishDebugLib/RedfishDebugLib.inf > RedfishPkg/Library/HiiUtilityLib/HiiUtilityLib.inf > RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.inf > + RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf > > !include RedfishPkg/Redfish.dsc.inc > diff --git a/RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf > b/RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf > new file mode 100644 > index 0000000000..fd53b8c2ed > --- /dev/null > +++ b/RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf > @@ -0,0 +1,43 @@ > +## @file > +# Redfish HTTP library is wrapper library for application to call Redfish > +# HTTP protocol easily. > +# > +# Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights > reserved. > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION = 0x00010006 > + BASE_NAME = RedfishHttpLib > + FILE_GUID = 62855D9B-441B-436B-9CA6-B7FEB7ABF54E > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = RedfishHttpLib| DXE_DRIVER UEFI_DRIVER > + CONSTRUCTOR = RedfishHttpConstructor > + > +# > +# VALID_ARCHITECTURES = IA32 X64 EBC > +# > + > +[Sources] > + RedfishHttpLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + RedfishPkg/RedfishPkg.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + UefiLib > + UefiBootServicesTableLib > + > +[Protocols] > + gEdkIIRedfishHttpProtocolGuid ## CONSUMES ## > + > +[depex] > + TRUE > + > diff --git a/RedfishPkg/Include/Library/RedfishHttpLib.h > b/RedfishPkg/Include/Library/RedfishHttpLib.h > new file mode 100644 > index 0000000000..b07a46993b > --- /dev/null > +++ b/RedfishPkg/Include/Library/RedfishHttpLib.h > @@ -0,0 +1,326 @@ > +/** @file > + This file defines the Redfish HTTP library interface. > + > + Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights > reserved. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef REDFISH_HTTP_LIB_H_ > +#define REDFISH_HTTP_LIB_H_ > + > +#include <Protocol/EdkIIRedfishHttpProtocol.h> > + > +/** > + This function create Redfish service. It's caller's responsibility to free > returned > + Redfish service by calling FreeService (). > + > + @param[in] RedfishConfigServiceInfo Redfish config service information. > + > + @retval REDFISH_SERVICE Redfish service is created. > + @retval NULL Errors occur. > + > +**/ > +REDFISH_SERVICE > +RedfishCreateService ( > + IN REDFISH_CONFIG_SERVICE_INFORMATION *RedfishConfigServiceInfo > + ); > + > +/** > + This function free resources in Redfish service. RedfishService is no > longer > available > + after this function returns successfully. > + > + @param[in] RedfishService Pointer to Redfish service to be released. > + > + @retval EFI_SUCCESS Resrouce is released successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishCleanupService ( > + IN REDFISH_SERVICE RedfishService > + ); > + > +/** > + This function returns JSON value in given RedfishPayload. Returned JSON > value > + is a reference to the JSON value in RedfishPayload. Any modification to > returned > + JSON value will change JSON value in RedfishPayload. > + > + @param[in] RedfishPayload Pointer to Redfish payload. > + > + @retval EDKII_JSON_VALUE JSON value is returned. > + @retval NULL Errors occur. > + > +**/ > +EDKII_JSON_VALUE > +RedfishJsonInPayload ( > + IN REDFISH_PAYLOAD RedfishPayload > + ); > + > +/** > + This function free resources in Request. Request is no longer available > + after this function returns successfully. > + > + @param[in] Request HTTP request to be released. > + > + @retval EFI_SUCCESS Resrouce is released successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpFreeRequest ( > + IN REDFISH_REQUEST *Request > + ); > + > +/** > + This function free resources in Response. Response is no longer available > + after this function returns successfully. > + > + @param[in] Response HTTP response to be released. > + > + @retval EFI_SUCCESS Resrouce is released successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpFreeResponse ( > + IN REDFISH_RESPONSE *Response > + ); > + > +/** > + This function expire the cached response of given URI. > + > + @param[in] Uri Target response of URI. > + > + @retval EFI_SUCCESS Target response is expired successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpExpireResponse ( > + IN EFI_STRING Uri > + ); > + > +/** > + Get redfish resource from given resource URI with cache mechanism > + supported. It's caller's responsibility to Response by calling > + RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP GET. > + @param[in] Uri Target resource URI. > + @param[in] Request Additional request context. This is optional. > + @param[out] Response HTTP response from redfish service. > + @param[in] UseCache If it is TRUE, this function will search for > + cache first. If it is FALSE, this function > + will query Redfish URI directly. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpGetResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN REDFISH_REQUEST *Request OPTIONAL, > + OUT REDFISH_RESPONSE *Response, > + IN BOOLEAN UseCache > + ); > + > +/** > + Perform HTTP PATCH to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP PATCH. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to patch. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPatchResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + OUT REDFISH_RESPONSE *Response > + ); > + > +/** > + Perform HTTP PATCH to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP PATCH. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to patch. > + @param[in] ContentSize Size of the Content to be send to Redfish > service. > + This is optional. When ContentSize is 0, > ContentSize > + is the size of Content. > + @param[in] ContentType Type of the Content to be send to Redfish > service. > + This is optional. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPatchResourceEx ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + IN UINTN ContentSize OPTIONAL, > + IN CHAR8 *ContentType OPTIONAL, > + OUT REDFISH_RESPONSE *Response > + ); > + > +/** > + Perform HTTP PUT to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP PUT. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to put. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPutResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + OUT REDFISH_RESPONSE *Response > + ); > + > +/** > + Perform HTTP PUT to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP PUT. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to put. > + @param[in] ContentSize Size of the Content to be send to Redfish > service. > + This is optional. When ContentSize is 0, > ContentSize > + is the size of Content. > + @param[in] ContentType Type of the Content to be send to Redfish > service. > + This is optional. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPutResourceEx ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + IN UINTN ContentSize OPTIONAL, > + IN CHAR8 *ContentType OPTIONAL, > + OUT REDFISH_RESPONSE *Response > + ); > + > +/** > + Perform HTTP POST to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP POST. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to post. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPostResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + OUT REDFISH_RESPONSE *Response > + ); > + > +/** > + Perform HTTP POST to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP POST. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to post. > + @param[in] ContentSize Size of the Content to be send to Redfish > service. > + This is optional. When ContentSize is 0, > ContentSize > + is the size of Content. > + @param[in] ContentType Type of the Content to be send to Redfish > service. > + This is optional. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPostResourceEx ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + IN UINTN ContentSize OPTIONAL, > + IN CHAR8 *ContentType OPTIONAL, > + OUT REDFISH_RESPONSE *Response > + ); > + > +/** > + Perform HTTP DELETE to delete redfish resource on given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP DELETE. > + @param[in] Uri Target resource URI. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpDeleteResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + OUT REDFISH_RESPONSE *Response > + ); > + > +/** > + Perform HTTP DELETE to delete redfish resource on given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP DELETE. > + @param[in] Uri Target resource URI. > + @param[in] Content JSON represented properties to be deleted. This > is > + optional. > + @param[in] ContentSize Size of the Content to be send to Redfish > service. > + This is optional. When ContentSize is 0, > ContentSize > + is the size of Content if Content is not NULL. > + @param[in] ContentType Type of the Content to be send to Redfish > service. > + This is optional. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpDeleteResourceEx ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content OPTIONAL, > + IN UINTN ContentSize OPTIONAL, > + IN CHAR8 *ContentType OPTIONAL, > + OUT REDFISH_RESPONSE *Response > + ); > + > +#endif > diff --git a/RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.c > b/RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.c > new file mode 100644 > index 0000000000..0a17952d63 > --- /dev/null > +++ b/RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.c > @@ -0,0 +1,585 @@ > +/** @file > + Redfish HTTP cache library helps Redfish application to get Redfish > resource > + from BMC with cache mechanism enabled. > + > + Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights > reserved. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include <Library/BaseLib.h> > +#include <Library/DebugLib.h> > +#include <Library/RedfishHttpLib.h> > +#include <Library/UefiBootServicesTableLib.h> > +#include <Library/UefiLib.h> > + > +EDKII_REDFISH_HTTP_PROTOCOL *mRedfishHttpProtocol = NULL; > + > +/** > + This function create Redfish service. It's caller's responsibility to free > returned > + Redfish service by calling FreeService (). > + > + @param[in] RedfishConfigServiceInfo Redfish config service information. > + > + @retval REDFISH_SERVICE Redfish service is created. > + @retval NULL Errors occur. > + > +**/ > +REDFISH_SERVICE > +RedfishCreateService ( > + IN REDFISH_CONFIG_SERVICE_INFORMATION *RedfishConfigServiceInfo > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return NULL; > + } > + > + return mRedfishHttpProtocol->CreateService ( > + mRedfishHttpProtocol, > + RedfishConfigServiceInfo > + ); > +} > + > +/** > + This function free resources in Redfish service. RedfishService is no > longer > available > + after this function returns successfully. > + > + @param[in] RedfishService Pointer to Redfish service to be released. > + > + @retval EFI_SUCCESS Resrouce is released successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishCleanupService ( > + IN REDFISH_SERVICE RedfishService > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->FreeService ( > + mRedfishHttpProtocol, > + RedfishService > + ); > +} > + > +/** > + This function returns JSON value in given RedfishPayload. Returned JSON > value > + is a reference to the JSON value in RedfishPayload. Any modification to > returned > + JSON value will change JSON value in RedfishPayload. > + > + @param[in] RedfishPayload Pointer to Redfish payload. > + > + @retval EDKII_JSON_VALUE JSON value is returned. > + @retval NULL Errors occur. > + > +**/ > +EDKII_JSON_VALUE > +RedfishJsonInPayload ( > + IN REDFISH_PAYLOAD RedfishPayload > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return NULL; > + } > + > + return mRedfishHttpProtocol->JsonInPayload ( > + mRedfishHttpProtocol, > + RedfishPayload > + ); > +} > + > +/** > + This function free resources in Request. Request is no longer available > + after this function returns successfully. > + > + @param[in] Request HTTP request to be released. > + > + @retval EFI_SUCCESS Resrouce is released successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpFreeRequest ( > + IN REDFISH_REQUEST *Request > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->FreeRequest ( > + mRedfishHttpProtocol, > + Request > + ); > +} > + > +/** > + This function free resources in Response. Response is no longer available > + after this function returns successfully. > + > + @param[in] Response HTTP response to be released. > + > + @retval EFI_SUCCESS Resrouce is released successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpFreeResponse ( > + IN REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->FreeResponse ( > + mRedfishHttpProtocol, > + Response > + ); > +} > + > +/** > + This function expire the cached response of given URI. > + > + @param[in] Uri Target response of URI. > + > + @retval EFI_SUCCESS Target response is expired successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpExpireResponse ( > + IN EFI_STRING Uri > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->ExpireResponse ( > + mRedfishHttpProtocol, > + Uri > + ); > +} > + > +/** > + Get redfish resource from given resource URI with cache mechanism > + supported. It's caller's responsibility to Response by calling > + RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP GET. > + @param[in] Uri Target resource URI. > + @param[in] Request Additional request context. This is optional. > + @param[out] Response HTTP response from redfish service. > + @param[in] UseCache If it is TRUE, this function will search for > + cache first. If it is FALSE, this function > + will query Redfish URI directly. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpGetResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN REDFISH_REQUEST *Request OPTIONAL, > + OUT REDFISH_RESPONSE *Response, > + IN BOOLEAN UseCache > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->GetResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + Request, > + Response, > + UseCache > + ); > +} > + > +/** > + Perform HTTP PATCH to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP PATCH. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to patch. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPatchResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + OUT REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->PatchResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + Content, > + 0, > + NULL, > + Response > + ); > +} > + > +/** > + Perform HTTP PATCH to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP PATCH. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to patch. > + @param[in] ContentSize Size of the Content to be send to Redfish > service. > + This is optional. When ContentSize is 0, > ContentSize > + is the size of Content. > + @param[in] ContentType Type of the Content to be send to Redfish > service. > + This is optional. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPatchResourceEx ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + IN UINTN ContentSize OPTIONAL, > + IN CHAR8 *ContentType OPTIONAL, > + OUT REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->PatchResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + Content, > + ContentSize, > + ContentType, > + Response > + ); > +} > + > +/** > + Perform HTTP PUT to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP PUT. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to put. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPutResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + OUT REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->PutResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + Content, > + 0, > + NULL, > + Response > + ); > +} > + > +/** > + Perform HTTP PUT to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP PUT. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to put. > + @param[in] ContentSize Size of the Content to be send to Redfish > service. > + This is optional. When ContentSize is 0, > ContentSize > + is the size of Content. > + @param[in] ContentType Type of the Content to be send to Redfish > service. > + This is optional. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPutResourceEx ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + IN UINTN ContentSize OPTIONAL, > + IN CHAR8 *ContentType OPTIONAL, > + OUT REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->PutResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + Content, > + ContentSize, > + ContentType, > + Response > + ); > +} > + > +/** > + Perform HTTP POST to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP POST. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to post. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPostResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + OUT REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->PostResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + Content, > + 0, > + NULL, > + Response > + ); > +} > + > +/** > + Perform HTTP POST to send redfish resource to given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP POST. > + @param[in] Uri Target resource URI. > + @param[in] Content Data to post. > + @param[in] ContentSize Size of the Content to be send to Redfish > service. > + This is optional. When ContentSize is 0, > ContentSize > + is the size of Content. > + @param[in] ContentType Type of the Content to be send to Redfish > service. > + This is optional. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpPostResourceEx ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content, > + IN UINTN ContentSize OPTIONAL, > + IN CHAR8 *ContentType OPTIONAL, > + OUT REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->PostResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + Content, > + ContentSize, > + ContentType, > + Response > + ); > +} > + > +/** > + Perform HTTP DELETE to delete redfish resource on given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP DELETE. > + @param[in] Uri Target resource URI. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpDeleteResource ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + OUT REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->DeleteResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + NULL, > + 0, > + NULL, > + Response > + ); > +} > + > +/** > + Perform HTTP DELETE to delete redfish resource on given resource URI. > + It's caller's responsibility to free Response by calling > RedfishHttpFreeResponse (). > + > + @param[in] Service Redfish service instance to perform HTTP DELETE. > + @param[in] Uri Target resource URI. > + @param[in] Content JSON represented properties to be deleted. This > is > + optional. > + @param[in] ContentSize Size of the Content to be send to Redfish > service. > + This is optional. When ContentSize is 0, > ContentSize > + is the size of Content if Content is not NULL. > + @param[in] ContentType Type of the Content to be send to Redfish > service. > + This is optional. > + @param[out] Response HTTP response from redfish service. > + > + @retval EFI_SUCCESS Resrouce is returned successfully. > + @retval Others Errors occur. > + > +**/ > +EFI_STATUS > +RedfishHttpDeleteResourceEx ( > + IN REDFISH_SERVICE Service, > + IN EFI_STRING Uri, > + IN CHAR8 *Content OPTIONAL, > + IN UINTN ContentSize OPTIONAL, > + IN CHAR8 *ContentType OPTIONAL, > + OUT REDFISH_RESPONSE *Response > + ) > +{ > + if (mRedfishHttpProtocol == NULL) { > + return EFI_NOT_READY; > + } > + > + return mRedfishHttpProtocol->DeleteResource ( > + mRedfishHttpProtocol, > + Service, > + Uri, > + Content, > + ContentSize, > + ContentType, > + Response > + ); > +} > + > +/** > + Callback function when gEdkIIRedfishHttpProtocolGuid is installed. > + > + @param[in] Event Event whose notification function is being invoked. > + @param[in] Context Pointer to the notification function's context. > +**/ > +VOID > +EFIAPI > +RedfishHttpProtocolIsReady ( > + IN EFI_EVENT Event, > + IN VOID *Context > + ) > +{ > + EFI_STATUS Status; > + > + if (mRedfishHttpProtocol != NULL) { > + gBS->CloseEvent (Event); > + return; > + } > + > + Status = gBS->LocateProtocol ( > + &gEdkIIRedfishHttpProtocolGuid, > + NULL, > + (VOID **)&mRedfishHttpProtocol > + ); > + if (EFI_ERROR (Status)) { > + return; > + } > + > + gBS->CloseEvent (Event); > +} > + > +/** > + > + Initial HTTP library instance. > + > + @param[in] ImageHandle The image handle. > + @param[in] SystemTable The system table. > + > + @retval EFI_SUCCESS Initial library successfully. > + @retval Other Return error status. > + > +**/ > +EFI_STATUS > +EFIAPI > +RedfishHttpConstructor ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + VOID *Registration; > + > + EfiCreateProtocolNotifyEvent ( > + &gEdkIIRedfishHttpProtocolGuid, > + TPL_CALLBACK, > + RedfishHttpProtocolIsReady, > + NULL, > + &Registration > + ); > + > + return EFI_SUCCESS; > +} > -- > 2.34.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115693): https://edk2.groups.io/g/devel/message/115693 Mute This Topic: https://groups.io/mt/104463405/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-