package Ġap pt ent ive . com . android . network Ċ Ċ import Ġandroid . content . Context Ċ import Ġap pt ent ive . com . android . core . Time Interval Ċ import Ġap pt ent ive . com . android . core . to Milliseconds Ċ import Ġap pt ent ive . com . android . core . to Seconds Ċ import Ġap pt ent ive . com . android . network . Constants . DEFAULT _ REQUEST _ TIMEOUT Ċ import Ġap pt ent ive . com . android . util . Internal Use Only Ċ import Ġap pt ent ive . com . android . util . Network Utils Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjava . util . zip . GZIP InputStream Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġbasic Ġnetwork Ġoperation Ġand Ġnetwork Ġstate Ġquery . Ċ Ġ*/ Ċ @ Internal Use Only Ċ interface ĠHttp Network Ġ{ ĊĠĠĠ Ġfun Ġis Network Connected (): ĠBoolean ĊĠĠĠ Ġfun Ġperform Request ( request : ĠHttpRequest < *> ): ĠHttp Network Response Ċ } Ċ Ċ @ Internal Use Only Ċ class ĠDefault Http Network ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġconnect Timeout : ĠTime Interval Ġ= ĠDEFAULT _ REQUEST _ TIMEOUT , ĊĠĠĠ Ġprivate Ġval Ġread Timeout : ĠTime Interval Ġ= ĠDEFAULT _ REQUEST _ TIMEOUT Ċ ) Ġ: ĠHttp Network Ġ{ ĊĠĠĠ Ġprivate Ġval Ġapplication Context : ĠContext Ġ= Ġcontext . application Context ĊĊĠĠĠ Ġoverride Ġfun Ġis Network Connected () Ġ= ĠNetwork Utils . is Network Connected ( application Context ) ĊĊĠĠĠ Ġoverride Ġfun Ġperform Request ( request : ĠHttpRequest < *> ): ĠHttp Network Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġopen Connection ( request ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest Ġheaders ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Headers ( connection , Ġrequest . headers ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Method ( connection , Ġrequest . method ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest Ġbody ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset RequestBody ( connection , Ġrequest ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresponse Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Code Ġ= Ġconnection . response Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Code Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Could Ġnot Ġretrieve Ġresponse Ġcode Ġfrom Ġthe Ġconnection .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstatus Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Message Ġ= Ġconnection . response Message ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresponse Ġheaders ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Headers Ġ= Ġget Response Headers ( connection ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġget Response Stream ( connection ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġduration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġto Seconds ( System . currentTimeMillis () Ġ- ĠstartTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHttp Network Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode Ġ= Ġresponse Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Message Ġ= Ġresponse Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġstream . read Bytes (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Ġ= Ġresponse Headers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġduration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġstream . close () Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . disconnect () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// region ĠConnection ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen s Ġ[ Http URLConnection ] Ġfor Ġa Ġgiven Ġ[ request ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġopen Connection ( request : ĠHttpRequest < *> ): ĠHttp URLConnection Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġcreate Connection ( request . url ) ĊĠĠĠĠĠĠĠ Ġconnection . connect Timeout Ġ= Ġto Milliseconds ( connect Timeout ) ĊĠĠĠĠĠĠĠ Ġconnection . read Timeout Ġ= Ġto Milliseconds ( read Timeout ) ĊĠĠĠĠĠĠĠ Ġconnection . use Caches Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġconnection . do Input Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġconnection ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġ[ Http URLConnection ] Ġfor Ġa Ġgiven Ġ[ url ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Connection ( url : ĠURL ): ĠHttp URLConnection Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġurl . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠ Ġ// Ġworkaround Ġfor : Ġhttps :// code . google . com / p / android / issues / detail ? id = 1 9 4 4 9 5 ĊĠĠĠĠĠĠĠ Ġconnection . instance Follow Redirect s Ġ= ĠHttp URLConnection . get Follow Redirect s () ĊĠĠĠĠĠĠĠ Ġreturn Ġconnection ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Request Headers ( connection : ĠHttp URLConnection , Ġheaders : ĠHttp Headers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( header Ġin Ġheaders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . setRequest Property ( header . name , Ġheader . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Request Method ( connection : ĠHttp URLConnection , Ġmethod : ĠHttpMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection . request Method Ġ= Ġmethod . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset RequestBody ( connection : ĠHttp URLConnection , Ġrequest : ĠHttpRequest <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġrequest . request Body ĊĠĠĠĠĠĠĠ Ġif Ġ( request Body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . do Output Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . setRequest Property ( HttpHeaders . CONTENT _ TYPE , Ġrequest Body . contentType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Body . write ( connection . output Stream ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Response Headers ( connection : ĠHttp URLConnection ): ĠHttp Headers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĠMutable HttpHeaders () ĊĠĠĠĠĠĠĠ Ġfor Ġ( header Ġin Ġconnection . header Fields ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġheader . key Ġ?: Ġcontinue Ġ// ĠHttp Url Connection Ġincludes Ġthe Ġstatus Ġline Ġas Ġa Ġheader Ġwith Ġa Ġnull Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġheader . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheaders [ name ] Ġ= Ġvalues . join ToString ( separator Ġ= Ġ", ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġheaders ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReads Ġconnection Ġresponse Ġfully Ġas Ġan Ġarray Ġof Ġbytes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Response Stream ( connection : ĠHttp URLConnection ): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠinputStream For Connection ( connection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġinput Ġstream Ġto Ġread Ġconnection Ġresponse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠinputStream For Connection ( connection : ĠHttp URLConnection ): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= ĠinputStream For Connection Res pect ing Content Encoding ( connection ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is G zip Content Encoding ( connection )) ĠG ZIP InputStream ( inputStream ) Ġelse ĠinputStream ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠP icks Ġan Ġappropriate Ġinput Ġstream Ġfor Ġreading Ġresponse Ġdata Ġfrom Ġ[ connection ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġhttps :// developer . android . com / reference / java / net / Http URLConnection # response - handling ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠinputStream For Connection Res pect ing Content Encoding ( connection : ĠHttp URLConnection ): ĠInputStream Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . inputStream ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . error Stream ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġconnection Ġresponse Ġis Ġgzip - encoded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis G zip Content Encoding ( connection : ĠHttp URLConnection ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Encoding Ġ= Ġconnection . header Fields [ HttpHeaders . CONTENT _ ENCODING ] ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent Encoding Ġ!= Ġnull Ġ&& Ġcontent Encoding . contains (" gzip ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// endregion Ċ } Ċ