package Ġcom . bug sn ag . android Ċ Ċ import Ġjava . io . Buffered Writer Ċ import Ġjava . io . IOException Ċ import Ġjava . io . OutputStream Writer Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . Http URLConnection . HTTP _ BAD _ REQUEST Ċ import Ġjava . net . Http URLConnection . HTTP _ CLIENT _ TIMEOUT Ċ import Ġjava . net . Http URLConnection . HTTP _ OK Ċ import Ġjava . net . URL Ċ import Ġjava . nio . charset . Charset Ċ Ċ internal Ġclass ĠDefault Delivery ( private Ġval Ġconnectivity : ĠConnect ivity ?, Ġval Ġlogger : ĠLogger ) Ġ: ĠDelivery Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdeliver ( payload : ĠSession , Ġdelivery Params : ĠDelivery Params ): ĠDelivery Status Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġdeliver ( delivery Params . endpoint , Ġpayload , Ġdelivery Params . headers ) ĊĠĠĠĠĠĠĠ Ġlogger . i (" Session ĠAPI Ġrequest Ġfinished Ġwith Ġstatus Ġ$ status ") ĊĠĠĠĠĠĠĠ Ġreturn Ġstatus ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeliver ( payload : ĠEvent Payload , Ġdelivery Params : ĠDelivery Params ): ĠDelivery Status Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġdeliver ( delivery Params . endpoint , Ġpayload , Ġdelivery Params . headers ) ĊĠĠĠĠĠĠĠ Ġlogger . i (" Error ĠAPI Ġrequest Ġfinished Ġwith Ġstatus Ġ$ status ") ĊĠĠĠĠĠĠĠ Ġreturn Ġstatus ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdeliver ( ĊĠĠĠĠĠĠĠ Ġurl String : ĠString , ĊĠĠĠĠĠĠĠ Ġstream able : ĠJson Stream . Stream able , ĊĠĠĠĠĠĠĠ Ġheaders : ĠMap < String , ĠString > ĊĠĠĠ Ġ): ĠDelivery Status Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( connectivity Ġ!= Ġnull Ġ&& Ġ! connectivity . has Network Connection ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelivery Status . UN DE LI VER ED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġconn : ĠHttp URLConnection ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( url String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn Ġ= Ġurl . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . do Output Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . set Chunk ed Streaming Mode ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . add Request Property (" Content - Type ", Ġ" application / json ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġheaders . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . add Request Property ( key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstream : ĠJson Stream ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= Ġconn . output Stream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharset Ġ= ĠCharset . forName (" UTF - 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBuffered Writer ( OutputStream Writer ( out , Ġcharset )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream Ġ= ĠJson Stream ( writer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream able . to Stream ( stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIO Utils . close Quiet ly ( stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnd Ġthe Ġrequest , Ġget Ġthe Ġresponse Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Code Ġ= Ġconn . response Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġget Delivery Status ( response Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Request Info ( response Code , Ġconn , Ġstatus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstatus ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . w (" IOException Ġencountered Ġin Ġrequest ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelivery Status . UN DE LI VER ED ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . w (" Unexpected Ġerror Ġdeliver ing Ġpayload ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDelivery Status . FAILURE ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO Utils . close ( conn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog Request Info ( code : ĠInt , Ġconn : ĠHttp URLConnection , Ġstatus : ĠDelivery Status ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . i ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Request Ġcompleted Ġwith Ġcode Ġ$ code , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" message : Ġ${ conn . response Message }, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" headers : Ġ${ conn . header Fields }" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( status Ġ!= ĠDelivery Status . DE LI VER ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerr Body Ġ= Ġconn . error Stream . buffered Reader (). read Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . w (" Request Ġerror Ġdetails : Ġ$ err Body ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Delivery Status ( response Code : ĠInt ): ĠDelivery Status Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġun recover able Codes Ġ= ĠInt Range ( HTTP _ BAD _ REQUEST , Ġ 4 9 9 ). filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ!= ĠHTTP _ CLIENT _ TIMEOUT Ġ&& Ġit Ġ!= Ġ 4 2 9 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( response Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin ĠHTTP _ OK .. 2 9 9 Ġ-> ĠDelivery Status . DE LI VER ED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġun recover able Codes Ġ-> ĠDelivery Status . FAILURE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠDelivery Status . UN DE LI VER ED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ