package Ġcom . ch u cker team . ch u cker . internal . support Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . ch u cker team . ch u cker . R Ċ import Ġcom . ch u cker team . ch u cker . internal . data . entity . Http Header Ċ import Ġcom . ch u cker team . ch u cker . internal . data . entity . Http Transaction Ċ import Ġcom . google . gson . Json ParseException Ċ import Ġcom . google . gson . Json Parser Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . io . String Writer Ċ import Ġjava . util . Locale Ċ import Ġjavax . xml . XML Constants Ċ import Ġjavax . xml . transform . Output Keys Ċ import Ġjavax . xml . transform . Transformer Exception Ċ import Ġjavax . xml . transform . sax . SAX Source Ċ import Ġjavax . xml . transform . sax . SAX Transformer Factory Ċ import Ġjavax . xml . transform . stream . Stream Result Ċ import Ġkotlin . math . ln Ċ import Ġkotlin . math . pow Ċ import Ġorg . xml . sax . Input Source Ċ Ċ internal Ġobject ĠFormat Utils Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠSI _ MULTIPLE Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġprivate Ġconst Ġval ĠBASE _ TWO _ MULTIPLE Ġ= Ġ 1 0 2 4 ĊĊĠĠĠ Ġfun Ġformat Headers ( http Headers : ĠList < Http Header > ?, Ġwith Markup : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhttp Headers ?. join ToString ( separator Ġ= Ġ"") Ġ{ Ġheader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( with Markup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< b > Ġ${ header . name }: Ġ</ b >${ header . value } Ġ< br Ġ/> " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ header . name }: Ġ${ header . value }\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġformat Byte Count ( bytes : ĠLong , Ġsi : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġunit Ġ= Ġif Ġ( si ) ĠSI _ MULTIPLE Ġelse ĠBASE _ TWO _ MULTIPLE ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ< Ġunit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"$ bytes ĠB " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexp Ġ= Ġ( ln ( bytes . toDouble ()) Ġ/ Ġln ( unit . toDouble ())). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġpre Ġ= Ġ( if Ġ( si ) Ġ" k M GT PE " Ġelse Ġ" KM GT PE ")[ exp Ġ- Ġ 1 ] Ġ+ Ġif Ġ( si ) Ġ"" Ġelse Ġ" i " ĊĊĠĠĠĠĠĠĠ Ġreturn ĠString . format ( Locale . US , Ġ"% . 1 f Ġ% s B ", Ġbytes Ġ/ Ġunit . toDouble (). pow ( exp . toDouble ()), Ġpre ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġformat Json ( json : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġje Ġ= ĠJson Parser (). parse ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson Converter . instance . toJson ( je ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJson ParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġformat Xml ( xml : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransformer Factory Ġ= ĠSAX Transformer Factory . newInstance (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Feature ( XML Constants . FEATURE _ SECURE _ PROCESS ING , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Attribute (" http :// javax . xml . XML Constants / property / access External DTD ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Attribute (" http :// javax . xml . XML Constants / property / access External Style sheet ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserializer Ġ= Ġtransformer Factory . new Transformer (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Property ( Output Keys . IND ENT , Ġ" yes ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Property ("{ http :// xml . apache . org / xsl t } indent - amount ", Ġ" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml Source Ġ= ĠSAX Source ( Input Source ( ByteArray InputStream ( xml . toByteArray ()))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠStream Result ( ByteArray OutputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserializer . transform ( xml Source , Ġres ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(( res . output Stream Ġas ĠByteArrayOutputStream ). toByteArray ()). toString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTransformer Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Share Text ( context : ĠContext , Ġtransaction : ĠHttp Transaction ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"${ context . getString ( R . string . ch u cker _ url )} : Ġ${ transaction . url }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ method )} : Ġ${ transaction . method }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ protocol )} : Ġ${ transaction . protocol }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ status )} : Ġ${ transaction . status }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ response )} : Ġ${ transaction . response Summary Text }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ ssl )} : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ context . getString ( if Ġ( transaction . is Ssl ) ĠR . string . ch u cker _ yes Ġelse ĠR . string . ch u cker _ no )}\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ request _ time )} : Ġ${ transaction . request DateString }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ response _ time )} : Ġ${ transaction . response DateString }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ duration )} : Ġ${ transaction . duration String }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ request _ size )} : Ġ${ transaction . request Size String }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ response _ size )} : Ġ${ transaction . response Size String }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ context . getString ( R . string . ch u cker _ total _ size )} : Ġ${ transaction . total Size String }\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"\ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ" ---------- Ġ${ context . getString ( R . string . ch u cker _ request )} Ġ---------- \ n \ n " ĊĊĠĠĠĠĠĠĠ Ġvar Ġheaders Ġ= Ġformat Headers ( transaction . get Parsed Request Headers (), Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( headers . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ headers }\ n " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġif Ġ( transaction . is RequestBody Plain Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . get Formatted RequestBody () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . ch u cker _ body _ omit ted ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"\ n \ n " ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ" ---------- Ġ${ context . getString ( R . string . ch u cker _ response )} Ġ---------- \ n \ n " ĊĊĠĠĠĠĠĠĠ Ġheaders Ġ= Ġformat Headers ( transaction . get Parsed Response Headers (), Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( headers . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ"${ headers }\ n " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġif Ġ( transaction . is ResponseBody Plain Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . get Formatted ResponseBody () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . ch u cker _ body _ omit ted ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Share Curl Command ( transaction : ĠHttp Transaction ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcompressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġcurl Cmd Ġ= Ġ" curl Ġ- X Ġ$ transaction . method " ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġtransaction . get Parsed Request Headers () ĊĊĠĠĠĠĠĠĠ Ġheaders ?. forEach Ġ{ Ġheader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" Accept - Encoding ". equals ( header . name , Ġignore Case Ġ= Ġtrue ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" gzip ". equals ( header . value , Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurl Cmd Ġ+= Ġ" Ġ- H Ġ\"$ header . name : Ġ$ header . value \"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġtransaction . request Body ĊĠĠĠĠĠĠĠ Ġif Ġ(! request Body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtry Ġto Ġkeep Ġto Ġa Ġsingle Ġline Ġand Ġuse Ġa Ġsub shell Ġto Ġpreserve Ġany Ġline Ġbreaks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurl Cmd Ġ+= Ġ" Ġ-- data Ġ$ '$ request Body . replace (\" \\ n \", Ġ\" \\\\ n \") '" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurl Cmd Ġ+= Ġ( if Ġ( compressed ) Ġ" Ġ-- compressed Ġ" Ġelse Ġ" Ġ") Ġ+ Ġtransaction . url ĊĠĠĠĠĠĠĠ Ġreturn Ġcurl Cmd ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConvert Ġa Ġstack trace Ġinto Ġa ĠString . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġthrowable ĠThe Ġthrowable Ġto Ġconvert ĊĠĠĠĠ Ġ* Ġ@ return ĠThe ĠString Ġof Ġthe Ġthrowable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġformat Throwable ( throwable : ĠThrowable ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsw Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ Ġval Ġpw Ġ= ĠPrintWriter ( sw ) ĊĠĠĠĠĠĠĠ Ġthrowable . printStackTrace ( pw ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsw . toString () ĊĠĠĠ Ġ} Ċ } Ċ