From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (NAM04-MW2-obe.outbound.protection.outlook.com [40.107.101.85]) by mx.groups.io with SMTP id smtpd.web10.11117.1675890799246104564 for ; Wed, 08 Feb 2023 13:13:19 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=TseV17D2; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.101.85, mailfrom: abner.chang@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QdSTlFxhnO4isMbU0Gm34TpbjQN7A44FAQNpH9RWmcS+6RAQysLUZoqM7+wRP6FQz65wblFidnlfVJnjVAjWA4tK5Qcjp8epJN2EFWO+JWN1kT+rId0O7cVz3QoK00PVtrgHylNZVtJR4LLVXDBHa9SaHmgLJvf0fLk6IEAsNwXloqahNgAp8xyhOqUv0+iemFRX4TQBhYrOU2PQB/D/Lr4DvGyPHLV/t3Ud6DT8gkxkDKYk7oERiAr6k7srbXz7gTeI20UhWWsm+6p3vU5BtyjYnXwnCq5I8vTEuncLjlZwSqgMYY2TtOSlK/ftBqzlBkMwYji2fkMsGlgmNww+4Q== 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=wY1PrBzjrrJokId0AUydYYdhtcKt+Q8D3iAI3zB9Oko=; b=dz+eJNRHEoI6O0Tmeqg4LLEdjVCLoOJHQ+HL9XZr7Pu9Lh5K9Snx3GPOtIG/KnPYE68GI8ai03VYOevy7LpUgGWXu0dJNSlBIU1Uxdi7+2LlFjdQc4rvcdKensk0UGor2CIVESIIjqXyV7biEDYXdZCkdjbAm1E5wY7vcdqOt4GPPa6GxkOS3sgcE/XRJ8sfcTzUm0fc0HAZj5GKq10oJPi6B0w5SJZfXVBVaGDwVDsqgWC9fxowlNXNL7OLarhEZ9lW8Cw3eWD4SeMBIa1I950hSa7nWOrVRSrFWCriYPjhfvETFIAaHJIr0lLYSs6kZNyLNHqHYpFgH9ltZiYWQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wY1PrBzjrrJokId0AUydYYdhtcKt+Q8D3iAI3zB9Oko=; b=TseV17D2/0YXe3jWyqWNKIasKEHvBf1CBipur75sB7KGHDsopjcDyGja/p3yIH06ILBV1yaJi0vRpb1wtSs3Vdv1gZqD+FKQwzq7m4rWFjCa+neMnWp+AD4SgB2nkY3GwjPXwKdHA4rDo5Phf9nRiW0vEiKo3T+PUAbIEaaHPM4= Received: from MN2PR12MB3966.namprd12.prod.outlook.com (2603:10b6:208:165::18) by PH7PR12MB5736.namprd12.prod.outlook.com (2603:10b6:510:1e3::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.18; Wed, 8 Feb 2023 21:13:16 +0000 Received: from MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::d606:ab63:cf3:5d36]) by MN2PR12MB3966.namprd12.prod.outlook.com ([fe80::d606:ab63:cf3:5d36%5]) with mapi id 15.20.6064.036; Wed, 8 Feb 2023 21:13:16 +0000 From: "Chang, Abner" To: Igor Kulchytskyy , "devel@edk2.groups.io" CC: Nickle Wang Subject: Re: [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/FbdXLca7FhhYg Date: Wed, 8 Feb 2023 21:13:15 +0000 Message-ID: References: <1675876965-19952-1-git-send-email-igork@ami.com> In-Reply-To: <1675876965-19952-1-git-send-email-igork@ami.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2023-02-08T21:13:14Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=93416d1f-5d91-4c66-80e2-1418f7183b62; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN2PR12MB3966:EE_|PH7PR12MB5736:EE_ x-ms-office365-filtering-correlation-id: c3cda0fb-39c6-4eba-3811-08db0a194b65 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: x6C9ZzjBRgiqQDV05COBSlIn9hugjWyEzXyiaquJqdnJW4ixvF7W5sPVa9QHLA5jg4uTvys4MXNJwire9c4YDpHv9haRo6GxHp9TOnEIxky8wyRwfOHtGQgBUPgnp6+vSCHjeSHckpK3YME9smy+aBGW4TQWDcNMIs7ZnvmSnlsm/QNxjCozDFCekGCEoLustvTrCBcFUBSM8QydAf7Wxl792Ou55yEu3d7/Vd2NIombYqBV/V1c4K1AhsfOuUxrJAZ2DllZGSyidYmEiKiHKPDQZYHJpYaCGmyvWuCe3tFBAzmkfqgEdFk0t5Y2Bc/dfFrKUQMYlXbaZnx+CBVkddDUeT1XYRJ4eTLaUPzmVdtbNYF+uHeDmJ1Y5/IvgEC1psFT8qThONkz+iyWaWdV4Wi75iz6BVnns+OwWVrIwdUZPXXMaKQsYJKAGq3sXdyBsJNpYHEghh66gsiSN+TdtLloYl/NNIV2SStbya2WEgV43xWK5wKirwpr22CG86+bsxwUKb7px7YvW4lK/gjt1gAh97oG9HR3+5JNlur/Pgdo88h9KFfGspnddRlnyt5Fal/dCVES15ql+18oWDncZDg4+1pa4u2zTrNgL+THgbWT5Z8J4BBcQVJZTy1OGOU6M15XqAjg6tf55+qJlkwjCUq29+hktXYh00lYe1KO0QjEbCJmJKDPecwlrdaXQFttWmdGkQsdgEkDYWyPL2/UKg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3966.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(6029001)(4636009)(136003)(366004)(39860400002)(376002)(396003)(346002)(451199018)(8936002)(41300700001)(186003)(26005)(9686003)(122000001)(8676002)(83380400001)(30864003)(2906002)(4326008)(76116006)(66946007)(64756008)(66446008)(66476007)(66556008)(40140700001)(33656002)(110136005)(5660300002)(316002)(52536014)(38100700002)(86362001)(478600001)(7696005)(55016003)(38070700005)(6506007)(53546011)(71200400001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?/mO7oLCh+ybW2rO4Nl2sL8jK+7Xjk0a4MdCCbxtlz4BDlkNMAn+SjsOnS+I0?= =?us-ascii?Q?kAG+TZGHgSDfYza/SrTcyefE7eXd7sZSBwLmfGsETRdjDeYk5TLU1lA0E1rt?= =?us-ascii?Q?q4y7EOIErXymIeH9/DjIs76UOH7BMRY6urrNG2yPSDKt73NZJ2uNIRx82CB2?= =?us-ascii?Q?wOLN5LhhCbisxBkjWkDxMsJSDSInKTUkVxAcwd+NR+ONfjUfB3nHbt1l+Qmu?= =?us-ascii?Q?eFuNkxF4D/+2S4vasb0QkXZra+JwRlKIazyeHseZgH3SYS02d8TiDw27SzEc?= =?us-ascii?Q?NTxQF1iChOrW8QB/UW0SHepaHpNjfDn5cPxC3xS4SA+NmlS3lq723zZtsn+a?= =?us-ascii?Q?Ly0luSzPiQ4bwGlv0CCIy+uVqwUw7fT13azlHhF5Jy8zEeKDHWsyWtq7XxZ+?= =?us-ascii?Q?X5Sx8M1J43iyJsF06tRL2f+OwXb7yRIvOJQYCi5xiMPJUTmFmBxUMbritSWk?= =?us-ascii?Q?W+g11freytHh4FPiFAU7fJQWRLVWJhSy2ALfr/OPDuH7hOszgix5HgBwycog?= =?us-ascii?Q?VftoctN8kiafL0uSA4EovihCYYA0MbxX3s9gLVpNg0oZc3jp5mkcmTX6XfyB?= =?us-ascii?Q?u8bYAEjKC2iS54bXIicLAQeMGnoceEvH8+roqxp0qafaNsbo+hTQlwDyivra?= =?us-ascii?Q?Y4skO1rQBjA0onQIZ8yyZTRSPJu8h0R6wQIz5Eqi4mCBn/LmhvzTSDnaN8SN?= =?us-ascii?Q?hyEQqhKSXTiEIkKkxA5865/W1CN6j4vA1rwc9+0W9tXOftOeXsB7AX5EV4oX?= =?us-ascii?Q?xFhAjPjgCPhKCaCHzgzqPlueF9mHYYqkUaxCHJ57Yp8eMEQMXJWNr1vCPGr/?= =?us-ascii?Q?gpI1PnbRgN5jiyBuGejt2wNRV0UpJ1wkZkYN5ThG7QXCctEGOMwOo1Gpetg3?= =?us-ascii?Q?DReO/ygIeST3gDCLAadSP/UDhjsgGvH2vkHdHMbgVFbtQEJnwHc/d6CXviX6?= =?us-ascii?Q?42tPSM4w6+DXHnA3qmCGB6sKJ+HKDdsLWaW1JLMiDJLAAmScKD22xy3tIDP0?= =?us-ascii?Q?OL7guZ6si0fVQXvpzAYUltolVFoUYBXGqjj6f9Ehvv7PKSJEMS6VLcKCHcFn?= =?us-ascii?Q?bUdr6cICy2HOJdRvsOZk1OSjUIST+RrVITfBhfO6cx5tF8hIamMXEaDTL/cC?= =?us-ascii?Q?v8gBs8TWbSVyYVynHKxoOiv4uNdQV4DgoxK6/rVBhKoYrSHiy/ry1CDqT9CN?= =?us-ascii?Q?L3GUFvwa1MvOLhSSM1K8RzG4TvRP+VarYlQjPdGN/FmMVx+sd5Kos+XH/Kj9?= =?us-ascii?Q?WzrS6GmyYRQcyO637R0cJH6U1qWhnEHZ0ZbPtWeuO2nIghz50I9EXrG6xnIC?= =?us-ascii?Q?2sBmY6a8n2IePVIgE0x1D68uf5TW9xYMLIAv+h0QpukNtpybUo9vjKqWfoGh?= =?us-ascii?Q?+W6VePwEBCM9ah0ffeanTQDtQ/Pl4/mDnSg4AIL0mdzPGeiwVSuOI94aJZxq?= =?us-ascii?Q?7NzGb/htwxecJbJUBSUDLx6Uia0UGHEXJHfD4Ju67v0IJpBeDj00ANFMhB8t?= =?us-ascii?Q?d8xZw5ptfFeVp4BpQDUsEYooxYDyCiM5KHUU0PE9IE8i2cALlDPEnuTTTNGW?= =?us-ascii?Q?XSxJXAt2KlySwVx1gfA=3D?= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3966.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3cda0fb-39c6-4eba-3811-08db0a194b65 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Feb 2023 21:13:15.7817 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: WQz6G3VNEz5jOKaHhfBu3Fzd56am9BJZGCAt68f4jHkM1NTwNzw+Afwqv4HbsxVbYoLXBHvAa+tqp7tDp1OZyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB5736 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable [AMD Official Use Only - General] Hi Igor, Few comments in below. > -----Original Message----- > From: Igor Kulchytskyy > Sent: Thursday, February 9, 2023 1:23 AM > To: devel@edk2.groups.io > Cc: Igor Kulchytskyy ; Chang, Abner > ; Nickle Wang > Subject: [PATCH V2 RESEND] RedfishPkg: RedfishRestExDxe: Two PCDs for > controlling the requests >=20 > Caution: This message originated from an External Source. Use proper caut= ion > when opening attachments, clicking links, or responding. >=20 >=20 > 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. >=20 > Cc: Abner Chang > Cc: Nickle Wang > Signed-off-by: Igor Kulchytskyy > --- > 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(-) >=20 > 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. > # >=20 > gEfiRedfishPkgTokenSpaceGuid.PcdRedfishDiscoverAccessModeInBand|FALSE| > BOOLEAN|0x00001002 > + # > + # This PCD indicates if the EFI REST EX sends chunk request to Redfish= service. > + # Default is set to non chunk mode. > + # > + > + > gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExChunkRequestMode|TRUE|BO > O > + LEAN|0x00001003 We can default set PcdRedfishRestExChunkRequestMode to FALSE. > + # > + # 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|BOOLEA > + N|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 @@ >=20 > [Pcd] > gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExServiceAccessModeInBand > ## CONSUMES > + gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExChunkRequestMode ## > CONSUMES > + gEfiRedfishPkgTokenSpaceGuid.PcdRedfishRestExAddingExpect ## > CONSUMES >=20 > [UserExtensions.TianoCore."ExtraFiles"] > RedfishRestExDxeExtra.uni > diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExImpl.c > b/RedfishPkg/RedfishRestExDxe/RedfishRestExImpl.c > index 952e9d1..0da0d10 100644 > --- a/RedfishPkg/RedfishRestExDxe/RedfishRestExImpl.c > +++ b/RedfishPkg/RedfishRestExDxe/RedfishRestExImpl.c > @@ -140,9 +140,6 @@ RedfishHttpAddExpectation ( > } >=20 > *ItsWrite =3D FALSE; > - if (PreservedRequestHeaders !=3D NULL) { > - *PreservedRequestHeaders =3D RequestMessage->Headers; > - } >=20 > if ((RequestMessage->Data.Request->Method !=3D HttpMethodPut) && > (RequestMessage->Data.Request->Method !=3D HttpMethodPost) && > (RequestMessage->Data.Request->Method !=3D HttpMethodPatch)) @@ - > 152,10 +149,20 @@ RedfishHttpAddExpectation ( >=20 > *ItsWrite =3D TRUE; >=20 > - NewHeaders =3D AllocateZeroPool ((RequestMessage->HeaderCount + 1) * > sizeof (EFI_HTTP_HEADER)); > - CopyMem ((VOID *)NewHeaders, (VOID *)RequestMessage->Headers, > RequestMessage->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) * > sizeof (EFI_HTTP_HEADER)); > + CopyMem ((VOID *)NewHeaders, (VOID *)RequestMessage->Headers, > RequestMessage->HeaderCount * sizeof (EFI_HTTP_HEADER)); > + HttpSetFieldNameAndValue (NewHeaders + RequestMessage->HeaderCount, > HTTP_HEADER_EXPECT, HTTP_EXPECT_100_CONTINUE); > + RequestMessage->HeaderCount++; > + RequestMessage->Headers =3D NewHeaders; } > + > return EFI_SUCCESS; > } > diff --git a/RedfishPkg/RedfishRestExDxe/RedfishRestExProtocol.c > b/RedfishPkg/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; >=20 > - 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; >=20 > // > // Validate the parameters > @@ -94,67 +96,85 @@ RedfishRestExSendReceive ( > DEBUG ((DEBUG_INFO, "\nRedfishRestExSendReceive():\n")); > DEBUG ((DEBUG_INFO, "*** Perform HTTP Request Method - %d, URL: %s\n", > RequestMessage->Data.Request->Method, RequestMessage->Data.Request- > >Url)); >=20 > - // > - // Add header "Expect" to server, only for URL write. > - // > - Status =3D RedfishHttpAddExpectation (This, RequestMessage, > &PreservedRequestHeaders, &ItsWrite); > - if (EFI_ERROR (Status)) { > - return Status; > - } > + if(FixedPcdGetBool(PcdRedfishRestExChunkRequestMode)){ Due to whether to add "Expect" header is managed by PcdRedfishRestExAddingE= xpect, so we can relocate the condition check for PcdRedfishRestExChunkRequ= estMode to be above "if (ItsWrite =3D=3D TRUE) {" in 8 lines later. With this, we can add code later to send the zero content payload with "Exp= ect" header and check the HTTP Status for the HTTP Chunk transfer or other = error cases. > + // > + // Add header "Expect" to server, only for URL write. > + // > + Status =3D RedfishHttpAddExpectation (This, RequestMessage, > &PreservedRequestHeaders, &ItsWrite); > + if (EFI_ERROR (Status)) { > + return Status; > + } >=20 > - if (ItsWrite =3D=3D TRUE) { > - if (RequestMessage->BodyLength > HTTP_IO_MAX_SEND_PAYLOAD) { > - // > - // Send chunked transfer. > - // > - SendChunkProcess++; > - CopyMem ((VOID *)&ChunkTransferRequestMessage, (VOID > *)RequestMessage, 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 > *)RequestMessage, sizeof (EFI_HTTP_MESSAGE)); > + } else { > + SendNonChunkProcess++; > + } > } > } >=20 > 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 || > SendChunkProcess =3D=3D HttpIoSendChunkEndChunk); > + } else { > + // > + // This is the non-chunk transfer, send request header first and= then > + // handle the following request message body using chunk transfe= r. > + // > + 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 > HttpIoSendNonChunkHeaderZeroContent) ? 0 : RequestMessage->BodyLength, > + (SendNonChunkProcess =3D=3D > + HttpIoSendNonChunkHeaderZeroContent) ? NULL : RequestMessage->Body > ); > - if (EFI_ERROR (Status)) { > - goto ON_EXIT; > - } > - } while (SendChunkProcess =3D=3D HttpIoSendChunkContent || > SendChunkProcess =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. > + // 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 HttpIoSendNonChunkHeaderZer= oContent) ? > 0 : RequestMessage->BodyLength, > - (SendNonChunkProcess =3D=3D HttpIoSendNonChunkHeaderZer= oContent) ? > NULL : RequestMessage->Body > + RequestMessage->Data.Request, > + RequestMessage->HeaderCount, > + RequestMessage->Headers, > + RequestMessage->BodyLength, > + RequestMessage->Body > ); > } > - } else { > + } > + else{ Please have "else" at the same line with above closed curly bracket and hav= e a space between "else" and "{" Thanks Abner=20 > // > - // 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->Headers !=3D PreservedRequestHeaders) { > FreePool (RequestMessage->Headers); > RequestMessage->Headers =3D PreservedRequestHeaders; // Restore head= ers > before we adding "Expect". > RequestMessage->HeaderCount--; // Minus one head= er 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")); >=20 > - if (SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { > - DEBUG ((DEBUG_INFO, "This is chunk transfer, start to send all chu= nks.")); > + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && > SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { > + DEBUG ((DEBUG_INFO, "This is chunk transfer, start to send all > + chunks.", ResponseData->Response.StatusCode)); > SendChunkProcess++; > goto ReSendRequest; > } > + } else if (ResponseData->Response.StatusCode =3D=3D > HTTP_STATUS_204_NO_CONTENT) { > + DEBUG ((DEBUG_INFO, "HTTP_STATUS_204_NO_CONTENT\n")); > + > + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && > SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { > + DEBUG ((DEBUG_INFO, "This is chunk transfer, start to send all chu= nks.", > ResponseData->Response.StatusCode)); > + SendChunkProcess ++; > + goto ReSendRequest; > + } > + } else if (ResponseData->Response.StatusCode =3D=3D > HTTP_STATUS_201_CREATED) { > + DEBUG ((DEBUG_INFO, "HTTP_STATUS_201_CREATED\n")); } else if > + (ResponseData->Response.StatusCode =3D=3D HTTP_STATUS_202_ACCEPTED) { > + DEBUG ((DEBUG_INFO, "HTTP_STATUS_202_ACCEPTED\n")); > } else if (ResponseData->Response.StatusCode =3D=3D > HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE) { > DEBUG ((DEBUG_INFO, > "HTTP_STATUS_413_REQUEST_ENTITY_TOO_LARGE\n")); >=20 > @@ -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) && > + SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { > DEBUG ((DEBUG_INFO, "Bad request may caused by zero length chunk. = Try > to send all chunks...\n")); > SendChunkProcess++; > goto ReSendRequest; > } > } else if (ResponseData->Response.StatusCode =3D=3D > HTTP_STATUS_100_CONTINUE) { > DEBUG ((DEBUG_INFO, "HTTP_STATUS_100_CONTINUE\n")); > - if (SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { > + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && > + SendChunkProcess =3D=3D HttpIoSendChunkHeaderZeroContent) { > // > // We get HTTP_STATUS_100_CONTINUE to send the body using chunk > transfer. > // > @@ -256,7 +288,7 @@ ReSendRequest:; > goto ReSendRequest; > } >=20 > - if (SendNonChunkProcess =3D=3D HttpIoSendNonChunkHeaderZeroContent) = { > + if (FixedPcdGetBool(PcdRedfishRestExChunkRequestMode) && > + SendNonChunkProcess =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; > } >=20 > - DEBUG ((DEBUG_INFO, "Total of lengh of Response :%d\n", > TotalReceivedSize)); > + DEBUG ((DEBUG_INFO, "Total of length of Response :%d\n", > + TotalReceivedSize)); > } >=20 > DEBUG ((DEBUG_INFO, "RedfishRestExSendReceive()- EFI_STATUS: %r\n", > Status)); > -- > 2.6.1.windows.1 > -The information contained in this message may be confidential and propri= etary > to American Megatrends (AMI). This communication is intended to be read o= nly > by the individual or entity to whom it is addressed or by their designee.= If the > reader of this message is not the intended recipient, you are on notice t= hat any > distribution of this message, in any form, is strictly prohibited. Please= promptly > notify the sender by reply e-mail or by telephone at 770-246-8600, and th= en > delete or destroy all copies of the transmission.