/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠApp mat t us ĠLimited Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . app mat t us . connectivity Ċ Ċ import Ġcom . app mat t us . connectivity . Connectivity Status . Status . Mobile Ċ import Ġcom . app mat t us . connectivity . Connectivity Status . Status . None Ċ import Ġcom . app mat t us . connectivity . Connectivity Status . Status . Wifi Ċ import Ġkotlinx . c interop . CO pa que Pointer Ċ import Ġkotlinx . c interop . Stable Ref Ċ import Ġkotlinx . c interop . alloc Ċ import Ġkotlinx . c interop . as Stable Ref Ċ import Ġkotlinx . c interop . mem Scoped Ċ import Ġkotlinx . c interop . ptr Ċ import Ġkotlinx . c interop . static C Function Ċ import Ġkotlinx . c interop . value Ċ import Ġkotlinx . coroutines . channels . Send Channel Ċ import Ġkotlinx . coroutines . channels . await Close Ċ import Ġkotlinx . coroutines . flow . callback Flow Ċ import Ġplatform . Core Foundation . CF Release Ċ import Ġplatform . Core Foundation . CF Run Loop GetCurrent Ċ import Ġplatform . Core Foundation . k CF Run Loop Default Mode Ċ import Ġplatform . Foundation . NS Process Info Ċ import Ġplatform . System Configuration . SC Network Reach ability Context Ċ import Ġplatform . System Configuration . SC Network Reach ability Create WithName Ċ import Ġplatform . System Configuration . SC Network Reach ability Flags Ċ import Ġplatform . System Configuration . SC Network Reach ability Flags Var Ċ import Ġplatform . System Configuration . SC Network Reach ability Get Flags Ċ import Ġplatform . System Configuration . SC Network Reach ability Ref Ċ import Ġplatform . System Configuration . SC Network Reach ability Schedule With Run Loop Ċ import Ġplatform . System Configuration . SC Network Reach ability Set Callback Ċ import Ġplatform . System Configuration . SC Network Reach ability Un schedule From Run Loop Ċ import Ġplatform . System Configuration . k SC Network Reach ability Flags Connection On Demand Ċ import Ġplatform . System Configuration . k SC Network Reach ability Flags Connection On Traffic Ċ import Ġplatform . System Configuration . k SC Network Reach ability Flags Connection Required Ċ import Ġplatform . System Configuration . k SC Network Reach ability Flags Inter vention Required Ċ import Ġplatform . System Configuration . k SC Network Reach ability Flags Is WW AN Ċ import Ġplatform . System Configuration . k SC Network Reach ability Flags Reach able Ċ Ċ actual Ġclass ĠConnect ivity ( private Ġval Ġnod ename : ĠString Ġ= Ġ" example . com ") Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" Member Name Equals ClassName ") ĊĠĠĠ Ġactual Ġval Ġconnectivity : ĠConnect ivity Status ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmem Scoped Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreach ability Ġ= ĠSC Network Reach ability Create WithName ( null , Ġnod ename ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġalloc < SC Network Reach ability Flags Var >(). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC Network Reach ability Get Flags ( reach ability , Ġptr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCF Release ( reach ability ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags . as Connectivity Status ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠ Ġactual Ġval Ġconnectivity Status ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcallback Flow < Connectivity Status > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreach ability Ġ= ĠSC Network Reach ability Create WithName ( null , Ġnod ename ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmem Scoped Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġalloc < SC Network Reach ability Context >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . info Ġ= ĠSt able Ref . create ( this @ callback Flow ). as CP o inter () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Successful Ġ= ĠSC Network Reach ability Set Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġreach ability , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcal lout Ġ= Ġstatic C Function Ġ{ Ġ_: ĠSC Network Reach ability Ref ?, Ġflags : ĠSC Network Reach ability Flags , Ġinfo : ĠCO pa que Pointer ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo ?. as Stable Ref < Send Channel < Connectivity Status >>() ?. get ()?. try Send ( flags . as Connectivity Status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext . ptr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC Network Reach ability Schedule With Run Loop ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġreach ability , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Loop Ġ= ĠCF Run Loop GetCurrent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Loop Mode Ġ= Ġk CF Run Loop Default Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġawait Close Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC Network Reach ability Un schedule From Run Loop ( reach ability , ĠCF Run Loop GetCurrent (), Ġk CF Run Loop Default Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC Network Reach ability Flags . as Connectivity Status : ĠConnect ivity Status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! reachable Ġ-> ĠNone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNS Process Info . process Info . environment [" SI MUL ATOR _ DEVICE _ NAME "] Ġ!= Ġnull Ġ-> ĠW ifi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis WW AN Ġ-> ĠMobile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( connection On Traffic Ġ|| Ġconnection On Demand ) Ġ&& Ġ! inter vention Required Ġ-> ĠW ifi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! connection Required Ġ-> ĠW ifi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let (:: Connectivity Status ) ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC Network Reach ability Flags . connection On Demand : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( k SC Network Reach ability Flags Connection On Demand Ġand Ġthis ) Ġ!= Ġ 0 . to UInt () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC Network Reach ability Flags . connection On Traffic : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( k SC Network Reach ability Flags Connection On Traffic Ġand Ġthis ) Ġ!= Ġ 0 . to UInt () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC Network Reach ability Flags . connection Required : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( k SC Network Reach ability Flags Connection Required Ġand Ġthis ) Ġ!= Ġ 0 . to UInt () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC Network Reach ability Flags . inter vention Required : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( k SC Network Reach ability Flags Inter vention Required Ġand Ġthis ) Ġ!= Ġ 0 . to UInt () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC Network Reach ability Flags . is WW AN : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( k SC Network Reach ability Flags Is WW AN Ġand Ġthis ) Ġ!= Ġ 0 . to UInt () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE ") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC Network Reach ability Flags . reachable : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( k SC Network Reach ability Flags Reach able Ġand Ġthis ) Ġ!= Ġ 0 . to UInt () ĊĠĠĠ Ġ} Ċ } Ċ