From nobody Sun May 19 19:00:58 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+99799+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+99799+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1675876985767797.9540881998047; Wed, 8 Feb 2023 09:23:05 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id RlPPYY1788612x8JVPCXAP5O; Wed, 08 Feb 2023 09:23:05 -0800 X-Received: from NAM10-DM6-obe.outbound.protection.outlook.com (NAM10-DM6-obe.outbound.protection.outlook.com [40.107.93.59]) by mx.groups.io with SMTP id smtpd.web11.4260.1675876983773499757 for ; Wed, 08 Feb 2023 09:23:04 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eaVUDF8kri24RNZIyVHfJKCfdaJfBkKjTJs3/PI6t24gKXYZrzMmLmWZxD5CD67AiJwncZzboF8Ge4uvLWVCWHbJyZW/hcxnKxP9PzbGTfHtNdB0a4HhDycWUIsr47Lyr/h/RIn4xSqlxGTo8ICv2Dd3NTpYGwqs+NyfJnmFToCkowd8nZMP266Bxa4CxqD2FIMiY25+36CTNuDigCTt+v/Tk0vYGeczZh4pJ4a73mPIMTw+ckNlMGoQCsiu4Vvr1VZllthPhhN3alUssZNiIpwP6aUqiSN4kNzjlwI3bT+tH8y9xc83D+fLK9er5phvvVUTmFrFwpfQxuW3wBnwsA== 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=02wpqzUrwd8Gvbou89J6NfcdBy40Vob9ejQFnQ/u/RM=; b=Xwa4UKVP4IzuGRubTX42VO862He0bpWUXmFayuRG1mt2cbd7IB/qxd42YjOTQq9/qYt2Eunw17FT41ajfzCoPnIr8rMn5i5qCimyIkNI/RX06x2UbfKbRk1or71NbA/UuWz/VVTxInsW9XY+yCETeFQSk7p9u0pXhvkjumkmfWHg6odkk67nbiPMmt5hlvW9I9++BpYoHgbL/JR7AS3YORwzktpABdmEcJfF6a9P/+JDql6K2O3RInmG/B1EL4NOz7qN5pRH8R1ERIz9s0pwQ0AwZK8gbNszJXROJxkOmSy+IWsMTBYrnOm6k0vXpJ1PtGlDWfmiZ0lSfgQ3DlnYVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ami.com; dmarc=pass action=none header.from=ami.com; dkim=pass header.d=ami.com; arc=none X-Received: from BLAPR10MB5185.namprd10.prod.outlook.com (2603:10b6:208:328::16) by IA1PR10MB7388.namprd10.prod.outlook.com (2603:10b6:208:42c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.16; Wed, 8 Feb 2023 17:22:56 +0000 X-Received: from BLAPR10MB5185.namprd10.prod.outlook.com ([fe80::3318:8f42:7036:dbbf]) by BLAPR10MB5185.namprd10.prod.outlook.com ([fe80::3318:8f42:7036:dbbf%7]) with mapi id 15.20.6086.017; Wed, 8 Feb 2023 17:22:56 +0000 From: "Igor Kulchytskyy via groups.io" To: "devel@edk2.groups.io" CC: Igor Kulchytskyy , Abner Chang , Nickle Wang Subject: [edk2-devel] [PATCH V2 RESEND] RedfishPkg: RedfishRestExDxe: Two PCDs for controlling the requests Thread-Topic: [PATCH V2 RESEND] RedfishPkg: RedfishRestExDxe: Two PCDs for controlling the requests Thread-Index: AQHZO+H7SzEi3/eXhEyBzL/FbdXLcQ== Date: Wed, 8 Feb 2023 17:22:55 +0000 Message-ID: <1675876965-19952-1-git-send-email-igork@ami.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BLAPR10MB5185:EE_|IA1PR10MB7388:EE_ x-ms-office365-filtering-correlation-id: 8f565b9e-8ae3-44d2-1e62-08db09f91e1b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: RsBhYd1V+D7ibK9LfE4dE2YQlV2NWxROQ/4TsamPhRr9JG8EziR86ZK03XGddomtfUHukuIEEJvuJrmnazn9rp8ii9dbE9O6rT1Hi77D6rDtGJOaXBRbkPBoZAly2fo5cmU1XzLgVEiLsL2+b50eMn38Kmiw1YLop0+NOkH+uP6g94DSgKIoVEBU2qeOCrhgRzlQg7t11H1QLwmVEIm9wj7chhkVBW43885G4DqdabK/EIu6ypoLwCKfSBZwz+xaLqzMkkbNld80vaGBR0NpKycUDQz6yO+ozhSU/VXRDjhfqcbBtHT2kda63wTp7Payj7AuxwN8f3NzWin5YA6DH0V71Ew1BO5H78qeJiz4dN2Yr6aiu86754brweYDG7f+DxfBshwNJWPbXUlUMDt8xqPDrJl4dAiBOVbgy5EYjomOs0mu+TVu3ogQtdz+GzGhedmW9lKGlI1VbTkcEtgmHD6FhuUQZz22zPdEBBnxAqQoPhft+eeqbGZvGihOu/LcDC+XC4idIqgx0B5qPf/9/jsYq9mXTB3Q8DHUTR9AeLIniC5tLZ5Ok3xcj8FmoePBhGV5CKa+u5HKgr8BhtnubGGADu4iKwTIpLI5m2SBe7Xj58maEk27lAXCq6L1wq0pNKp0miwb+0kiaf1sn7x2qtwO1wFITbXqRB3x+LlIfS0FoBUwyPtgPJMGKBGTf5s4D3rBJto/ZXLD6vsYNLeN3Q== x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?G6h84gl+5PPvzcDAOA6+gK0OncEkulhdfqgyNjJ49TbG+G0efdpF4xaqIa?= =?iso-8859-1?Q?w0ScdCycfvnasuDddeuMdTtlMCAOud5u1LyMe6V9SyyhN4Is8NZsM5ymLq?= =?iso-8859-1?Q?DFSKbAnw5RRyUsTsLT/jwqNU3b+dwlT+UIoy6ez+bYM6QH+oYewSsj/e6J?= =?iso-8859-1?Q?v1XKKrnEycWGovCPkt7hsUg7r2p8QLq3AueZwRv5ZohS3Qxwho6/aCQAss?= =?iso-8859-1?Q?17TxIx84p5A9uMrtR6qWIk4qjRz1gvn9D9MujTjLlI+nTPRtkc6yn9bNLP?= =?iso-8859-1?Q?XdbW9hIaw/IXtBojXVcY3Uta4sH57DwjG5zOOQH57+oo4acTsS8O5ddEDn?= =?iso-8859-1?Q?xY1sNju+OsymVCPqTN6sGU29VjXWk1SJ22tcKbFOmXe+NIt08fy+FqKP8R?= =?iso-8859-1?Q?3MJ1SxLoZcalqaH3cHkBmNcmgumuTd9DcO0hp0fzRwK397hUdP/ZT9nhQe?= =?iso-8859-1?Q?mwU171xYa7K23EyK6xHjzzJz8Y69b0rdwc/lnqnVlOWgwjTX8GsMAD4oeL?= =?iso-8859-1?Q?1h6uH5UTHVkq/1wB41GVCttrBo4oT3iXuBO+3/L9ZCA0TpriFPrBtoJiVr?= =?iso-8859-1?Q?D+fGqlO669FnVtcq3fAMUJcynDkZmA3Yul3GLc40P/8OfFjv+zD6ILsNQy?= =?iso-8859-1?Q?jA53InwX2F8MO3UjUIPggv9wtqjIsz/TqPSPFC7QLcHvCVk9qzDNX4S+/S?= =?iso-8859-1?Q?eoYzFVwzBHEEluJmluAU5Wh9B7K4jB47TsgGoGZitL+Z/YpPWhuwlV/dxW?= =?iso-8859-1?Q?lptkYO5CHS23q8L8FpGdSpdyvXdwtsFKPMLxDWs64LqrxnBYoajxuO6k2I?= =?iso-8859-1?Q?9xOW+Ezac6g11CzjiXxTKaaz+4teqfFudstRoEX2ySPP3+1hUlWuMjBa4C?= =?iso-8859-1?Q?DgS6EbU4Vpcr39z51KSGjG26C1LTGTtdDpIefYwz8yC3bdrbjdvS3GbPqG?= =?iso-8859-1?Q?ID12eLearVqtUBxAlajwuZuluetK1KIlWnd+mPxClOGzdTx9sR9MS76GEZ?= =?iso-8859-1?Q?nqnASISH4oEd6A7l/H2kdfzXUjPQq79cCZgxYHQwXXsZIkdXLWxWWG7DOf?= =?iso-8859-1?Q?TVVIZiC+Ce3jmM5OCXejQFLx0kG1GEihpJ6VYXNyzcj0cWn6LECdvjgy0X?= =?iso-8859-1?Q?LotC+8hB3Hd/0htQwEZw4L9M2qzP/PuboeqPTlDHRI5Rd/SHBwC+5c/BQc?= =?iso-8859-1?Q?nh+WDY85WSD6Lh8cBrBL6bPJrPUyIITawJmGKkOx6P2j++XQ0cojLWbKMt?= =?iso-8859-1?Q?qQxyd6BJipgrpv/AMQC6gvOJOEqJsh0DB1onJcWCxI/L0cTHRElNJ2VIXw?= =?iso-8859-1?Q?K33/cMH74VtWJScD/A+n/2uqaHxrcI/yzxthuCE22ISTv5kj/94fKUBvYs?= =?iso-8859-1?Q?WxOgZKgWg32OVOfDBxF6N0uDMIQ4ikU3ykFnG1WvgRZwa2uCu+6l1pmdlO?= =?iso-8859-1?Q?7RE1A8METxoLmv9oE1sEkDYhH54IfN7UUhqQhTr7M18WggdmprbfnY6upl?= =?iso-8859-1?Q?CRsE/Bm8BFIAuyRSlIC9rv/SX1LFYw49g4acFduuBpPWfYYPqRK4IML1tK?= =?iso-8859-1?Q?rqsfmVuKnNIDlselRrx6ezrDuu8JXGVRF6wlLs1+WGq2cG9+gFSifWp40q?= =?iso-8859-1?Q?Iwy/m0fC91YQITIccyR/xq8/xZpvFWQEeJ?= MIME-Version: 1.0 X-OriginatorOrg: ami.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB5185.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f565b9e-8ae3-44d2-1e62-08db09f91e1b X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Feb 2023 17:22:55.9187 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 27e97857-e15f-486c-b58e-86c2b3040f93 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: V2Sj/or3f3Z5LFtpAhLzfCMz6Uw53LpuQKlKQLFFY6iAjyCUZu/xCk9SJ3BEdQHx X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR10MB7388 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,igork@ami.com X-Gm-Message-State: sWK1g8GU3CwMRsrafcI3dvNwx1787277AA= Content-Language: en-US Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1675876985; bh=2GhRQvPynk092Uq51LneyU0nvAMNcA3JVoc5+Ts9Kn8=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=vtwzVCpqtDp9oLREADdBg/eZrw+ojbjTLwz/PNL3YToJ1vEYLLamQL1Y9wVS82N3Si6 G1eLk+NXMZ1QbB6InIyPQ1ndTzYx+rCuDKvF/ogpYJT099vaiENQRmIH5qi8qq1Ul8t7k w+U53GUEux8hxA92Wk+LeaRY1fGRdM/BI7Y= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1675876987202100002 Content-Type: text/plain; charset="utf-8" Since BIOS should work with different BMC implementation chunked requests as well as Expect header should be optional. One PCD is used to enable/disable Expect header. Another PCD is used to enable/disable chunked requests. Cc: Abner Chang Cc: Nickle Wang Signed-off-by: Igor Kulchytskyy Reviewed-by: Abner Chang --- RedfishPkg/RedfishPkg.dec | 10 ++ RedfishPkg/RedfishRestExDxe/RedfishRestExDxe.inf | 2 + RedfishPkg/RedfishRestExDxe/RedfishRestExImpl.c | 23 ++-- RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c | 140 ++++++++++++----= ---- 4 files changed, 113 insertions(+), 62 deletions(-) diff --git a/RedfishPkg/RedfishPkg.dec b/RedfishPkg/RedfishPkg.dec index d2b189b..89ef32a 100644 --- a/RedfishPkg/RedfishPkg.dec +++ b/RedfishPkg/RedfishPkg.dec @@ -97,3 +97,13 @@ # protocol instance. # gEfiRedfishPkgTokenSpaceGuid.PcdRedfishDiscoverAccessModeInBand|FALSE|BO= OLEAN|0x00001002 + # + # This PCD indicates if the EFI REST EX sends chunk request to Redfish s= ervice. + # Default is set to non chunk mode. + # + gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExChunkRequestMode|TRUE|BOOLE= AN|0x00001003 + # + # This PCD indicates if the EFI REST EX adds Expect header to the POST, = PATCH, PUT requests to Redfish service. + # Default is set to not add. + # + gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExAddingExpect|FALSE|BOOLEAN|= 0x00001004 diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExDxe.inf b/RedfishPkg/= RedfishRestExDxe/RedfishRestExDxe.inf index 75437b0..29003ae 100644 --- a/RedfishPkg/RedfishRestExDxe/RedfishRestExDxe.inf +++ b/RedfishPkg/RedfishRestExDxe/RedfishRestExDxe.inf @@ -57,6 +57,8 @@ [Pcd] gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExServiceAccessModeInBand #= # CONSUMES + gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExChunkRequestMode ## CONSU= MES + gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExAddingExpect ## CONSUMES [UserExtensions.TianoCore."ExtraFiles"] RedfishRestExDxeExtra.uni diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExImpl.c b/RedfishPkg/R= edfishRestExDxe/RedfishRestExImpl.c index 952e9d1..0da0d10 100644 --- a/RedfishPkg/RedfishRestExDxe/RedfishRestExImpl.c +++ b/RedfishPkg/RedfishRestExDxe/RedfishRestExImpl.c @@ -140,9 +140,6 @@ RedfishHttpAddExpectation ( } *ItsWrite =3D FALSE; - if (PreservedRequestHeaders !=3D NULL) { - *PreservedRequestHeaders =3D RequestMessage->Headers; - } if ((RequestMessage->Data.Request->Method !=3D HttpMethodPut) && (Reques= tMessage->Data.Request->Method !=3D HttpMethodPost) && (RequestMessage->Data.Request->Method !=3D HttpMethodPatch)) @@ -152,10 +149,20 @@ RedfishHttpAddExpectation ( *ItsWrite =3D TRUE; - NewHeaders =3D AllocateZeroPool ((RequestMessage->HeaderCount + 1) * siz= eof (EFI_HTTP_HEADER)); - CopyMem ((VOID *)NewHeaders, (VOID *)RequestMessage->Headers, RequestMes= sage->HeaderCount * sizeof (EFI_HTTP_HEADER)); - HttpSetFieldNameAndValue (NewHeaders + RequestMessage->HeaderCount, HTTP= _HEADER_EXPECT, HTTP_EXPECT_100_CONTINUE); - RequestMessage->HeaderCount++; - RequestMessage->Headers =3D NewHeaders; + // + // Check PCD before adding Expect header + // + if(FixedPcdGetBool(PcdRedfishRestExAddingExpect)) { + if (PreservedRequestHeaders !=3D NULL) { + *PreservedRequestHeaders =3D RequestMessage->Headers; + } + + NewHeaders =3D AllocateZeroPool ((RequestMessage->HeaderCount + 1) * s= izeof (EFI_HTTP_HEADER)); + CopyMem ((VOID *)NewHeaders, (VOID *)RequestMessage->Headers, RequestM= essage->HeaderCount * sizeof (EFI_HTTP_HEADER)); + HttpSetFieldNameAndValue (NewHeaders + RequestMessage->HeaderCount, HT= TP_HEADER_EXPECT, HTTP_EXPECT_100_CONTINUE); + RequestMessage->HeaderCount++; + RequestMessage->Headers =3D NewHeaders; + } + return EFI_SUCCESS; } diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c b/RedfishP= kg/RedfishRestExDxe/RedfishRestExProtocol.c index 4b61fc0..fbd5e46 100644 --- a/RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c +++ b/RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c @@ -66,11 +66,13 @@ RedfishRestExSendReceive ( HTTP_IO_SEND_NON_CHUNK_PROCESS SendNonChunkProcess; EFI_HTTP_MESSAGE ChunkTransferRequestMessage; - Status =3D EFI_SUCCESS; - ResponseData =3D NULL; - IsGetChunkedTransfer =3D FALSE; - SendChunkProcess =3D HttpIoSendChunkNone; - SendNonChunkProcess =3D HttpIoSendNonChunkNone; + Status =3D EFI_SUCCESS; + ResponseData =3D NULL; + IsGetChunkedTransfer =3D FALSE; + SendChunkProcess =3D HttpIoSendChunkNone; + SendNonChunkProcess =3D HttpIoSendNonChunkNone; + ItsWrite =3D FALSE; + PreservedRequestHeaders =3D NULL; // // Validate the parameters @@ -94,67 +96,85 @@ RedfishRestExSendReceive ( DEBUG ((DEBUG_INFO, "\nRedfishRestExSendReceive():\n")); DEBUG ((DEBUG_INFO, "*** Perform HTTP Request Method - %d, URL: %s\n", R= equestMessage->Data.Request->Method, RequestMessage->Data.Request->Url)); - // - // Add header "Expect" to server, only for URL write. - // - Status =3D RedfishHttpAddExpectation (This, RequestMessage, &PreservedRe= questHeaders, &ItsWrite); - if (EFI_ERROR (Status)) { - return Status; - } + if(FixedPcdGetBool(PcdRedfishRestExChunkRequestMode)){ + // + // Add header "Expect" to server, only for URL write. + // + Status =3D RedfishHttpAddExpectation (This, RequestMessage, &Preserved= RequestHeaders, &ItsWrite); + if (EFI_ERROR (Status)) { + return Status; + } - if (ItsWrite =3D=3D TRUE) { - if (RequestMessage->BodyLength > HTTP_IO_MAX_SEND_PAYLOAD) { - // - // Send chunked transfer. - // - SendChunkProcess++; - CopyMem ((VOID *)&ChunkTransferRequestMessage, (VOID *)RequestMessag= e, sizeof (EFI_HTTP_MESSAGE)); - } else { - SendNonChunkProcess++; + if (ItsWrite =3D=3D TRUE) { + if (RequestMessage->BodyLength > HTTP_IO_MAX_SEND_PAYLOAD) { + // + // Send chunked transfer. + // + SendChunkProcess++; + CopyMem ((VOID *)&ChunkTransferRequestMessage, (VOID *)RequestMess= age, sizeof (EFI_HTTP_MESSAGE)); + } else { + SendNonChunkProcess++; + } } } ReSendRequest:; - // - // Send out the request to REST service. - // - if (ItsWrite =3D=3D TRUE) { + + if(FixedPcdGetBool(PcdRedfishRestExChunkRequestMode)){ // - // This is write to URI + // Send the chunked request to REST service. // - if (SendChunkProcess > HttpIoSendChunkNone) { + if (ItsWrite =3D=3D TRUE) { // - // This is chunk transfer for writing large payload. - // Send request header first and then handle the - // following request message body using chunk transfer. + // This is write to URI // - do { - Status =3D HttpIoSendChunkedTransfer ( + if (SendChunkProcess > HttpIoSendChunkNone) { + // + // This is chunk transfer for writing large payload. + // Send request header first and then handle the + // following request message body using chunk transfer. + // + do { + Status =3D HttpIoSendChunkedTransfer ( + &(Instance->HttpIo), + &SendChunkProcess, + &ChunkTransferRequestMessage + ); + if (EFI_ERROR (Status)) { + goto ON_EXIT; + } + } while (SendChunkProcess =3D=3D HttpIoSendChunkContent || SendChu= nkProcess =3D=3D HttpIoSendChunkEndChunk); + } else { + // + // This is the non-chunk transfer, send request header first and t= hen + // handle the following request message body using chunk transfer. + // + Status =3D HttpIoSendRequest ( &(Instance->HttpIo), - &SendChunkProcess, - &ChunkTransferRequestMessage + (SendNonChunkProcess =3D=3D HttpIoSendNonChunkContent) = ? NULL : RequestMessage->Data.Request, + (SendNonChunkProcess =3D=3D HttpIoSendNonChunkContent) = ? 0 : RequestMessage->HeaderCount, + (SendNonChunkProcess =3D=3D HttpIoSendNonChunkContent) = ? NULL : RequestMessage->Headers, + (SendNonChunkProcess =3D=3D HttpIoSendNonChunkHeaderZer= oContent) ? 0 : RequestMessage->BodyLength, + (SendNonChunkProcess =3D=3D HttpIoSendNonChunkHeaderZer= oContent) ? NULL : RequestMessage->Body ); - if (EFI_ERROR (Status)) { - goto ON_EXIT; - } - } while (SendChunkProcess =3D=3D HttpIoSendChunkContent || SendChunk= Process =3D=3D HttpIoSendChunkEndChunk); + } } else { // - // This is the non-chunk transfer, send request header first and then - // handle the following request message body using chunk transfer. + // This is read from URI. // Status =3D HttpIoSendRequest ( &(Instance->HttpIo), - (SendNonChunkProcess =3D=3D HttpIoSendNonChunkContent) ? = NULL : RequestMessage->Data.Request, - (SendNonChunkProcess =3D=3D HttpIoSendNonChunkContent) ? = 0 : RequestMessage->HeaderCount, - (SendNonChunkProcess =3D=3D HttpIoSendNonChunkContent) ? = NULL : RequestMessage->Headers, - (SendNonChunkProcess =3D=3D HttpIoSendNonChunkHeaderZeroC= ontent) ? 0 : RequestMessage->BodyLength, - (SendNonChunkProcess =3D=3D HttpIoSendNonChunkHeaderZeroC= ontent) ? NULL : RequestMessage->Body + RequestMessage->Data.Request, + RequestMessage->HeaderCount, + RequestMessage->Headers, + RequestMessage->BodyLength, + RequestMessage->Body ); } - } else { + } + else{ // - // This is read from URI. + // This is normal request to URI. // Status =3D HttpIoSendRequest ( &(Instance->HttpIo), @@ -213,7 +233,7 @@ ReSendRequest:; // // Restore the headers if it ever changed in RedfishHttpAddExpectation(). // - if (RequestMessage->Headers !=3D PreservedRequestHeaders) { + if (FixedPcdGetBool(PcdRedfishRestExAddingExpect) && RequestMessage->Hea= ders !=3D PreservedRequestHeaders) { FreePool (RequestMessage->Headers); RequestMessage->Headers =3D PreservedRequestHeaders; // Restore header= s before we adding "Expect". RequestMessage->HeaderCount--; // Minus one header= count for "Expect". @@ -223,11 +243,23 @@ ReSendRequest:; if (ResponseData->Response.StatusCode =3D=3D HTTP_STATUS_200_OK) { DEBUG ((DEBUG_INFO, "HTTP_STATUS_200_OK\n")); - if (SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { - DEBUG ((DEBUG_INFO, "This is chunk transfer, start to send all chunk= s.")); + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && SendChunkProc= ess =3D=3D HttpIoSendChunkHeaderZeroContent) { + DEBUG ((DEBUG_INFO, "This is chunk transfer, start to send all chunk= s.", ResponseData->Response.StatusCode)); SendChunkProcess++; goto ReSendRequest; } + } else if (ResponseData->Response.StatusCode =3D=3D HTTP_STATUS_204_NO_C= ONTENT) { + DEBUG ((DEBUG_INFO, "HTTP_STATUS_204_NO_CONTENT\n")); + + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && SendChunkProc= ess =3D=3D HttpIoSendChunkHeaderZeroContent) { + DEBUG ((DEBUG_INFO, "This is chunk transfer, start to send all chunk= s.", ResponseData->Response.StatusCode)); + SendChunkProcess ++; + goto ReSendRequest; + } + } else if (ResponseData->Response.StatusCode =3D=3D HTTP_STATUS_201_CREA= TED) { + DEBUG ((DEBUG_INFO, "HTTP_STATUS_201_CREATED\n")); + } else if (ResponseData->Response.StatusCode =3D=3D HTTP_STATUS_202_ACCE= PTED) { + DEBUG ((DEBUG_INFO, "HTTP_STATUS_202_ACCEPTED\n")); } else if (ResponseData->Response.StatusCode =3D=3D HTTP_STATUS_413_REQU= EST_ENTITY_TOO_LARGE) { DEBUG ((DEBUG_INFO, "HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE\n")); @@ -240,14 +272,14 @@ ReSendRequest:; goto ON_EXIT; } else if (ResponseData->Response.StatusCode =3D=3D HTTP_STATUS_400_BAD_= REQUEST) { DEBUG ((DEBUG_INFO, "HTTP_STATUS_400_BAD_REQUEST\n")); - if (SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && SendChunkProc= ess =3D=3D HttpIoSendChunkHeaderZeroContent) { DEBUG ((DEBUG_INFO, "Bad request may caused by zero length chunk. Tr= y to send all chunks...\n")); SendChunkProcess++; goto ReSendRequest; } } else if (ResponseData->Response.StatusCode =3D=3D HTTP_STATUS_100_CONT= INUE) { DEBUG ((DEBUG_INFO, "HTTP_STATUS_100_CONTINUE\n")); - if (SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && SendChunkProc= ess =3D=3D HttpIoSendChunkHeaderZeroContent) { // // We get HTTP_STATUS_100_CONTINUE to send the body using chunk tran= sfer. // @@ -256,7 +288,7 @@ ReSendRequest:; goto ReSendRequest; } - if (SendNonChunkProcess =3D=3D HttpIoSendNonChunkHeaderZeroContent) { + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && SendNonChunkP= rocess =3D=3D HttpIoSendNonChunkHeaderZeroContent) { DEBUG ((DEBUG_INFO, "HTTP_STATUS_100_CONTINUE for non chunk transfer= ...\n")); SendNonChunkProcess++; goto ReSendRequest; @@ -394,7 +426,7 @@ ReSendRequest:; TotalReceivedSize +=3D ResponseData->BodyLength; } - DEBUG ((DEBUG_INFO, "Total of lengh of Response :%d\n", TotalReceivedS= ize)); + DEBUG ((DEBUG_INFO, "Total of length of Response :%d\n", TotalReceived= Size)); } DEBUG ((DEBUG_INFO, "RedfishRestExSendReceive()- EFI_STATUS: %r\n", Stat= us)); -- 2.6.1.windows.1 -The information contained in this message may be confidential and propriet= ary 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 desig= nee. If the reader of this message is not the intended recipient, you are o= n notice that any distribution of this message, in any form, is strictly pr= ohibited. 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. -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#99799): https://edk2.groups.io/g/devel/message/99799 Mute This Topic: https://groups.io/mt/96835076/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-