/* Ċ * ĠTor On ion Proxy Library - Android Ġ( a . k . a . Ġto pl - android ) Ġis Ġa Ġder ivation Ġof Ċ * Ġwork Ġfrom Ġthe ĠTor _ On ion _ Proxy _ Library Ġproject Ġthat Ġstarted Ġat Ġcommit Ċ * Ġhash Ġ` 7 4 4 0 7 1 1 4 cb fa 8 ea 6 f 2 ac 5 1 4 1 7 dda 8 be 9 8 d 8 aba 8 6 `. ĠCont ributions Ġmade Ġafter Ċ * Ġsaid Ġcommit Ġhash Ġare : Ċ * Ċ * ĠĠĠĠ ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠMat thew ĠN el son Ċ * Ċ * ĠĠĠĠ ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ġit Ċ * ĠĠĠĠ Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ġthe Ċ * ĠĠĠĠ ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ġ( at Ġyour Ċ * ĠĠĠĠ Ġoption ) Ġany Ġlater Ġversion . Ċ * Ċ * ĠĠĠĠ ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ġbut Ċ * ĠĠĠĠ ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof ĠMERCHANTABILITY Ċ * ĠĠĠĠ Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . ĠSee Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ * ĠĠĠĠ Ġfor Ġmore Ġdetails . Ċ * Ċ * ĠĠĠĠ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ * ĠĠĠĠ Ġalong Ġwith Ġthis Ġprogram . ĠIf Ġnot , Ġsee Ġ< https :// www . gnu . org / licenses />. Ċ * Ċ * Ġ` ================================================================ =========== ` Ċ * Ġ` ++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++ ++++++++ +++ ` Ċ * Ġ` ================================================================ =========== ` Ċ * Ċ * ĠThe Ġfollowing Ġexception Ġis Ġan Ġadditional Ġpermission Ġunder Ġsection Ġ 7 Ġof Ġthe Ċ * ĠGNU ĠGeneral ĠPublic ĠLicense , Ġversion Ġ 3 Ġ( âĢľ GPL v 3 âĢĿ ). Ċ * Ċ * ĠĠĠĠ Ġ" The ĠInterfaces " Ġis Ġhence for th Ġdefined Ġas ĠApplication ĠProgramming ĠInterfaces Ċ * ĠĠĠĠ Ġneeded Ġto Ġimplement ĠTor On ion Proxy Library - Android , Ġas Ġlisted Ġbelow : Ċ * Ċ * ĠĠĠĠĠ Ġ- ĠFrom Ġthe Ġ` to pl - core - base ` Ġmodule : Ċ * ĠĠĠĠĠĠĠĠĠ Ġ- ĠAll ĠClasses / methods / variables Ċ * Ċ * ĠĠĠĠĠ Ġ- ĠFrom Ġthe Ġ` to pl - service - base ` Ġmodule : Ċ * ĠĠĠĠĠĠĠĠĠ Ġ- ĠAll ĠClasses / methods / variables Ċ * Ċ * ĠĠĠĠĠ Ġ- ĠFrom Ġthe Ġ` to pl - service ` Ġmodule : Ċ * ĠĠĠĠĠĠĠĠĠ Ġ- ĠThe ĠTor Service Controller Ġclass Ġand Ġit 's Ġcontained Ġclasses / methods / variables Ċ * ĠĠĠĠĠĠĠĠĠ Ġ- ĠThe ĠService Notification . Builder Ġclass Ġand Ġit 's Ġcontained Ġclasses / methods / variables Ċ * ĠĠĠĠĠĠĠĠĠ Ġ- ĠThe ĠBackground Manager . Builder Ġclass Ġand Ġit 's Ġcontained Ġclasses / methods / variables Ċ * ĠĠĠĠĠĠĠĠĠ Ġ- ĠThe ĠBackground Manager . Companion Ġclass Ġand Ġit 's Ġcontained Ġmethods / variables Ċ * Ċ * ĠĠĠĠ ĠThe Ġfollowing Ġcode Ġis Ġexcluded Ġfrom Ġ" The ĠInterfaces ": Ċ * Ċ * ĠĠĠĠĠĠ Ġ- ĠAll Ġother Ġcode Ċ * Ċ * ĠĠĠĠ ĠLink ing ĠTor On ion Proxy Library - Android Ġstatic ally Ġor Ġdynamically Ġwith Ġother Ċ * ĠĠĠĠ Ġmodules Ġis Ġmaking Ġa Ġcombined Ġwork Ġbased Ġon ĠTor On ion Proxy Library - Android . Ċ * ĠĠĠĠ ĠThus , Ġthe Ġterms Ġand Ġconditions Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġcover Ġthe Ċ * ĠĠĠĠ Ġwhole Ġcombination . Ċ * Ċ * ĠĠĠĠ ĠAs Ġa Ġspecial Ġexception , Ġthe Ġcopyright Ġholder Ġof ĠTor On ion Proxy Library - Android Ċ * ĠĠĠĠ Ġgives Ġyou Ġpermission Ġto Ġcombine ĠTor On ion Proxy Library - Android Ġprogram Ġwith Ġfree Ċ * ĠĠĠĠ Ġsoftware Ġprograms Ġor Ġlibraries Ġthat Ġare Ġreleased Ġunder Ġthe ĠGNU ĠLGPL Ġand Ġwith Ċ * ĠĠĠĠ Ġindependent Ġmodules Ġthat Ġcommunicate Ġwith ĠTor On ion Proxy Library - Android Ġsole ly Ċ * ĠĠĠĠ Ġthrough Ġ" The ĠInterfaces ". ĠYou Ġmay Ġcopy Ġand Ġdistribute Ġsuch Ġa Ġsystem Ġfollowing Ċ * ĠĠĠĠ Ġthe Ġterms Ġof Ġthe ĠGNU ĠGPL Ġfor ĠTor On ion Proxy Library - Android Ġand Ġthe Ġlicenses Ġof Ċ * ĠĠĠĠ Ġthe Ġother Ġcode Ġconcerned , Ġprovided Ġthat Ġyou Ġinclude Ġthe Ġsource Ġcode Ġof Ġthat Ċ * ĠĠĠĠ Ġother Ġcode Ġwhen Ġand Ġas Ġthe ĠGNU ĠGPL Ġrequires Ġdistribution Ġof Ġsource Ġcode Ġand Ċ * ĠĠĠĠ Ġprovided Ġthat Ġyou Ġdo Ġnot Ġmodify Ġ" The ĠInterfaces ". Ċ * Ċ * ĠĠĠĠ ĠNote Ġthat Ġpeople Ġwho Ġmake Ġmodified Ġversions Ġof ĠTor On ion Proxy Library - Android Ċ * ĠĠĠĠ Ġare Ġnot Ġoblig ated Ġto Ġgrant Ġthis Ġspecial Ġexception Ġfor Ġtheir Ġmodified Ġversions ; Ċ * ĠĠĠĠ Ġit Ġis Ġtheir Ġchoice Ġwhether Ġto Ġdo Ġso . ĠThe ĠGNU ĠGeneral ĠPublic ĠLicense Ġgives Ċ * ĠĠĠĠ Ġpermission Ġto Ġrelease Ġa Ġmodified Ġversion Ġwithout Ġthis Ġexception ; Ġthis Ġexception Ċ * ĠĠĠĠ Ġalso Ġmakes Ġit Ġpossible Ġto Ġrelease Ġa Ġmodified Ġversion Ġwhich Ġcar ries Ġforward Ġthis Ċ * ĠĠĠĠ Ġexception . ĠIf Ġyou Ġmodify Ġ" The ĠInterfaces ", Ġthis Ġexception Ġdoes Ġnot Ġapply Ġto Ġyour Ċ * ĠĠĠĠ Ġmodified Ġversion Ġof ĠTor On ion Proxy Library - Android , Ġand Ġyou Ġmust Ġremove Ġthis Ċ * ĠĠĠĠ Ġexception Ġwhen Ġyou Ġdistribute Ġyour Ġmodified Ġversion . Ċ * Ġ*/ Ċ package Ġio . mat the wn el son . to pl _ core . listener Ċ Ċ import Ġio . mat the wn el son . to pl _ core . broad caster . Broadcast Logger Ċ import Ġio . mat the wn el son . to pl _ core . util . Tor Installer Ċ import Ġkotlinx . coroutines . delay Ċ import Ġnet . free hav en . tor . control . EventListener Ċ import Ġnet . free hav en . tor . control . Tor Control Commands Ċ Ċ /** Ċ Ġ* ĠExtend Ġthis Ġclass Ġto Ġcustomize Ġimplementation Ġof Ġthe Ġmember Ġoverrides . Ċ Ġ* Ġ*/ Ċ abstract Ġclass ĠBase EventListener : ĠEvent Listener () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġgets Ġset Ġas Ġsoon Ġas Ġ[ io . mat the wn el son . to pl _ core . On ion Proxy Manager ] Ġis Ġinstantiated , ĊĠĠĠĠ Ġ* Ġand Ġcan Ġbe Ġused Ġto Ġbroadcast Ġmessages Ġin Ġyour Ġclass Ġwhich Ġextends Ġ[ Tor Installer ]. ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġbroadcast Logger : ĠBroadcast Logger ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġinternal Ġfun Ġinit Broadcast Logger ( tor Installer Broadcast Logger : ĠBroadcast Logger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( broadcast Logger Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Logger Ġ= Ġtor Installer Broadcast Logger ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSee Ġ[ Tor Control Commands . EVENT _ NAMES ] Ġvalues . ĠThese Ġare Ġ** REQUIRED ** ĊĠĠĠĠ Ġ* Ġfor Ġregistering Ġthem Ġin Ġ[ io . mat the wn el son . to pl _ core . On ion Proxy Manager . start ] ĊĠĠĠĠ Ġ* Ġwhich Ġallows Ġyou Ġfull Ġcontrol Ġover Ġwhat Ġyou Ġwish Ġto Ġlisten Ġfor . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġabstract Ġval ĠCONT ROL _ COMMAND _ EVENTS : ĠArray < String > ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġnotice Msg Buffer : ĠStringBuffer ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWill Ġset Ġ[ notice Msg Buffer ] Ġsuch Ġthat Ġ[ notice Msg ] Ġwill Ġbegin Ġapp ending Ġto Ġit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠBe Ġsure Ġto Ġcall Ġ[ does Notice Msg Buffer Contain ] Ġto Ġset Ġit Ġback Ġto Ġnull Ġso Ġit Ġdoesn 't ĊĠĠĠĠ Ġ* Ġcontinue Ġto Ġappend Ġnotice Ġmessages . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠTODO : Ġfind Ġa Ġless Ġhack y Ġway Ġto Ġdo Ġthis ... ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġbegin Watch ing Notice Msgs () Ġ{ ĊĠĠĠĠĠĠĠ Ġnotice Msg Buffer Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġdelay ( 5 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġ[ notice Msg Buffer ] Ġfor Ġthe Ġdeclared Ġ[ string ] Ġand Ġresets Ġ[ notice Msg Buffer ] Ġto Ġnull . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ string ] ĠThe Ġstring Ġyou Ġwish Ġto Ġcheck Ġfor Ġin Ġ[ notice Msg Buffer ] ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ delay Milliseconds ] ĠLength Ġof Ġtime Ġyou Ġwish Ġto Ġdelay Ġthe Ġcoroutine Ġfor Ġbefore Ġexecuting ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġit Ġcontains Ġthe Ġstring , Ġfalse Ġif Ġnot . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġdoes Notice Msg Buffer Contain ( string : ĠString , Ġdelay Milliseconds : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( delay Milliseconds ) ĊĠĠĠĠĠĠĠ Ġval Ġboolean Ġ= Ġnotice Msg Buffer . toString (). contains ( string ) ĊĠĠĠĠĠĠĠ Ġnotice Msg Buffer Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġboolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequires Ġthat Ġwhen Ġyou Ġextend Ġthis Ġclass Ġand Ġoverride Ġ[ notice Msg ], Ġyou Ġ** must ** ĊĠĠĠĠ Ġ* Ġuse Ġ` super . notice Msg ( data )` Ġwithin Ġyour Ġoverridden Ġmethod ; Ġotherwise , Ġ[ notice Msg Buffer ] ĊĠĠĠĠ Ġ* Ġ[ begin Watch ing Notice Msgs ] Ġand Ġ[ does Notice Msg Buffer Contain ] Ġwill Ġnot Ġwork Ġcorrectly . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġnotice Msg ( data : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġnotice Msg Buffer ?. append ("${ data }\ n ") ĊĠĠĠ Ġ} Ċ }