implement Redfish HTTP protocol driver. Signed-off-by: Nickle Wang <nicklew@nvidia.com> Co-authored-by: Igor Kulchytskyy <igork@ami.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> Reviewed-by: Mike Maslenkin <mike.maslenkin@gmail.com>
		
			
				
	
	
		
			257 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			257 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Definitions of RedfishHttpData
 | 
						|
 | 
						|
  Copyright (c) 2023-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef EDKII_REDFISH_HTTP_DATA_H_
 | 
						|
#define EDKII_REDFISH_HTTP_DATA_H_
 | 
						|
 | 
						|
#include "RedfishHttpDxe.h"
 | 
						|
 | 
						|
#define REDFISH_HTTP_DRIVER_SIGNATURE   SIGNATURE_32 ('r', 'f', 'h', 'p')
 | 
						|
#define REDFISH_HTTP_CACHE_SIGNATURE    SIGNATURE_32 ('r', 'f', 'c', 'h')
 | 
						|
#define REDFISH_HTTP_SERVICE_SIGNATURE  SIGNATURE_32 ('r', 'f', 's', 'v')
 | 
						|
#define REDFISH_HTTP_PAYLOAD_SIGNATURE  SIGNATURE_32 ('r', 'f', 'p', 'l')
 | 
						|
#define REDFISH_HTTP_BASIC_AUTH_STR     "Basic "
 | 
						|
 | 
						|
///
 | 
						|
/// REDFISH_SERVICE_PRIVATE definition.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  UINT32                  Signature;
 | 
						|
  CHAR8                   *Host;
 | 
						|
  CHAR8                   *HostName;
 | 
						|
  CHAR8                   *BasicAuth;
 | 
						|
  CHAR8                   *SessionToken;
 | 
						|
  EFI_REST_EX_PROTOCOL    *RestEx;
 | 
						|
} REDFISH_SERVICE_PRIVATE;
 | 
						|
 | 
						|
///
 | 
						|
/// REDFISH_PAYLOAD_PRIVATE definition.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  UINT32                     Signature;
 | 
						|
  REDFISH_SERVICE_PRIVATE    *Service;
 | 
						|
  EDKII_JSON_VALUE           JsonValue;
 | 
						|
} REDFISH_PAYLOAD_PRIVATE;
 | 
						|
 | 
						|
///
 | 
						|
/// Definition of REDFISH_HTTP_CACHE_DATA
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  UINT32              Signature;
 | 
						|
  LIST_ENTRY          List;
 | 
						|
  EFI_STRING          Uri;
 | 
						|
  UINTN               HitCount;
 | 
						|
  REDFISH_RESPONSE    *Response;
 | 
						|
} REDFISH_HTTP_CACHE_DATA;
 | 
						|
 | 
						|
#define REDFISH_HTTP_CACHE_FROM_LIST(a)  CR (a, REDFISH_HTTP_CACHE_DATA, List, REDFISH_HTTP_CACHE_SIGNATURE)
 | 
						|
 | 
						|
///
 | 
						|
/// Definition of REDFISH_HTTP_CACHE_LIST
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  LIST_ENTRY    Head;
 | 
						|
  UINTN         Count;
 | 
						|
  UINTN         Capacity;
 | 
						|
} REDFISH_HTTP_CACHE_LIST;
 | 
						|
 | 
						|
///
 | 
						|
/// Definition of REDFISH_HTTP_RETRY_SETTING
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  UINT16    MaximumRetryGet;
 | 
						|
  UINT16    MaximumRetryPut;
 | 
						|
  UINT16    MaximumRetryPost;
 | 
						|
  UINT16    MaximumRetryPatch;
 | 
						|
  UINT16    MaximumRetryDelete;
 | 
						|
  UINTN     RetryWait;
 | 
						|
} REDFISH_HTTP_RETRY_SETTING;
 | 
						|
 | 
						|
///
 | 
						|
/// Definition of REDFISH_HTTP_CACHE_PRIVATE
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  UINT32                               Signature;
 | 
						|
  EFI_HANDLE                           ImageHandle;
 | 
						|
  BOOLEAN                              CacheDisabled;
 | 
						|
  EFI_EVENT                            NotifyEvent;
 | 
						|
  REDFISH_HTTP_CACHE_LIST              CacheList;
 | 
						|
  EDKII_REDFISH_HTTP_PROTOCOL          Protocol;
 | 
						|
  EDKII_REDFISH_CREDENTIAL_PROTOCOL    *CredentialProtocol;
 | 
						|
  REDFISH_HTTP_RETRY_SETTING           RetrySetting;
 | 
						|
} REDFISH_HTTP_CACHE_PRIVATE;
 | 
						|
 | 
						|
#define REDFISH_HTTP_CACHE_PRIVATE_FROM_THIS(a)  CR (a, REDFISH_HTTP_CACHE_PRIVATE, Protocol, REDFISH_HTTP_DRIVER_SIGNATURE)
 | 
						|
 | 
						|
/**
 | 
						|
  Search on given ListHeader for given URI string.
 | 
						|
 | 
						|
  @param[in]    ListHeader  Target list to search.
 | 
						|
  @param[in]    Uri         Target URI to search.
 | 
						|
 | 
						|
  @retval REDFISH_HTTP_CACHE_DATA   Target cache data is found.
 | 
						|
  @retval NULL                      No cache data with given URI is found.
 | 
						|
 | 
						|
**/
 | 
						|
REDFISH_HTTP_CACHE_DATA *
 | 
						|
FindHttpCacheData (
 | 
						|
  IN  LIST_ENTRY  *ListHeader,
 | 
						|
  IN  EFI_STRING  Uri
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function copy the data in SrcResponse to DstResponse.
 | 
						|
 | 
						|
  @param[in]  SrcResponse      Source Response to copy.
 | 
						|
  @param[out] DstResponse      Destination Response.
 | 
						|
 | 
						|
  @retval     EFI_SUCCESS      Response is copied successfully.
 | 
						|
  @retval     Others           Error occurs.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CopyRedfishResponse (
 | 
						|
  IN  REDFISH_RESPONSE  *SrcResponse,
 | 
						|
  OUT REDFISH_RESPONSE  *DstResponse
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Release all cache from list.
 | 
						|
 | 
						|
  @param[in]    CacheList    The list to be released.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             All cache data are released.
 | 
						|
  @retval EFI_INVALID_PARAMETER   CacheList is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
ReleaseCacheList (
 | 
						|
  IN  REDFISH_HTTP_CACHE_LIST  *CacheList
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Add new cache by given URI and HTTP response to specify List.
 | 
						|
 | 
						|
  @param[in]    List      Target cache list to add.
 | 
						|
  @param[in]    Uri       The URI string matching to this cache data.
 | 
						|
  @param[in]    Response  HTTP response.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS   Cache data is added.
 | 
						|
  @retval Others        Fail to add cache data.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
AddHttpCacheData (
 | 
						|
  IN  REDFISH_HTTP_CACHE_LIST  *List,
 | 
						|
  IN  EFI_STRING               Uri,
 | 
						|
  IN  REDFISH_RESPONSE         *Response
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Delete a cache data by given cache instance.
 | 
						|
 | 
						|
  @param[in]    List    Target cache list to be removed.
 | 
						|
  @param[in]    Data    Pointer to the instance to be deleted.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS   Cache data is removed.
 | 
						|
  @retval Others        Fail to remove cache data.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
DeleteHttpCacheData (
 | 
						|
  IN  REDFISH_HTTP_CACHE_LIST  *List,
 | 
						|
  IN  REDFISH_HTTP_CACHE_DATA  *Data
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function release Redfish Payload.
 | 
						|
 | 
						|
  @param[in]  Payload         Pointer to payload instance.
 | 
						|
 | 
						|
  @retval     EFI_SUCCESS     Payload is released.
 | 
						|
  @retval     Others          Error occurs.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
ReleaseRedfishPayload (
 | 
						|
  IN REDFISH_PAYLOAD_PRIVATE  *Payload
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function creat new payload. Server and JsonObj are
 | 
						|
  copied to newly created payload.
 | 
						|
 | 
						|
  @param[in]  Service          Pointer to Service instance.
 | 
						|
  @param[in]  JsonObj          Pointer to JSON object.
 | 
						|
 | 
						|
  @retval     REDFISH_PAYLOAD_PRIVATE  Newly created payload.
 | 
						|
  @retval     NULL             Error occurs.
 | 
						|
 | 
						|
**/
 | 
						|
REDFISH_PAYLOAD_PRIVATE *
 | 
						|
CreateRedfishPayload (
 | 
						|
  IN REDFISH_SERVICE_PRIVATE  *Service,
 | 
						|
  IN EDKII_JSON_VALUE         JsonValue
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function release Redfish Service.
 | 
						|
 | 
						|
  @param[in]  Service         Pointer to service instance.
 | 
						|
 | 
						|
  @retval     EFI_SUCCESS     Service is released.
 | 
						|
  @retval     Others          Error occurs.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
ReleaseRedfishService (
 | 
						|
  IN REDFISH_SERVICE_PRIVATE  *Service
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function creat new service. Host and HostName are copied to
 | 
						|
  newly created service instance.
 | 
						|
 | 
						|
  @param[in]  Host            Host string.
 | 
						|
  @param[in]  HostName        Hostname string.
 | 
						|
  @param[in]  BasicAuth       Basic Authorization string.
 | 
						|
  @param[in]  SessionToken    Session token string.
 | 
						|
  @param[in]  RestEx          Rest EX protocol instance.
 | 
						|
 | 
						|
  @retval     REDFISH_PAYLOAD_PRIVATE  Newly created service.
 | 
						|
  @retval     NULL             Error occurs.
 | 
						|
 | 
						|
**/
 | 
						|
REDFISH_SERVICE_PRIVATE *
 | 
						|
CreateRedfishService (
 | 
						|
  IN CHAR8                 *Host,
 | 
						|
  IN CHAR8                 *HostName,
 | 
						|
  IN CHAR8                 *BasicAuth OPTIONAL,
 | 
						|
  IN CHAR8                 *SessionToken OPTIONAL,
 | 
						|
  IN EFI_REST_EX_PROTOCOL  *RestEx
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function update session token in Redfish Service.
 | 
						|
 | 
						|
  @param[in]  Service         Pointer to service instance.
 | 
						|
  @param[in]  Token           Session token.
 | 
						|
 | 
						|
  @retval     EFI_SUCCESS     Session token is updated.
 | 
						|
  @retval     Others          Error occurs.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
UpdateSessionToken (
 | 
						|
  IN REDFISH_SERVICE_PRIVATE  *Service,
 | 
						|
  IN CHAR8                    *Token
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |