package Ġio . ktor . client . engine . darwin . internal Ċ Ċ import Ġio . ktor . client . engine . darwin .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . utils . io . core .* Ċ import Ġkotlinx . atomic fu .* Ċ import Ġkotlinx . c interop .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġplatform . Foundation .* Ċ import Ġkotlin . coroutines .* Ċ Ċ @ Opt In ( Unsafe Number :: class ) Ċ internal Ġclass ĠDar win Session ( ĊĠĠĠ Ġconfig : ĠDar win Client Engine Config , ĊĠĠĠ Ġrequest Queue : ĠN SO peration Queue Ċ ) Ġ: ĠClose able Ġ{ ĊĠĠĠ Ġprivate Ġval Ġclosed Ġ= Ġatomic ( false ) ĊĊĠĠĠ Ġprivate Ġval Ġconfiguration Ġ= ĠNSURL Session Configuration . default Session Configuration (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Proxy ( config ) ĊĠĠĠĠĠĠĠ Ġset HTTP Cookie Storage ( null ) ĊĊĠĠĠĠĠĠĠ Ġconfig . session Config ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġresponse Reader Ġ= ĠDar win Response Reader ( config ) ĊĊĠĠĠ Ġprivate Ġval Ġsession Ġ= ĠNSURL Session . session With Configuration ( ĊĠĠĠĠĠĠĠ Ġconfiguration , ĊĠĠĠĠĠĠĠ Ġresponse Reader , ĊĠĠĠĠĠĠĠ Ġdelegate Queue Ġ= Ġrequest Queue ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġexecute ( request : ĠHttpRequest Data , Ġcall Context : ĠCor outine Context ): ĠHttpResponse Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnative Request Ġ= Ġrequest . to NS Url Request () ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġsession . data Task With Request ( native Request ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠComp letable Deferred < HttpResponse Data > Ġ= Ġresponse Reader . read ( request , Ġcall Context , Ġtask ) ĊĠĠĠĠĠĠĠ Ġtask . resume () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . await () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( cause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . state Ġ== ĠNSURL Session Task State Running ) Ġtask . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġcause ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! closed . compare AndSet ( false , Ġtrue )) Ġreturn ĊĠĠĠĠĠĠĠ Ġsession . finish Tasks And Invalidate () ĊĠĠĠ Ġ} Ċ } Ċ