From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) by mx.groups.io with SMTP id smtpd.web12.39367.1655782856390358741 for ; Mon, 20 Jun 2022 20:40:56 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=WJdwasKZ; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: hpe.com, ip: 148.163.143.35, mailfrom: prvs=01716056f0=abner.chang@hpe.com) Received: from pps.filterd (m0134424.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 25KIC0MQ029056; Tue, 21 Jun 2022 03:40:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=Ap9WXMZtLXxDXnf6VpMbonhpSyXtZ/wZx7GIk/Qhlj8=; b=WJdwasKZ6NrxHVCfff6Enw0Wd5Ux8lbAlMMBVUMRgfTjsIUWBsjlZyycxhTQUHgN4IIz nne+m4WHt5C8cJDRdjqI0EXhH/yOtulA5BBgL9nesEK30gB7DTu/nNTCtA4rsPYTONlw eHLY39nEXySH2PGTWpWqilZPIC7dydc+53RGZQ/iEzNpuJwuK23Xp0/pHyu6dQ/tpg7z y+25nJEjl1V7LDch0KnEGxo1FcmeggGagZ0TdidbjrtvRro3VLapfeOzH4h/4RJHUgFT EU5m3egAHjZ2FdBDG6q0wMFQlu03O3pjduJ0UcVRhdAmyN3ywIjhEg9PsTrTmV0Wf3k6 ZQ== Received: from p1lg14878.it.hpe.com (p1lg14878.it.hpe.com [16.230.97.204]) by mx0b-002e3701.pphosted.com (PPS) with ESMTPS id 3gtpjsr22h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Jun 2022 03:40:53 +0000 Received: from p1wg14924.americas.hpqcorp.net (unknown [10.119.18.113]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by p1lg14878.it.hpe.com (Postfix) with ESMTPS id 93ED1132CE; Tue, 21 Jun 2022 03:40:52 +0000 (UTC) Received: from p1wg14928.americas.hpqcorp.net (10.119.18.116) by p1wg14924.americas.hpqcorp.net (10.119.18.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15; Mon, 20 Jun 2022 15:40:52 -1200 Received: from p1wg14924.americas.hpqcorp.net (10.119.18.113) by p1wg14928.americas.hpqcorp.net (10.119.18.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15; Mon, 20 Jun 2022 15:40:51 -1200 Received: from p1wg14920.americas.hpqcorp.net (16.230.19.123) by p1wg14924.americas.hpqcorp.net (10.119.18.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15 via Frontend Transport; Mon, 20 Jun 2022 15:40:51 -1200 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (192.58.206.38) by edge.it.hpe.com (16.230.19.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15; Mon, 20 Jun 2022 15:40:51 -1200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HRfnK1vowLMQJD5l6dXXG4glLeHRBjehMFE7zfZ+z3z+HP8vwGHakEArLIYIJRmyXw5Toiwg8DQLplkkGCzvn0QOIcloE/v+PGQynqNC3VKv0aYsrQKr6cI9nDBKNKx83sU9Md+rgQc/V68NToaXHpqY59K00o3rLEthd09n57gIvq7Ur6GdUErezi3YeUfJJC9VcRoHZh+o+Ayp4xp9qq63iYg2YMqjTczurOWrmGHrjd74Kz59XGn+3/G67KSHZKtlmx27UK1NvytOJe6am3K5JxJ2LXcyZ++dJYrlDOzI4AxW18T/UzHKqOGymeCQ/hhX9Q3+BR/SyzeiXAf8Yg== 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=Ap9WXMZtLXxDXnf6VpMbonhpSyXtZ/wZx7GIk/Qhlj8=; b=KxrIn2Wi953CXVdqIrdHFuUJlqmnykp6nAdQ/LIispUpQFTs/KerJjYbyRWMYcsLTsoFyZPoaKaLRBGk55696duHzC3jOFzoKGnkw6a8w0KsZfGdGEs2/vqs1JObs1V7t3GQGu2awlK9yh5eI0DSchS8QtzLaJno9qRRD5vJZMkawEHOBnpcL9id4tj2oGz/kibD3w2n7mBvxJw41hJrOb/MIzumn2p+LrgdZOs8HdqUXshh8/LvCf6nLc6n+3jxwck0263/+Z4UijO5RoXmAbIwOk1w83tRczqjfEj8KvGzdIY1dm43nXu0QBaivpJF4rm0LirzD8k7dON4t+jjXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from PH0PR84MB1647.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:510:173::6) by DS7PR84MB3061.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:8:9f::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.22; Tue, 21 Jun 2022 03:40:50 +0000 Received: from PH0PR84MB1647.NAMPRD84.PROD.OUTLOOK.COM ([fe80::89d1:6a2d:b8a5:8b0d]) by PH0PR84MB1647.NAMPRD84.PROD.OUTLOOK.COM ([fe80::89d1:6a2d:b8a5:8b0d%9]) with mapi id 15.20.5353.017; Tue, 21 Jun 2022 03:40:50 +0000 From: "Abner Chang" To: "Wang, Nickle (Server BIOS)" , "devel@edk2.groups.io" CC: Yang Atom , Nick Ramirez Subject: Re: [edk2-staging][PATCH v2 4/5] edk2-staging/RedfishClientPkg: Add ETag support Thread-Topic: [edk2-staging][PATCH v2 4/5] edk2-staging/RedfishClientPkg: Add ETag support Thread-Index: AQHYhRDUQ0mt8U3rtUOIBxq/dasGqa1ZNz4Q Date: Tue, 21 Jun 2022 03:40:50 +0000 Message-ID: References: <20220621014645.1388-1-nickle.wang@hpe.com> In-Reply-To: <20220621014645.1388-1-nickle.wang@hpe.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8e89bc51-3b9c-4580-798d-08da5337d601 x-ms-traffictypediagnostic: DS7PR84MB3061:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: vviDVIKMCOzw5rmAUMDPjEwopNasiO9ZI9jXAWIU9QUnU78s+34N4X//agqjWiBIjE6XGEb9C9UBOioFBukgirN07KDKDYqLp6KJcVpGPzzTJQ0b2oToiSJzxXLQBDnzCS1FN0NeyVBhBw5hzzOgFetb6gs5AuM9/kFwmwn77DEy2obMZul871MDQuYSAqh0h5aoVjuIdtDvGWagyLYxocJtT0HYwbB1MeDSpfs2mmwHaX6sQl252uFQNsbJ9MPZuGHzJ+yj+ljnx2ve+q40IN2T613OI01QhopMEH8ZHjSrCm9RlXzFW+sCEFFiCGG+ijHkT5tjN3/OFnG/0u6wUjXM9HBx+lUL3Nrj/QWi3qCRyXAYLj5lFFlWwb8nPiIdVifjQvEltVQuGH1AFXwFHhHWoY2hN1OJfp4d9LckR7uEwIti5tN5S6dN2bvPIzCX96YaYBsUTzF9zndDXlll7DY6R6ZjjWfpZC1Gh6Yu9GkUoqkM44nQwnofFI+Lg/X+yjkn1tba9ZrGUAHXRR65xUh4fmTe3+H600XLup3CpoAqz2NClirv9bkXuw32aZn5LYvbQDaWErNmlFFA4G3oZ7ZtL8IYijLO83ZnXtf8Anizxmb/TNJ2cbEK0qWwfv9BLhyNvHaqkrwsj/hOF4uITIN/0JrL7gG6wRh6WqvtUtm0Q3qa5fMzm5wGNfkWS5N7SCauE0oh5uDCItL0Gj0oGQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR84MB1647.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230016)(346002)(39860400002)(396003)(136003)(366004)(376002)(76116006)(4326008)(8676002)(66446008)(66476007)(66556008)(64756008)(186003)(66946007)(71200400001)(26005)(9686003)(2906002)(6506007)(86362001)(7696005)(53546011)(478600001)(8936002)(5660300002)(33656002)(52536014)(41300700001)(55016003)(122000001)(38100700002)(38070700005)(110136005)(316002)(83380400001)(82960400001)(54906003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ZwW8SQsmtipuc5mfdQi8onbCsk0oH4mjk9QpfyOsLqFAAHR3CQA2wBMEm10O?= =?us-ascii?Q?suMEX4utqcUGHbRETvdUxWgAYsNkUcF7X2r5P0AxQI41aPLkutQoiMEa2ynV?= =?us-ascii?Q?ypEKgR8ckL9Q/YF6q8hshRD0/a3HSElyjt7UuTbLQb9EliyXr3vgfuBU0vWA?= =?us-ascii?Q?Gf5wn9j+RM08i5uEKUCbxQekSJV2ogQn1wkbFY2EdvC/LVMmshW/2ybfGDwK?= =?us-ascii?Q?hwsIAgeKCUGLMM5V6TNcn79yjqJi1uQemHPnYF6QFAu/VLlVFarbNsBOTv+z?= =?us-ascii?Q?1AwTdW4M4XLZWqrMDk5Dgqex5y1W0fNl4/3vygb3TeOQJHrl68YLDcxkB9RR?= =?us-ascii?Q?seq0Uh/zwZ0RuzkG74FY56/lefS4PjUEQyZ9R+6astCjvG7FlUmh04YHEMnM?= =?us-ascii?Q?DhJVp5SR7jtyFctRNQOkAwrmIrGM3c5ZnRbqa8zlQGy3mlor/pJkRnRNtW+7?= =?us-ascii?Q?BwqzEmVpkBVl9umZSmOkYhI8X2JeA1aKnpNOVVhOiUWWGIq65K6HvDtrmRp2?= =?us-ascii?Q?dspCeyjgF/0im+YPrOp8YU58NXzilTdTqJ3qdagAikHHaId/nT5ce0qjA2k0?= =?us-ascii?Q?vEBeZPLTnAOw6+Ehl010Q7zlByYgzati7c6kqJ4JbOQuFxN1cXqetHJT6XAZ?= =?us-ascii?Q?XOeokL5PZ/1v6124775kMj1KcDoVxuJxKpIIYD1KWF4cE3WnF0EYl3OR8maL?= =?us-ascii?Q?PihplGiKc7Mq2XZ77Ka6byF5fVmp7fBdEKRxS0N3LM1fgVXJ95HRHEcsYfhr?= =?us-ascii?Q?iwtX/f9hbROc2zjcKXz2Dzauo3NV21stwy9exJtNBZINHdjzQPwI0TpDuaTK?= =?us-ascii?Q?7CWuBZGWJxTwEKav8xchjE2ZI+F2AeRHgcUyE1CSi3eOgo8OSkQMT0FSABeu?= =?us-ascii?Q?25DjhKyXR/iHrL8oMqRugG2BECVVpr5J8Qc7N86QQvvqjsttXlBDZ+UzeQmX?= =?us-ascii?Q?uKKPES5boRaOAGg73UZ/LWCadxBOYa8H5ufCxydzAP1of6Ycdocjc+HL/7tq?= =?us-ascii?Q?LX1wwHlkd/usWEiww5oJmL7rlJfrsDbx+p/hZEChezHwNmmwqNmoelgwvMG3?= =?us-ascii?Q?8iYeJJbYZzxF8ag7rtnostRZGw69N6GDApCviEW0yypGh37AADV9YJ4PT0W+?= =?us-ascii?Q?aVSXOI5Nio1IjmndMZF9P9843DDtM6cpSz+C6GdMCiuLUPX1iWZBGC3CrnF3?= =?us-ascii?Q?ablBqvyi4a0yB9Bh47qBU6CCinHK5HK4s4+GEvTgQEQXA2ZHiIGQJQ1OMPmQ?= =?us-ascii?Q?RGHsT+WAmNgWISaaQgIW+lkbdVaOH05GRZKWDVXhcAb1A2Psp752m7OByUrL?= =?us-ascii?Q?Kg0ABHLhKp+CabI82CTs76aqZMKBz/9Bfrw1SQ1vgTJJNc3p2ql37TjKK9/p?= =?us-ascii?Q?VXuORQyDKWdx80FBSdb+LChGCJNQrMIVcK29UEDyY6pAz3X5SANttLur68Tv?= =?us-ascii?Q?rIYXE9Xa3waG3Z8rSWq3hk/vyYMKdlOfF7otuEpjpNZ2TII8ekINDfPaxJwV?= =?us-ascii?Q?zA5B8sXTfawwujsg3ukRpMX+UbBm5jI6moSfcw6DKoa6Z/T/iJYTXg1RRdMW?= =?us-ascii?Q?io6ZMdrsLkiP3TCahCRCwzu4EsvqGnVFV3KAoL3QT01a8jQUnbIuMgFjLd0s?= =?us-ascii?Q?JpruFmvY/i6cvNyV0sT9yvPFH4Mhp+9ulrydVGv2f7t71X4C0kWY9XuG3o1/?= =?us-ascii?Q?FxfR+A883EDbZrzHqPTRnZODv6mUwhDDgo9uRJ0a/pIdoZgOa0DbKT+6Y6ai?= =?us-ascii?Q?Y61x593RgA=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR84MB1647.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 8e89bc51-3b9c-4580-798d-08da5337d601 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Jun 2022 03:40:50.4917 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: vEq4aaexyzqcDiBgk0BgkbOIoEvg/zvZzwyJZ3B7lqXr5wAHBJtG8oLCvY+DnhN1SxCFEhsWkCUrYm6Spf3JOg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR84MB3061 X-OriginatorOrg: hpe.com X-Proofpoint-ORIG-GUID: qySjklq0B2eRgggysRkJid0TFl50pIul X-Proofpoint-GUID: qySjklq0B2eRgggysRkJid0TFl50pIul X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.883,Hydra:6.0.517,FMLib:17.11.64.514 definitions=2022-06-21_01,2022-06-17_01,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxscore=0 adultscore=0 impostorscore=0 spamscore=0 malwarescore=0 phishscore=0 mlxlogscore=760 lowpriorityscore=0 clxscore=1015 suspectscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2204290000 definitions=main-2206210013 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Abner Chang > -----Original Message----- > From: Wang, Nickle (Server BIOS) > Sent: Tuesday, June 21, 2022 9:47 AM > To: devel@edk2.groups.io > Cc: Wang, Nickle (Server BIOS) ; Chang, Abner (HPS > SW/FW Technologist) ; Yang Atom > ; Nick Ramirez > Subject: [edk2-staging][PATCH v2 4/5] edk2-staging/RedfishClientPkg: Add = ETag > support >=20 > Implement ETag support in HTTP header >=20 > Signed-off-by: Nickle Wang > Cc: Abner Chang > Cc: Yang Atom > Cc: Nick Ramirez > --- > .../v1sim/resource.py | 10 +++++-- > .../v1sim/systems.py | 28 +++++++++++-------- > 2 files changed, 25 insertions(+), 13 deletions(-) >=20 > diff --git a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/resou= rce.py > b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/resource.py > index e722d16a0b..0c7a838281 100644 > --- a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/resource.py > +++ b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/resource.py > @@ -36,6 +36,12 @@ class RfResource: > self.final_init_processing(base_path, rel_path) >=20 > else: >=20 > self.res_data =3D {} >=20 > + self.generate_etag(json.dumps(self.res_data)) >=20 > + >=20 > + def generate_etag(self, context): >=20 > + md5 =3D hashlib.md5() >=20 > + md5.update(context.encode('utf-8')) >=20 > + self.etag =3D 'W/"' + md5.hexdigest() + '"' >=20 >=20 >=20 > def create_sub_objects(self, base_path, rel_path): >=20 > pass >=20 > @@ -49,8 +55,8 @@ class RfResource: > # SHA1 should generate well-behaved etags >=20 > response =3D flask.make_response(self.response) >=20 > response.mimetype =3D 'application/json' >=20 > - etag =3D hashlib.sha1(self.response.encode('utf-8')).hexdige= st() >=20 > - response.set_etag(etag) >=20 > + response.headers["ETag"] =3D self.etag >=20 > + >=20 > return response >=20 > except KeyError: >=20 > flask.abort(404) >=20 > diff --git a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/syste= ms.py > b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py > index 6305a51efb..5adf81be5b 100644 > --- a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py > +++ b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py > @@ -92,7 +92,11 @@ class RfSystemObj(RfResource): > if "BootOrder" in boot_data: >=20 > self.res_data['Boot']['BootOrder'] =3D boot_data['BootOr= der'] >=20 >=20 >=20 > - resp =3D flask.Response(json.dumps(self.res_data,indent=3D4), > mimetype=3D"application/json") >=20 > + context =3D json.dumps(self.res_data,indent=3D4) >=20 > + self.generate_etag(context) >=20 > + resp =3D flask.Response(context, mimetype=3D"application/json") >=20 > + resp.headers["ETag"] =3D self.etag >=20 > + >=20 > return 0, 200, None, resp >=20 >=20 >=20 > def reset_resource(self, reset_data): >=20 > @@ -136,26 +140,28 @@ class RfMemoryCollection(RfCollection): >=20 >=20 > post_data["@odata.id"] =3D newMemoryUrl >=20 >=20 >=20 > - md5 =3D hashlib.md5() >=20 > - md5.update(json.dumps(post_data).encode("utf-8")) >=20 > - etag_str =3D 'W/"' + md5.hexdigest() + '"' >=20 > - post_data["@odata.etag"] =3D etag_str >=20 > + self.generate_etag(json.dumps(post_data,indent=3D4)) >=20 > + >=20 > + post_data["@odata.etag"] =3D self.etag >=20 > self.elements[str(newMemoryIdx)] =3D post_data >=20 >=20 >=20 > resp =3D flask.Response(json.dumps(post_data,indent=3D4), > mimetype=3D"application/json") >=20 > resp.headers["Location"] =3D newMemoryUrl >=20 > - resp.headers["ETag"] =3D etag_str >=20 > - >=20 > + resp.headers["ETag"] =3D self.etag >=20 > return 0, 200, None, resp >=20 >=20 >=20 > def patch_memory(self, Idx, patch_data): >=20 > - md5 =3D hashlib.md5() >=20 > - md5.update(json.dumps(patch_data).encode("utf-8")) >=20 > - etag_str =3D 'W/"' + md5.hexdigest() + '"' >=20 > - patch_data["@odata.etag"] =3D etag_str >=20 >=20 >=20 > + >=20 > + self.elements[str(Idx)] =3D {**self.elements[str(Idx)], **patch_= data} >=20 > + >=20 > + context =3D json.dumps(self.elements[str(Idx)],indent=3D4) >=20 > + self.generate_etag(context) >=20 > + patch_data["@odata.etag"] =3D self.etag >=20 > self.elements[str(Idx)] =3D {**self.elements[str(Idx)], **patch_= data} >=20 > + >=20 > resp =3D flask.Response(json.dumps(self.elements[str(Idx)],inden= t=3D4), > mimetype=3D"application/json") >=20 > + resp.headers["ETag"] =3D self.etag >=20 > return 0, 200, None, resp >=20 >=20 >=20 > def get_memory(self, Idx): >=20 > -- > 2.32.0.windows.2