mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-04 13:23:26 +01:00
204 lines
5.4 KiB
C
204 lines
5.4 KiB
C
/** @file
|
|
This file is cloned from DMTF libredfish library tag v1.0.0 and maintained
|
|
by EDKII.
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Copyright Notice:
|
|
// Copyright 2017 Distributed Management Task Force, Inc. All rights reserved.
|
|
// License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libredfish/LICENSE.md
|
|
//----------------------------------------------------------------------------
|
|
|
|
Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
|
|
(C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
|
|
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef LIBREDFISH_REDFISH_SERVICE_H_
|
|
#define LIBREDFISH_REDFISH_SERVICE_H_
|
|
|
|
#include <IndustryStandard/Http11.h>
|
|
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/HttpLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/NetLib.h>
|
|
#include <Library/RedfishContentCodingLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
|
|
#include <Include/Library/RedfishCrtLib.h>
|
|
|
|
#include <Protocol/EdkIIRedfishConfigHandler.h>
|
|
#include <Protocol/RestEx.h>
|
|
|
|
#include <jansson.h>
|
|
|
|
typedef struct {
|
|
char *host;
|
|
json_t *versions;
|
|
unsigned int flags;
|
|
char *sessionToken;
|
|
char *basicAuthStr;
|
|
//
|
|
// point to the <HOST> part in above "host" field, which will be put into
|
|
// the "Host" header of HTTP request message.
|
|
//
|
|
char *HostHeaderValue;
|
|
EFI_REST_EX_PROTOCOL *RestEx;
|
|
} redfishService;
|
|
|
|
typedef struct {
|
|
json_t *json;
|
|
redfishService *service;
|
|
} redfishPayload;
|
|
|
|
#define REDFISH_AUTH_BASIC 0
|
|
#define REDFISH_AUTH_BEARER_TOKEN 1
|
|
#define REDFISH_AUTH_SESSION 2
|
|
|
|
#define REDFISH_HTTP_RESPONSE_TIMEOUT 5000 /// 5 seconds in uints of millisecond.
|
|
|
|
///
|
|
/// Library class public defines
|
|
///
|
|
#define HTTP_FLAG L"http://"
|
|
#define HTTPS_FLAG L"https://"
|
|
|
|
///
|
|
/// The redfish first URL should be "/redfish/v1/", while we use "/redfish/v1" here without "/"
|
|
/// in the end is to avoid the 301 Perment redirect response from Redfish profile simulator.
|
|
///
|
|
#define REDFISH_FIRST_URL L"/redfish/v1"
|
|
|
|
typedef struct {
|
|
unsigned int authType;
|
|
union {
|
|
struct {
|
|
char *username;
|
|
char *password;
|
|
} userPass;
|
|
struct {
|
|
char *token;
|
|
} authToken;
|
|
} authCodes;
|
|
} enumeratorAuthentication;
|
|
|
|
// Values for flags
|
|
#define REDFISH_FLAG_SERVICE_NO_VERSION_DOC 0x00000001// The Redfish Service lacks the version document (in violation of the Redfish spec)
|
|
redfishService *
|
|
createServiceEnumerator (
|
|
REDFISH_CONFIG_SERVICE_INFORMATION *RedfishConfigServiceInfo,
|
|
const char *rootUri,
|
|
enumeratorAuthentication *auth,
|
|
unsigned int flags
|
|
);
|
|
|
|
json_t *
|
|
getUriFromService (
|
|
redfishService *service,
|
|
const char *uri,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
json_t *
|
|
getUriFromServiceEx (
|
|
redfishService *service,
|
|
const char *uri,
|
|
EFI_HTTP_HEADER **Headers,
|
|
UINTN *HeaderCount,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
json_t *
|
|
patchUriFromService (
|
|
redfishService *service,
|
|
const char *uri,
|
|
const char *content,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
json_t *
|
|
patchUriFromServiceEx (
|
|
redfishService *service,
|
|
const char *uri,
|
|
const char *content,
|
|
EFI_HTTP_HEADER **Headers,
|
|
UINTN *HeaderCount,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
json_t *
|
|
postUriFromService (
|
|
redfishService *service,
|
|
const char *uri,
|
|
const char *content,
|
|
size_t contentLength,
|
|
const char *contentType,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
json_t *
|
|
postUriFromServiceEx (
|
|
redfishService *service,
|
|
const char *uri,
|
|
const char *content,
|
|
size_t contentLength,
|
|
const char *contentType,
|
|
EFI_HTTP_HEADER **Headers,
|
|
UINTN *HeaderCount,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
json_t *
|
|
putUriFromServiceEx (
|
|
redfishService *service,
|
|
const char *uri,
|
|
const char *content,
|
|
size_t contentLength,
|
|
const char *contentType,
|
|
EFI_HTTP_HEADER **Headers,
|
|
UINTN *HeaderCount,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
json_t *
|
|
deleteUriFromService (
|
|
redfishService *service,
|
|
const char *uri,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
json_t *
|
|
deleteUriFromServiceEx (
|
|
redfishService *service,
|
|
const char *uri,
|
|
const char *content,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
redfishPayload *
|
|
getRedfishServiceRoot (
|
|
redfishService *service,
|
|
const char *version,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
redfishPayload *
|
|
getPayloadByPath (
|
|
redfishService *service,
|
|
const char *path,
|
|
EFI_HTTP_STATUS_CODE **StatusCode
|
|
);
|
|
|
|
void
|
|
cleanupServiceEnumerator (
|
|
redfishService *service
|
|
);
|
|
|
|
#endif
|