Reviewed-by: Igor Kulchytskyy <ig...@ami.com> -----Original Message----- From: Nickle Wang <nick...@nvidia.com> Sent: Thursday, February 22, 2024 4:12 AM To: devel@edk2.groups.io Cc: Abner Chang <abner.ch...@amd.com>; Igor Kulchytskyy <ig...@ami.com>; Nick Ramirez <nrami...@nvidia.com> Subject: [EXTERNAL] [PATCH v2 3/6] RedfishPkg: introduce RedfishHttpLib
**CAUTION: The e-mail below is from an external source. Please exercise caution before opening attachments, clicking links, or following guidance.** 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> Reviewed-by: Abner Chang <abner.ch...@amd.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/RedfishPlatformCredentialIpmiLib/RedfishPlatformCredentialIpmiLib.inf HiiUtilityLib|RedfishPkg/Library/HiiUtilityLib/HiiUtilityLib.inf RedfishPlatformConfigLib|RedfishPkg/Library/RedfishPlatformConfigLib/RedfishPlatformConfigLib.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 -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. -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115819): https://edk2.groups.io/g/devel/message/115819 Mute This Topic: https://groups.io/mt/104505405/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-