mirror of
				https://gitlab.com/qemu-project/edk2.git
				synced 2025-10-30 07:56:39 +08:00 
			
		
		
		
	RedfishPkg: introduce RedfishHttpLib
RedfishHttpLib is a wrapper library for Redfish feature drivers to call Redfish HTTP Protocol easily. 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> Reviewed-by: Abner Chang <abner.chang@amd.com> Reviewed-by: Igor Kulchytskyy <igork@ami.com>
This commit is contained in:
		 Nickle Wang
					Nickle Wang
				
			
				
					committed by
					
						![mergify[bot]](/assets/img/avatar_default.png) mergify[bot]
						mergify[bot]
					
				
			
			
				
	
			
			
			![mergify[bot]](/assets/img/avatar_default.png) mergify[bot]
						mergify[bot]
					
				
			
						parent
						
							0ce2012c6c
						
					
				
				
					commit
					9da786c16f
				
			
							
								
								
									
										326
									
								
								RedfishPkg/Include/Library/RedfishHttpLib.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										326
									
								
								RedfishPkg/Include/Library/RedfishHttpLib.h
									
									
									
									
									
										Normal file
									
								
							| @ -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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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 | ||||
							
								
								
									
										585
									
								
								RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										585
									
								
								RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.c
									
									
									
									
									
										Normal file
									
								
							| @ -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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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     Resource 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; | ||||
| } | ||||
							
								
								
									
										43
									
								
								RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								RedfishPkg/Library/RedfishHttpLib/RedfishHttpLib.inf
									
									
									
									
									
										Normal file
									
								
							| @ -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 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user