/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 . Ċ Ġ*/ Ċ Ċ package Ġaws . sdk . kotlin . services . gl ac ier . internal Ċ Ċ import Ġaws . sdk . kotlin . services . gl ac ier . model . Gl ac ier Exception Ċ import Ġaws . smithy . kotlin . runtime . client . operation Name Ċ import Ġaws . smithy . kotlin . runtime . http . Feature Ċ import Ġaws . smithy . kotlin . runtime . http . Feature Key Ċ import Ġaws . smithy . kotlin . runtime . http . Http Body Ċ import Ġaws . smithy . kotlin . runtime . http . HttpClient Feature Factory Ċ import Ġaws . smithy . kotlin . runtime . http . operation . Sdk Http Operation Ċ import Ġaws . smithy . kotlin . runtime . http . request . headers Ċ import Ġaws . smithy . kotlin . runtime . util . Sha 2 5 6 Ċ import Ġaws . smithy . kotlin . runtime . util . encode To Hex Ċ Ċ private Ġconst Ġval Ġdefault Chunk Size Bytes Ġ= Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 Ġ// Ġ 1 MB Ċ Ċ internal Ġclass ĠGl ac ier Body Checksum ( config : ĠConfig ) Ġ: ĠFeature Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtree Hash er Ġ= Ġconfig . tree Hash er ĊĊĠĠĠ Ġinternal Ġclass ĠConfig Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġtree Hash er : ĠTree Hash er Ġ= ĠTree Hash er Impl ( default Chunk Size Bytes ) Ġ{ ĠSh a 2 5 6 () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġcompanion Ġobject ĠFeature Ġ: ĠHttpClient Feature Factory < Config , ĠGl ac ier Body Checksum > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkey : ĠFeature Key < Gl ac ier Body Checksum > Ġ= ĠFeature Key (" Gl ac ier Body Checksum ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( block : ĠConfig . () Ġ-> ĠUnit ): ĠGl ac ier Body Checksum Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠConfig (). apply ( block ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGl ac ier Body Checksum ( config ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< I , ĠO > Ġinstall ( operation : ĠS dk Http Operation < I , ĠO >) Ġ{ ĊĠĠĠĠĠĠĠ Ġoperation . execution . finalize . intercept Ġ{ Ġreq , Ġnext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġreq . subject . body ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Ġis ĠHttp Body . Streaming Ġ&& Ġ! body . is Replay able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġop Name Ġ= Ġreq . context . operation Name Ġ?: Ġ" This Ġoperation " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGl ac ier Exception ("$ op Name Ġrequires Ġa Ġbyte Ġarray Ġor Ġreplay able Ġstream ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhashes Ġ= Ġtree Hash er . calculate Hashes ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . subject . headers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset (" X - Amz - Content - Sha 2 5 6 ", Ġhashes . full Hash . encode To Hex ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset (" X - Amz - Sha 2 5 6 - Tree - Hash ", Ġhashes . tree Hash . encode To Hex ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext . call ( req ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ