/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġokhttp 3 . internal . ws Ċ Ċ import Ġjava . io . Closeable Ċ import Ġjava . io . IOException Ċ import Ġjava . util . zip . Inflater Ċ import Ġok io . Buffer Ċ import Ġok io . Inflater Source Ċ Ċ private Ġconst Ġval ĠO CT ETS _ TO _ ADD _ BEFORE _ IN FL ATION Ġ= Ġ 0 x 0 0 0 0 ffff Ċ Ċ class ĠMessage Inflater ( ĊĠ Ġprivate Ġval Ġno Context Take over : ĠBoolean Ċ ) Ġ: ĠClose able Ġ{ ĊĠ Ġprivate Ġval Ġdef lated Bytes Ġ= ĠBuffer () ĊĠ Ġprivate Ġval Ġinflater Ġ= ĠIn flater ( true Ġ/* Ġomit Ġzlib Ġheader Ġ*/) ĊĠ Ġprivate Ġval Ġinflater Source Ġ= ĠIn flater Source ( def lated Bytes , Ġinflater ) ĊĊĠ Ġ/** ĠIn fl ates Ġ[ buffer ] Ġin Ġplace Ġas Ġdescribed Ġin ĠRFC Ġ 7 6 9 2 Ġsection Ġ 7 . 2 . 2 . Ġ*/ ĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġfun Ġinf late ( buffer : ĠBuffer ) Ġ{ ĊĠĠĠ Ġrequire ( def lated Bytes . size Ġ== Ġ 0 L ) ĊĊĠĠĠ Ġif Ġ( no Context Take over ) Ġ{ ĊĠĠĠĠĠ Ġinflater . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdef lated Bytes . write All ( buffer ) ĊĠĠĠ Ġdef lated Bytes . writeInt ( OCT ETS _ TO _ ADD _ BEFORE _ IN FL ATION ) ĊĊĠĠĠ Ġval Ġtotal Bytes To Read Ġ= Ġinflater . bytes Read Ġ+ Ġdef lated Bytes . size ĊĊĠĠĠ Ġ// ĠWe Ġcannot Ġread Ġall , Ġas Ġthe Ġsource Ġdoes Ġnot Ġclose . ĊĠĠĠ Ġ// ĠInstead , Ġwe Ġensure Ġthat Ġall Ġbytes Ġfrom Ġsource Ġhave Ġbeen Ġprocessed Ġby Ġinflater . ĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠ Ġinflater Source . read Or Inf late ( buffer , ĠLong . MAX _ VALUE ) ĊĠĠĠ Ġ} Ġwhile Ġ( in flater . bytes Read Ġ< Ġtotal Bytes To Read ) ĊĠ Ġ} ĊĊĠ Ġ@ Throws ( IOException :: class ) ĊĠ Ġoverride Ġfun Ġclose () Ġ= Ġinflater Source . close () Ċ } Ċ