From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (NAM12-DM6-obe.outbound.protection.outlook.com [40.107.243.42]) by mx.groups.io with SMTP id smtpd.web10.51642.1683210334787443272 for ; Thu, 04 May 2023 07:25:35 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@nvidia.com header.s=selector2 header.b=T04peuAU; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.243.42, mailfrom: nicklew@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fi4ZNtzrv/wY5cDBbAVkARTbKoaAZx2tmB7AFXCr0RvAuUKBT8QG07Umvwk3NLni8vovYqTwplvu9/KRXc9CzpU6w5YTwAP5I2hle1lGw5+3pi7BWit0evcvCbUJeWPBWJX14l9JmD7jocx3hQ7VLUhpPTwZQ81VvzVdvVyxKz1y8tmaa23abShX5Ty/rNtLgn3lfqpI7ZMo36DJVYem1/STy7QwKFA3RnZdWBOhePVm8vv2Nho5OywqEWw/uu+w5VmwPcgtfQNuxd8YISy+tRH5BgLsFDMhnAzIrV+fjFC6Mj/NBWmcJ0keK9dy7dRjcWetTzWyBonAS85onYuibA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MjJRV7d2Edy7q2/JtId0i6lu3wd38EobDwkVBgBtH0s=; b=Ytmlt9ew1Je0VDkUw21syOjz7OkCobcR8DXmqLSgPDc4pKKHgezmn4vc1uJK/xhf5riy46Q0cGSUIOGja0gDs93S24yJyazDgO5bnFjNKpITubVpQll818VnKX7S3cNqoz5I1LhAPv9oiXeN/WRvDAn7aHQE9a3WDgMc3YDWinN0QHqRU0R7Bb+0ZVgQzn+0IbSNpL18xB6ITyJTt63y4Tdfkwv6Eq58nLs9pvTP5QIvHnG+FWDDt95VEEb8aRCXYx+z+7ksyvpfmnnnJ9eFc8St1xpn6mpI43fJNxrfE+Tfbv+l42xEXn5hLHwrkYXaewfmU6iarM00v15kch8A6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MjJRV7d2Edy7q2/JtId0i6lu3wd38EobDwkVBgBtH0s=; b=T04peuAUBrXS3uWK1MvBpsevd2w4mxTEGGbm0VGKimQH/Jbkj86t2GUT+x2sInZZQzNyp5kHm0luKS8lq+JhL3AI9NwxkfX/VdSw5EWR8wWBqMuK9LF6zkdUORMZzG26sfUg22gCSC2AN8i1OIk8BFxGHCSnFNP6rVoJnEr93bTCu/xPEL9R1pGYpXeXy3wd4KnxQE6VRWAL+0vnsgvPon5Fwty9RG5TgoThjrZ2reOM7Wa3sOdB8rKy5P3uE8j+9/hTvmACz+MpXDb6lK61j3PfFn2oZ1BPKvTDjjWHb5fY1iVLN03+bJY4UZ39A7oyUMQkXwUm9F+Vy+ud91IyBw== Received: from MW4P222CA0026.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::31) by PH8PR12MB7231.namprd12.prod.outlook.com (2603:10b6:510:225::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.22; Thu, 4 May 2023 14:25:31 +0000 Received: from CO1NAM11FT074.eop-nam11.prod.protection.outlook.com (2603:10b6:303:114:cafe::b8) by MW4P222CA0026.outlook.office365.com (2603:10b6:303:114::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.26 via Frontend Transport; Thu, 4 May 2023 14:25:31 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1NAM11FT074.mail.protection.outlook.com (10.13.174.254) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.26 via Frontend Transport; Thu, 4 May 2023 14:25:31 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.5; Thu, 4 May 2023 07:25:13 -0700 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.37; Thu, 4 May 2023 07:25:13 -0700 Received: from NV-CL38DL3.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server id 15.2.986.37 via Frontend Transport; Thu, 4 May 2023 07:25:12 -0700 From: "Nickle Wang" To: CC: Abner Chang , Igor Kulchytskyy Subject: [edk2-redfish-client][PATCH 5/8] RedfishClientPkg: Add RedfishLib.h Date: Thu, 4 May 2023 22:25:11 +0800 Message-ID: <20230504142511.17864-1-nicklew@nvidia.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Return-Path: nicklew@nvidia.com X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1NAM11FT074:EE_|PH8PR12MB7231:EE_ X-MS-Office365-Filtering-Correlation-Id: c1b2a533-fbd5-4716-d375-08db4cab6a93 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2NCxr8ydjcoqzljGm7Of9WYJp48hQAS2CxTAKCkt8tbwrdAKEUk1N2bDRZg8/JghTAuM5CiqwBST4ddlBghZaWunfX2t4v/Jqyc3bZ2uc2muvA/JYdBZq3msbTpMuxbyWWeqKUuwrZewAVrU6A/hvMV9Z2klPuvj5qfB3JxQMm1uWRm+M6P83K0DIdXuI9ka09JXqux9ilxGA/1LZDSLlQ89eECSMX0sF/RnQFjhg/M4imTReFqOq5nfzDYPU0TC0PdnURpEqNegE356XnwObOSpwaTlzg7PWqGUHCQf6UiDl5SHL9XC0uPpR1HjVlMmSg7QCE8gvNOkd/QZWcexiWUryTuuUlx/+PsjW0gJQFWg8RGfpa39inkmxxM4SqAxsKASkMjfSarxJSGZg4kFhD0pbTebvfmuNfyCcoahly6O1eN5T09mZS8lDTjW0gBOLKjA8wkdn+TX0of1NDuaXiGBfCeWqJ9GRUR2MZAJ052qDsjZZFlkt37OPnIeQFugS8WciZu3f8nCWmST5EgX9xGWopUJnSkpY/Kv1WoVljanY+BsFHSnhBIo4+cT97L9cl9f00xuijH23UhUnsELEEFBF6s0Aq6A1q3kEdGZfaW9Nuno4HQgLUUSVtIA/wFyTBy5fyLz0lBwbvJqAPOl1J1TFmk9nqYQigky5803YLMwZ+K96rEKVcYTmrdEKJFfjMiLTB2VkoHWuF0gMWtAp2Vh/kdfJk1264eyFyB9O8bCWysqbCRR0Uk2IJZyq685z1bXwFLNLOPMdXjwvbInMEjzOUj7O+LrIHNYzqG2NOce6VPfY6zRlT8q8fhWP9oD X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230028)(4636009)(396003)(376002)(39860400002)(136003)(346002)(451199021)(40470700004)(46966006)(36840700001)(47076005)(83380400001)(8936002)(54906003)(36860700001)(41300700001)(1076003)(26005)(2616005)(86362001)(5660300002)(426003)(336012)(8676002)(186003)(30864003)(40460700003)(478600001)(2906002)(82740400003)(36756003)(356005)(40480700001)(7636003)(316002)(6916009)(4326008)(7696005)(70586007)(70206006)(82310400005)(21314003);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2023 14:25:31.3154 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c1b2a533-fbd5-4716-d375-08db4cab6a93 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT074.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7231 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain RedfishLib.h is the header file of RedfishLib library under RedfishClientPkg. RedfishLib is used by EDKII Redfish feature drivers. Signed-off-by: Nickle Wang Cc: Abner Chang Cc: Igor Kulchytskyy --- .../PrivateInclude/Library/RedfishLib.h | 616 ++++++++++++++++++ 1 file changed, 616 insertions(+) create mode 100644 RedfishClientPkg/PrivateInclude/Library/RedfishLib.h diff --git a/RedfishClientPkg/PrivateInclude/Library/RedfishLib.h b/Redfish= ClientPkg/PrivateInclude/Library/RedfishLib.h new file mode 100644 index 00000000..b2488abb --- /dev/null +++ b/RedfishClientPkg/PrivateInclude/Library/RedfishLib.h @@ -0,0 +1,616 @@ +/** @file + This library provides a set of utility APIs that allow to create/read/up= date/delete + (CRUD) Redfish resources and provide basic query abilities by using [URI= /RedPath] + (https://github.com/DMTF/libredfish). + + The query language is based on XPath (https://www.w3.org/TR/1999/REC-xpa= th-19991116/). + This library and query language essentially treat the entire Redfish Ser= vice like it + was a single JSON document. In other words whenever it encounters an oda= ta.id in JSON + document, it will retrieve the new JSON document (if needed). We name th= e path as + RedPath: + + Expression Description + + nodename Selects the JSON entity with the name "nodename". + If the value of nodename is an object with "@odata.id", + it will continue get the value from "@odata.id". + + / Selects from the root node + + [index] Selects the index number JSON entity from an array or + object. If the JSON entity is one collection (has + Members & Members@odata.count), means to get the index + member in "Members". Index number >=3D1, 1 means to ret= urn + the first instance. + + [XXX] Operation on JSON entity. + If the JSON entity is one collection (has Members & + Members@odata.count), means to get all elements in + "Members". If the JSON entity is one array, means to + get all elements in array. Others will match the nodena= me + directly (e.g. JSON_OBJECT, JSON_STRING, JSON_TRUE, + JSON_FALSE, JSON_INTEGER). + + [nodename] Selects all the elements from an JSON entity that + contain a property named "nodename" + + [name=3Dvalue] Selects all the elements from an JSON entity where + the property "name" is equal to "value" + + [name~value] Selects all the elements from an JSON entity where + the string property "name" is equal to "value" using + case insensitive comparison. + + [namevalue] Selects all the elements from an JSON entity where + the property "name" is greater than "value" + + [name>=3Dvalue] Selects all the elements from an JSON entity where + the property "name" is greater than or equal to "value" + + Some examples: + + /v1/Chassis[1] - Will return the first Chassis instance. + /v1/Chassis[SKU=3D1234] - Will return all Chassis instances with a SKU= field equal to 1234. + /v1/Systems[Storage] - Will return all the System instances that have= Storage field populated. + + Copyright (c) 2019, Intel Corporation. All rights reserved.
+ (C) Copyright 2021 Hewlett Packard Enterprise Development LP
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef REDFISH_LIB_H_ +#define REDFISH_LIB_H_ + +#include + +#include +#include + +#define ODATA_TYPE_NAME_MAX_SIZE 128 +#define ODATA_TYPE_MAX_SIZE 128 + +/// +/// Library class public defines +/// +typedef VOID *REDFISH_SERVICE; +typedef VOID *REDFISH_PAYLOAD; + +/// +/// Library class public structures/unions +/// +typedef struct { + EFI_HTTP_STATUS_CODE *StatusCode; + UINTN HeaderCount; + EFI_HTTP_HEADER *Headers; + REDFISH_PAYLOAD Payload; +} REDFISH_RESPONSE; + +/// +/// Odata type-name mapping structure. +/// +typedef struct { + CONST CHAR8 OdataTypeName[ODATA_TYPE_NAME_MAX_SIZE]; + CONST CHAR8 OdataType[ODATA_TYPE_MAX_SIZE]; +} REDFISH_ODATA_TYPE_MAPPING; + +/** + This function uses REST EX protocol provided in RedfishConfigServiceInfo= . + The service enumerator will also handle the authentication flow automati= cally + if HTTP basic auth or Redfish session login is configured to use. + + Callers are responsible for freeing the returned service by RedfishClean= upService(). + + @param[in] RedfishConfigServiceInfo Redfish service information the EFI= Redfish + feature driver communicates with. + + @return New created Redfish Service, or NULL if error happens. + +**/ +REDFISH_SERVICE +EFIAPI +RedfishCreateService ( + IN REDFISH_CONFIG_SERVICE_INFORMATION *RedfishConfigServiceInfo + ); + +/** + Free the Service and all its related resources. + + @param[in] RedfishService The Service to access the Redfish resou= rces. + +**/ +VOID +EFIAPI +RedfishCleanupService ( + IN REDFISH_SERVICE RedfishService + ); + +/** + Create REDFISH_PAYLOAD instance in local with JSON represented resource = value and + the Redfish Service. + + The returned REDFISH_PAYLOAD can be used to create or update Redfish res= ource in + server side. + + Callers are responsible for freeing the returned payload by RedfishClean= upPayload(). + + @param[in] Value JSON Value of the redfish resource. + @param[in] RedfishService The Service to access the Redfish re= sources. + + @return REDFISH_PAYLOAD instance of the resource, or NULL if error h= appens. + +**/ +REDFISH_PAYLOAD +EFIAPI +RedfishCreatePayload ( + IN EDKII_JSON_VALUE Value, + IN REDFISH_SERVICE RedfishService + ); + +/** + Free the RedfishPayload and all its related resources. + + @param[in] Payload Payload to be freed. + +**/ +VOID +EFIAPI +RedfishCleanupPayload ( + IN REDFISH_PAYLOAD Payload + ); + +/** + This function returns the decoded JSON value of a REDFISH_PAYLOAD. + + Caller doesn't need to free the returned JSON value because it will be r= eleased + in corresponding RedfishCleanupPayload() function. + + @param[in] Payload A REDFISH_PAYLOAD instance. + + @return Decoded JSON value of the payload. + +**/ +EDKII_JSON_VALUE +EFIAPI +RedfishJsonInPayload ( + IN REDFISH_PAYLOAD Payload + ); + +/** + Fill the input RedPath string with system UUID from SMBIOS table or use = the customized + ID if FromSmbios =3D=3D FALSE. + + This is a helper function to build a RedPath string which can be used to= address + a Redfish resource for this computer system. The input PathString must h= ave a Systems + note in format of "Systems[UUID=3D%g]" or "Systems[UUID~%g]" to fill the= UUID value. + + Example: + Use "/v1/Systems[UUID=3D%g]/Bios" to build a RedPath to address the "B= ios" resource + for this computer system. + + @param[in] RedPath RedPath format to be build. + @param[in] FromSmbios Get system UUID from SMBIOS as computer sys= tem instance ID. + @param[in] IdString The computer system instance ID. + + @return Full RedPath with system UUID inside, or NULL if error happe= ns. + +**/ +CHAR8 * +EFIAPI +RedfishBuildPathWithSystemUuid ( + IN CONST CHAR8 *RedPath, + IN BOOLEAN FromSmbios, + IN CHAR8 *IdString OPTIONAL + ); + +/** + Get a redfish response addressed by a RedPath string, including HTTP Sta= tusCode, Headers + and Payload which record any HTTP response messages. + + Callers are responsible for freeing the HTTP StatusCode, Headers and Pay= load returned in + redfish response data. + + @param[in] RedfishService The Service to access the Redfish re= sources. + @param[in] RedPath RedPath string to address a resource= , must start + from the root node. + @param[out] RedResponse Pointer to the Redfish response data= . + + @retval EFI_SUCCESS The opeartion is successful, indicates t= he HTTP StatusCode is not + NULL and the value is 2XX. The correspon= ding redfish resource has + been returned in Payload within RedRespo= nse. + @retval EFI_INVALID_PARAMETER RedfishService, RedPath, or RedResponse = is NULL. + @retval EFI_DEVICE_ERROR An unexpected system or network error oc= curred. Callers can get + more error info from returned HTTP Statu= sCode, Headers and Payload + within RedResponse: + 1. If the returned Payload is NULL, indi= cates any error happen. + 2. If the returned StatusCode is NULL, i= ndicates any error happen. + 3. If the returned StatusCode is not 2XX= , indicates any error happen. +**/ +EFI_STATUS +EFIAPI +RedfishGetByService ( + IN REDFISH_SERVICE RedfishService, + IN CONST CHAR8 *RedPath, + OUT REDFISH_RESPONSE *RedResponse + ); + +/** + Get a redfish response addressed by URI, including HTTP StatusCode, Head= ers + and Payload which record any HTTP response messages. + + Callers are responsible for freeing the HTTP StatusCode, Headers and Pay= load returned in + redfish response data. + + @param[in] RedfishService The Service to access the URI resources. + @param[in] URI String to address a resource. + @param[out] RedResponse Pointer to the Redfish response data. + + @retval EFI_SUCCESS The opeartion is successful, indicates t= he HTTP StatusCode is not + NULL and the value is 2XX. The correspon= ding redfish resource has + been returned in Payload within RedRespo= nse. + @retval EFI_INVALID_PARAMETER RedfishService, RedPath, or RedResponse = is NULL. + @retval EFI_DEVICE_ERROR An unexpected system or network error oc= curred. Callers can get + more error info from returned HTTP Statu= sCode, Headers and Payload + within RedResponse: + 1. If the returned Payload is NULL, indi= cates any error happen. + 2. If the returned StatusCode is NULL, i= ndicates any error happen. + 3. If the returned StatusCode is not 2XX= , indicates any error happen. +**/ +EFI_STATUS +EFIAPI +RedfishGetByUri ( + IN REDFISH_SERVICE RedfishService, + IN CONST CHAR8 *Uri, + OUT REDFISH_RESPONSE *RedResponse + ); + +/** + Get a redfish response addressed by the input Payload and relative RedPa= th string, + including HTTP StatusCode, Headers and Payload which record any HTTP res= ponse messages. + + Callers are responsible for freeing the HTTP StatusCode, Headers and Pay= load returned in + redfish response data. + + @param[in] Payload A existing REDFISH_PAYLOAD instance. + @param[in] RedPath Relative RedPath string to address a res= ource inside Payload. + @param[out] RedResponse Pointer to the Redfish response data. + + @retval EFI_SUCCESS The opeartion is successful: + 1. The HTTP StatusCode is NULL and the r= eturned Payload in + RedResponse is not NULL, indicates the R= edfish resource has + been parsed from the input payload direc= tly. + 2. The HTTP StatusCode is not NULL and t= he value is 2XX, + indicates the corresponding redfish reso= urce has been returned + in Payload within RedResponse. + @retval EFI_INVALID_PARAMETER Payload, RedPath, or RedResponse is NULL= . + @retval EFI_DEVICE_ERROR An unexpected system or network error oc= curred. Callers can get + more error info from returned HTTP Statu= sCode, Headers and Payload + within RedResponse: + 1. If the returned Payload is NULL, indi= cates any error happen. + 2. If StatusCode is not NULL and the ret= urned value of StatusCode + is not 2XX, indicates any error happe= n. +**/ +EFI_STATUS +EFIAPI +RedfishGetByPayload ( + IN REDFISH_PAYLOAD Payload, + IN CONST CHAR8 *RedPath, + OUT REDFISH_RESPONSE *RedResponse + ); + +/** + Use HTTP PATCH to perform updates on pre-existing Redfish resource. + + This function uses the RedfishService to patch a Redfish resource addres= sed by + Uri (only the relative path is required). Changes to one or more propert= ies within + the target resource are represented in the input Content, properties not= specified + in Content won't be changed by this request. The corresponding redfish r= esponse will + returned, including HTTP StatusCode, Headers and Payload which record an= y HTTP response + messages. + + Callers are responsible for freeing the HTTP StatusCode, Headers and Pay= load returned in + redfish response data. + + @param[in] RedfishService The Service to access the Redfish re= sources. + @param[in] Uri Relative path to address the resourc= e. + @param[in] Content JSON represented properties to be up= date. + @param[out] RedResponse Pointer to the Redfish response data= . + + @retval EFI_SUCCESS The opeartion is successful, indicates t= he HTTP StatusCode is not + NULL and the value is 2XX. The Redfish r= esource will be returned + in Payload within RedResponse if server = send it back in the HTTP + response message body. + @retval EFI_INVALID_PARAMETER RedfishService, Uri, Content, or RedResp= onse is NULL. + @retval EFI_DEVICE_ERROR An unexpected system or network error oc= curred. Callers can get + more error info from returned HTTP Statu= sCode, Headers and Payload + within RedResponse: + 1. If the returned StatusCode is NULL, i= ndicates any error happen. + 2. If the returned StatusCode is not NUL= L and the value is not 2XX, + indicates any error happen. +**/ +EFI_STATUS +EFIAPI +RedfishPatchToUri ( + IN REDFISH_SERVICE RedfishService, + IN CONST CHAR8 *Uri, + IN CONST CHAR8 *Content, + OUT REDFISH_RESPONSE *RedResponse + ); + +/** + Use HTTP PATCH to perform updates on target payload. Patch to odata.id i= n Payload directly. + + This function uses the Payload to patch the Target. Changes to one or mo= re properties + within the target resource are represented in the input Payload, propert= ies not specified + in Payload won't be changed by this request. The corresponding redfish r= esponse will + returned, including HTTP StatusCode, Headers and Payload which record an= y HTTP response + messages. + + Callers are responsible for freeing the HTTP StatusCode, Headers and Pay= load returned in + redfish response data. + + @param[in] Target The target payload to be updated. + @param[in] Payload Palyoad with properties to be changed. + @param[out] RedResponse Pointer to the Redfish response data. + + @retval EFI_SUCCESS The opeartion is successful, indicates t= he HTTP StatusCode is not + NULL and the value is 2XX. The Redfish r= esource will be returned + in Payload within RedResponse if server = send it back in the HTTP + response message body. + @retval EFI_INVALID_PARAMETER Target, Payload, or RedResponse is NULL. + @retval EFI_DEVICE_ERROR An unexpected system or network error oc= curred. Callers can get + more error info from returned HTTP Statu= sCode, Headers and Payload + within RedResponse: + 1. If the returned StatusCode is NULL, i= ndicates any error happen. + 2. If the returned StatusCode is not NUL= L and the value is not 2XX, + indicates any error happen. +**/ +EFI_STATUS +EFIAPI +RedfishPatchToPayload ( + IN REDFISH_PAYLOAD Target, + IN REDFISH_PAYLOAD Payload, + OUT REDFISH_RESPONSE *RedResponse + ); + +/** + Use HTTP POST to create a new resource in target payload. + + The POST request should be submitted to the Resource Collection in which= the new resource + is to belong. The Resource Collection is addressed by Target payload. Th= e Redfish may + ignore any service controlled properties. The corresponding redfish resp= onse will returned, + including HTTP StatusCode, Headers and Payload which record any HTTP res= ponse messages. + + Callers are responsible for freeing the HTTP StatusCode, Headers and Pay= load returned in + redfish response data. + + @param[in] Target Target payload of the Resource Collection. + @param[in] Payload The new resource to be created. + @param[out] RedResponse Pointer to the Redfish response data. + + @retval EFI_SUCCESS The opeartion is successful, indicates t= he HTTP StatusCode is not + NULL and the value is 2XX. The Redfish r= esource will be returned + in Payload within RedResponse if server = send it back in the HTTP + response message body. + @retval EFI_INVALID_PARAMETER Target, Payload, or RedResponse is NULL. + @retval EFI_DEVICE_ERROR An unexpected system or network error oc= curred. Callers can get + more error info from returned HTTP Statu= sCode, Headers and Payload + within RedResponse: + 1. If the returned StatusCode is NULL, i= ndicates any error happen. + 2. If the returned StatusCode is not NUL= L and the value is not 2XX, + indicates any error happen. +**/ +EFI_STATUS +EFIAPI +RedfishPostToPayload ( + IN REDFISH_PAYLOAD Target, + IN REDFISH_PAYLOAD Payload, + OUT REDFISH_RESPONSE *RedResponse + ); + +/** + Use HTTP DELETE to remove a resource. + + This function uses the RedfishService to remove a Redfish resource which= is addressed + by input Uri (only the relative path is required). The corresponding red= fish response will + returned, including HTTP StatusCode, Headers and Payload which record an= y HTTP response + messages. + + Callers are responsible for freeing the HTTP StatusCode, Headers and Pay= load returned in + redfish response data. + + @param[in] RedfishService The Service to access the Redfish re= sources. + @param[in] Uri Relative path to address the resourc= e. + @param[out] RedResponse Pointer to the Redfish response data= . + + @retval EFI_SUCCESS The opeartion is successful, indicates t= he HTTP StatusCode is not + NULL and the value is 2XX, the Redfish r= esource has been removed. + If there is any message returned from se= rver, it will be returned + in Payload within RedResponse. + @retval EFI_INVALID_PARAMETER RedfishService, Uri, or RedResponse is N= ULL. + @retval EFI_DEVICE_ERROR An unexpected system or network error oc= curred. Callers can get + more error info from returned HTTP Statu= sCode, Headers and Payload + within RedResponse: + 1. If the returned StatusCode is NULL, i= ndicates any error happen. + 2. If the returned StatusCode is not NUL= L and the value is not 2XX, + indicates any error happen. +**/ +EFI_STATUS +EFIAPI +RedfishDeleteByUri ( + IN REDFISH_SERVICE RedfishService, + IN CONST CHAR8 *Uri, + OUT REDFISH_RESPONSE *RedResponse + ); + +/** + Dump text in fractions. + + @param[in] String ASCII string to dump. + +**/ +VOID +RedfishDumpJsonStringFractions ( + IN CHAR8 *String + ); + +/** + Extract the JSON text content from REDFISH_PAYLOAD and dump to debug con= sole. + + @param[in] Payload The Redfish payload to dump. + +**/ +VOID +RedfishDumpPayload ( + IN REDFISH_PAYLOAD Payload + ); + +/** + Dump text in JSON value. + + @param[in] JsonValue The Redfish JSON value to dump. + +**/ +VOID +RedfishDumpJson ( + IN EDKII_JSON_VALUE JsonValue + ); + +/** + This function will cleanup the HTTP header and Redfish payload resources= . + + @param[in] StatusCode The status code in HTTP response message. + @param[in] HeaderCount Number of HTTP header structures in Header= s list. + @param[in] Headers Array containing list of HTTP headers. + @param[in] Payload The Redfish payload to dump. + +**/ +VOID +RedfishFreeResponse ( + IN EFI_HTTP_STATUS_CODE *StatusCode, + IN UINTN HeaderCount, + IN EFI_HTTP_HEADER *Headers, + IN REDFISH_PAYLOAD Payload + ); + +/** + Check if the "@odata.type" in Payload is valid or not. + + @param[in] Payload The Redfish payload to be checked. + @param[in] OdataTypeName OdataType will be retrived from map= ping list. + @param[in] OdataTypeMappingList The list of OdataType. + @param[in] OdataTypeMappingListSize The number of mapping list + + @return TRUE if the "@odata.type" in Payload is valid, otherwise FALSE. + +**/ +BOOLEAN +RedfishIsValidOdataType ( + IN REDFISH_PAYLOAD Payload, + IN CONST CHAR8 *OdataTypeName, + IN REDFISH_ODATA_TYPE_MAPPING *OdataTypeMappingList, + IN UINTN OdataTypeMappingListSize + ); + +/** + Check if the payload is collection + + @param[in] Payload The Redfish payload to be checked. + + @return TRUE if the payload is collection. + +**/ +BOOLEAN +RedfishIsPayloadCollection ( + IN REDFISH_PAYLOAD Payload + ); + +/** + Get collection size. + + @param[in] Payload The Redfish collection payload + @param[in] CollectionSize Size of this collection + + @return EFI_SUCCESS Coolection size is returned in Collecti= onSize + @return EFI_INVALID_PARAMETER The payload is not a collection. +**/ +EFI_STATUS +RedfishGetCollectionSize ( + IN REDFISH_PAYLOAD Payload, + IN UINTN *CollectionSize + ); + +/** + Get Redfish payload of collection member + + @param[in] Payload The Redfish collection payload + @param[in] Index Index of collection member + + @return NULL Fail to get collection member. + @return Non NULL Payload is returned. +**/ +REDFISH_PAYLOAD +RedfishGetPayloadByIndex ( + IN REDFISH_PAYLOAD Payload, + IN UINTN Index + ); + +/** + Check and return Redfish resource of the given Redpath. + + @param[in] RedfishService Pointer to REDFISH_SERVICE + @param[in] Redpath Redpath of the resource. + @param[in] Response Optional return the resource. + + @return EFI_STATUS +**/ +EFI_STATUS +RedfishCheckIfRedpathExist ( + IN REDFISH_SERVICE RedfishService, + IN CHAR8 *Redpath, + IN REDFISH_RESPONSE *Response OPTIONAL + ); + +/** + This function returns the string of Redfish service version. + + @param[in] RedfishService Redfish service instance. + @param[out] ServiceVersionStr Redfish service string. + + @return EFI_STATUS + +**/ +EFI_STATUS +RedfishGetServiceVersion ( + IN REDFISH_SERVICE RedfishService, + OUT CHAR8 **ServiceVersionStr + ); + +/** + This function returns the string of Redfish service version. + + @param[in] ServiceVerisonStr The string of Redfish service version. + @param[in] Url The URL to build Redpath with ID. + Start with "/", for example "/Registries" + @param[in] Id ID string + @param[out] Redpath Pointer to retrive Redpath, caller has to= free + the memory allocated for this string. + @return EFI_STATUS + +**/ +EFI_STATUS +RedfishBuildRedpathUseId ( + IN CHAR8 *ServiceVerisonStr, + IN CHAR8 *Url, + IN CHAR8 *Id, + OUT CHAR8 **Redpath + ); + +#endif --=20 2.17.1