/* Ċ * Ġ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 . Ċ * Ċ * Ġ` ================================================================ =========== ` Ċ * Ġ` ++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++ ++++++++ +++ ` Ċ * Ġ` ================================================================ =========== ` Ċ * Ċ * ĠThe Ġoriginal Ġcode , Ġprior Ġto Ġ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 , Ċ * Ġwas : Ċ * Ċ * ĠĠĠĠ ĠCopyright Ġ( c ) ĠMicrosoft ĠOpen ĠTechnologies , ĠInc . Ċ * ĠĠĠĠ ĠAll ĠRights ĠReserved Ċ * Ċ * ĠĠĠĠ Ġ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 Ċ * Ċ * Ċ * ĠĠĠĠ ĠTHIS ĠCODE ĠIS ĠPROVIDED ĠON ĠAN Ġ* AS ĠIS * ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR Ċ * ĠĠĠĠ ĠCONDITIONS ĠOF ĠANY ĠKIND , ĠE IT HER ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING Ċ * ĠĠĠĠ ĠWITHOUT ĠLIMIT ATION ĠANY ĠIMPLIED ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠTITLE , Ċ * ĠĠĠĠ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE , ĠMER CHANT AB L ITY ĠOR ĠNON - INFRINGEMENT . Ċ * Ċ * ĠĠĠĠ ĠSee Ġthe ĠApache Ġ 2 ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ * ĠĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ * Ġ*/ Ċ package Ġio . mat the wn el son . to pl _ core Ċ Ċ import Ġandroid . os . Process Ċ import Ġio . mat the wn el son . to pl _ core . broad caster . Broadcast Logger Ċ import Ġio . mat the wn el son . to pl _ core _ base . Tor Settings Ċ import Ġio . mat the wn el son . to pl _ core . util . File Utilities Ċ import Ġio . mat the wn el son . to pl _ core . util . Core Consts Ċ import Ġio . mat the wn el son . to pl _ core . util . Tor Installer Ċ import Ġio . mat the wn el son . to pl _ core . util . Write Observer Ċ import Ġio . mat the wn el son . to pl _ core _ base . Tor Config Files Ċ import Ġio . mat the wn el son . to pl _ core _ base . createNew File If DoesNotExist Ċ import Ġio . mat the wn el son . to pl _ core _ base . read Tor ConfigFile Ċ import Ġjava . io .* Ċ Ċ /** Ċ Ġ* ĠProvides Ġcontext Ġinformation Ġabout Ġthe Ġenvironment . ĠImplement ing Ġclasses Ġprovide Ġlogic Ċ Ġ* Ġfor Ġsetting Ġup Ġthe Ġspecific Ġenvironment . ĠAny Ġand Ġall Ġfile Ġmodification Ġ( creation / deletion , Ċ Ġ* Ġreading / writing ) Ġis Ġdone Ġhere Ġsuch Ġthat Ġsynchron icity Ġis Ġhad Ġwith Ġthe Ġenvironment Ġfor Ġwhich Ċ Ġ* ĠOn ion Proxy Manager Ġis Ġoperating Ġin . Ċ Ġ* Ċ Ġ* ĠMost Ġto Ġall Ġmethods / values Ġare Ġonly Ġaccessible Ġwithin Ġthe Ġmodule . ĠThings Ġthat Ġmay Ġbe Ġneeded Ċ Ġ* Ġextern ally Ġcan Ġbe Ġaccessed Ġfrom ĠOn ion Proxy Manager . Ċ Ġ* Ċ Ġ* ĠConstructs Ġinstance Ġof Ġ[ On ion Proxy Context ] Ġwith Ġthe Ġspecified Ġ[ tor Config Files ]. ĠTypically Ċ Ġ* Ġthis Ġconstructor Ġwill Ġbe Ġused Ġwhen Ġtor Ġis Ġcurrently Ġinstalled Ġon Ġthe Ġsystem , Ġwith Ġthe Ċ Ġ* Ġtor Ġexecutable Ġand Ġconfig Ġfiles Ġin Ġdifferent Ġlocations . Ċ Ġ* Ċ Ġ* Ġ@ param Ġ[ tor Config Files ] Ġ[ Tor Config Files ] ĠTor Ġfile / directory Ġinfo Ġused Ġfor Ġrunning / installing ĠTor Ċ Ġ* Ġ@ param Ġ[ tor Installer ] Ġ[ Tor Installer ] Ċ Ġ* Ġ@ param Ġ[ tor Settings ] Ġ[ Tor Settings ] ĠBasic ally Ġyour Ġtor rc Ġfile Ċ Ġ*/ Ċ internal Ġclass ĠOn ion Proxy Context Ġprivate Ġconstructor ( ĊĠĠĠ Ġval Ġtor Config Files : ĠTor Config Files , ĊĠĠĠ Ġval Ġtor Installer : ĠTor Installer , ĊĠĠĠ Ġval Ġtor Settings : ĠTor Settings Ċ ): ĠCore Consts () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠĠĠĠĠ Ġfun Ġinstantiate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files : ĠTor Config Files , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtor Installer : ĠTor Installer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtor Settings : ĠTor Settings ĊĠĠĠĠĠĠĠ Ġ): ĠOn ion Proxy Context Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn ion Proxy Context ( tor Config Files , Ġtor Installer , Ġtor Settings ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGets Ġinitialized Ġin ĠOn ion Proxy Manager Ġ_ immediate ly _ Ġafter ĊĠĠĠ Ġ// ĠOn ion Proxy Context Ġis Ġinstantiated . ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbroadcast Logger : ĠBroadcast Logger ĊĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġfun Ġinit Broadcast Logger ( on ion Proxy Broadcast Logger : ĠBroadcast Logger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! :: broadcast Logger . isInitialized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Logger Ġ= Ġon ion Proxy Broadcast Logger ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcontrol Port File Lock : ĠAny ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtor Config Files . control Port File Lock ĊĠĠĠ Ġprivate Ġval Ġcookie Auth File Lock : ĠAny ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtor Config Files . cookie Auth File Lock ĊĠĠĠ Ġprivate Ġval Ġdata Dir Lock : ĠAny ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtor Config Files . data Dir Lock ĊĠĠĠ Ġprivate Ġval Ġresol v Conf File Lock : ĠAny ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtor Config Files . res olv Conf File Lock ĊĠĠĠ Ġprivate Ġval Ġhostname File Lock : ĠAny ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtor Config Files . hostname File Lock ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġobserver Ġfor Ġthe Ġfile Ġreferenced . ĠSee Ġ[ Core Consts . ConfigFile ] Ġannotation Ġclass ĊĠĠĠĠ Ġ* Ġfor Ġaccepted Ġarguments . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ configFile Reference ] ĠString Ġthat Ġdefines Ġwhat Ġfile Ġa Ġ[ Write Observer ] Ġis Ġcreated Ġfor . ĊĠĠĠĠ Ġ* Ġ@ return ĠA ĠWrite Observer Ġfor Ġthe Ġappropriate Ġfile Ġreferenced . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ IllegalArgumentException ] ĠIf Ġ[ configFile Reference ] Ġis Ġan Ġinvalid Ġargument , Ġor Ġnull Ġfile . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ Security Exception ] ĠSee Ġ[ Write Observer . check Exists ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Throws ( IllegalArgumentException :: class , ĠSecurity Exception :: class ) ĊĠĠĠ Ġfun Ġcreate File Observer (@ ConfigFile Ġconfig File Reference : ĠString ): ĠWrite Observer Ġ{ ĊĠĠĠĠĠĠĠ Ġbroadcast Logger . debug (" Creating ĠFile Observer Ġfor Ġ$ configFile Reference ") ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( configFile Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . CONTROL _ PORT _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( control Port File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWrite Observer ( tor Config Files . control Port File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . COOKIE _ AUTH _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( cookie Auth File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWrite Observer ( tor Config Files . cookie Auth File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . HOSTNAME _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( hostname File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWrite Observer ( tor Config Files . hostname File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("$ configFile Reference Ġis Ġnot Ġa Ġvalid Ġargument ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġempty Ġfile Ġif Ġthe Ġprovided Ġone Ġdoes Ġnot Ġexist . ĠSee Ġ[ Core Consts . ConfigFile ] ĊĠĠĠĠ Ġ* Ġannotation Ġclass Ġfor Ġaccepted Ġarguments . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ configFile Reference ] ĠString Ġthat Ġdefines Ġwhat Ġfile Ġis Ġto Ġbe Ġcreated . ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġfile Ġexists Ġor Ġis Ġcreated Ġsuccessfully , Ġotherwise Ġfalse . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ Security Exception ] ĠUnauthorized Ġaccess Ġto Ġfile / directory . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Throws ( IllegalArgumentException :: class , ĠSecurity Exception :: class ) ĊĠĠĠ Ġfun Ġcreate New File If DoesNotExist (@ ConfigFile Ġconfig File Reference : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġbroadcast Logger . debug (" Creating Ġ$ configFile Reference Ġif ĠD NE ") ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġwhen Ġ( configFile Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . CONTROL _ PORT _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( control Port File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . control Port File . createNew File If DoesNotExist () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . COOKIE _ AUTH _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( cookie Auth File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . cookie Auth File . createNew File If DoesNotExist () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . HOSTNAME _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( hostname File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . hostname File . createNew File If DoesNotExist () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("$ configFile Reference Ġis Ġnot Ġa Ġvalid Ġargument ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( created ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Logger . warn (" Could Ġnot Ġcreate Ġ$ configFile Reference Ġparent Ġdirectories ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroadcast Logger . warn (" Could Ġnot Ġcreate Ġ$ configFile Reference Ġfile ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDeletes Ġthe Ġreferenced Ġfile . ĠSee Ġ[ Core Consts . ConfigFile ] Ġannotation Ġclass ĊĠĠĠĠ Ġ* Ġfor Ġaccepted Ġarguments . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ configFile Reference ] ĠString Ġthat Ġdefines Ġwhat Ġfile Ġis Ġto Ġbe Ġdelete . ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġit Ġwas Ġdeleted , Ġfalse Ġif Ġit Ġfailed . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ Security Exception ] ĠUnauthorized Ġaccess Ġto Ġfile / directory . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ IllegalArgumentException ] ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Throws ( Security Exception :: class , ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġdelete File (@ ConfigFile Ġconfig File Reference : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġbroadcast Logger . debug (" Deleting Ġ$ configFile Reference ") ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( configFile Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . CONTROL _ PORT _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( control Port File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . control Port File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . COOKIE _ AUTH _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( cookie Auth File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . cookie Auth File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . HOSTNAME _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( hostname File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . hostname File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("$ configFile Reference Ġis Ġnot Ġa Ġvalid Ġargument ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReads Ġthe Ġreferenced Ġfile . ĠSee Ġ[ Core Consts . ConfigFile ] Ġannotation Ġclass ĊĠĠĠĠ Ġ* Ġfor Ġaccepted Ġarguments . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ configFile Reference ] ĠString Ġthat Ġdefines Ġwhat Ġfile Ġis Ġto Ġbe Ġread . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġcontents Ġof Ġthe Ġfile . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ IOException ] ĠErrors Ġwhile Ġreading Ġfile . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ EOF Exception ] ĠErrors Ġwhile Ġreading Ġfile . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ Security Exception ] ĠUnauthorized Ġaccess Ġto Ġfile / directory . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠEOF Exception :: class , ĠSecurity Exception :: class ) ĊĠĠĠ Ġfun ĠreadFile (@ ConfigFile Ġconfig File Reference : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġbroadcast Logger . debug (" Reading Ġ$ configFile Reference ") ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( configFile Reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . CONTROL _ PORT _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( control Port File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . control Port File . read Tor ConfigFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . COOKIE _ AUTH _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( cookie Auth File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . cookie Auth File . read Tor ConfigFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig File . HOSTNAME _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( hostname File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtor Config Files . hostname File . read Tor ConfigFile () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("$ configFile Reference Ġis Ġnot Ġa Ġvalid Ġargument ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////// ///// ĊĠĠĠ Ġ/// ĠData Dir Ġ/// ĊĠĠĠ Ġ// //////// ///// ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġthe Ġconfigured Ġtor Ġdata Ġdirectory ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠTrue Ġif Ġdirectory Ġexists Ġor Ġis Ġcreated Ġsuccessfully , Ġotherwise Ġfalse . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ Security Exception ] ĠUnauthorized Ġaccess Ġto Ġfile / directory . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Throws ( Security Exception :: class ) ĊĠĠĠ Ġfun Ġcreate Data Dir (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġsynchronized ( data Dir Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtor Config Files . data Dir . exists () Ġ|| Ġtor Config Files . data Dir . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDeletes Ġthe Ġconfigured Ġtor Ġdata Ġdirectory , Ġexcept Ġfor Ġhidden services . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ RuntimeException ] ĠWas Ġunable Ġto Ġdelete Ġa Ġfile . ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ Security Exception ] ĠUnauthorized Ġaccess Ġto Ġfile / directory . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Throws ( RuntimeException :: class , ĠSecurity Exception :: class ) ĊĠĠĠ Ġfun Ġdelete Data Dir Except Hidden Service And Auth Private () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( data Dir Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Files Ġ= Ġtor Config Files . data Dir . list Files () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġlist Files ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isDirectory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . absolute Path Ġ!= Ġtor Config Files . hidden Service Dir . absolute Path Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . absolute Path Ġ!= Ġtor Config Files . v 3 Auth Private Dir . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Utilities . recursive File Delete ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! file . delete ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Could Ġnot Ġdelete Ġfile Ġ${ file . absolute Path }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////////////// // ĊĠĠĠ Ġ/// ĠHost name File Ġ/// ĊĠĠĠ Ġ// //////////////// // ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Throws ( Security Exception :: class ) ĊĠĠĠ Ġfun Ġset Hostname Dir Permissions To ReadOnly (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġsynchronized ( hostname File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent File Ġ= Ġtor Config Files . hostname File . parent File Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Utilities . set To ReadOnly Permissions ( parent File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// //////// / ĊĠĠĠ Ġ/// ĠDNS Ġ/// ĊĠĠĠ Ġ// //////// / ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġdefault Ġresol v . conf Ġfile Ġusing Ġthe ĠQuad 9 Ġname Ġserver . ĠThis Ġis Ġa Ġconvenience ĊĠĠĠĠ Ġ* Ġmethod . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġresolve Conf Ġfile Ġwith Ġnewly Ġadded Ġip Ġaddresses Ġfor ĠQuad 9 ĊĠĠĠĠ Ġ* Ġ@ throws Ġ[ IOException ] Ġfrom ĠFile Writer ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġcreate Quad 9 Name server File (): ĠFile Ġ= ĊĠĠĠĠĠĠĠ Ġsynchronized ( res olv Conf File Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġtor Config Files . resolve Conf ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠBuffered Writer ( FileWriter ( file )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write (" name server Ġ 9 . 9 . 9 . 9 \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write (" name server Ġ 1 4 9 . 1 1 2 . 1 1 2 . 1 1 2 \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfile ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġsystem Ġprocess Ġid Ġof Ġthe Ġprocess Ġrunning Ġthis Ġon ion Ġproxy ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġprocess Ġid ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġfun Ġget Process Id (): ĠString Ġ= ĊĠĠĠĠĠĠĠ ĠProcess . my Pid (). toString () Ċ }