package Ġcom . v 2 ray . ang . service Ċ Ċ import Ġandroid . app .* Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net .* Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Parcel FileDescriptor Ċ import Ġandroid . os . Strict Mode Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroid . util . Log Ċ import Ġcom . tencent . mm kv . MM KV Ċ import Ġcom . v 2 ray . ang . AppConfig Ċ import Ġcom . v 2 ray . ang . R Ċ import Ġcom . v 2 ray . ang . util . M mk v Manager Ċ import Ġcom . v 2 ray . ang . util . Utils Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . io . File Ċ import Ġjava . lang . ref . Soft Reference Ċ Ċ class ĠV 2 Ray Vpn Service Ġ: ĠV pn Service (), ĠService Control Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsettings Storage Ġby Ġlazy Ġ{ ĠM MK V . mm kv With ID ( M mk v Manager . ID _ SETTING , ĠM MK V . MULTI _ PROCESS _ MODE ) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Interface : ĠParcel FileDescriptor ĊĊĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠ Ġ* ĠUnfortunately Ġregister Default Network Callback Ġis Ġgoing Ġto Ġreturn Ġour ĠVPN Ġinterface : Ġhttps :// android . google source . com / platform / frameworks / base / +/ dda 1 5 6 ab 0 c 5 d 6 6 ad 8 2 bd cf 7 6 cda 0 7 cbc 0 a 9 c 8 a 2 e ĊĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠ Ġ* ĠThis Ġmakes Ġdoing Ġa Ġrequest Network Ġwith ĠREQUEST Ġnecessary Ġso Ġthat Ġwe Ġdon 't Ġget ĠALL Ġpossible Ġnetworks Ġthat ĊĠĠĠĠĠĠĠ Ġ* Ġsatisfies Ġdefault Ġnetwork Ġcapabilities Ġbut Ġonly ĠTHE Ġdefault Ġnetwork . ĠUnfortunately Ġwe Ġneed Ġto Ġhave ĊĠĠĠĠĠĠĠ Ġ* Ġandroid . permission . CHANGE _ NETWORK _ STATE Ġto Ġbe Ġable Ġto Ġcall Ġrequest Network . ĊĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠ Ġ* ĠSource : Ġhttps :// android . google source . com / platform / frameworks / base / +/ 2 df 4 c 7 d / services / core / java / com / android / server / Connectivity Service . java # 8 8 7 ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ delegate : Requires Api ( Build . VERSION _ CODES . P ) ĊĠĠĠ Ġprivate Ġval Ġdefault Network Request Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠNetwork Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Capability ( Network Capabilities . NET _ CAP ABILITY _ INTER NET ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Capability ( Network Capabilities . NET _ CAP ABILITY _ NOT _ RE STRICT ED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconnectivity Ġby Ġlazy Ġ{ Ġget System Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager Ġ} ĊĊĠĠĠ Ġ@ delegate : Requires Api ( Build . VERSION _ CODES . P ) ĊĠĠĠ Ġprivate Ġval Ġdefault Network Callback Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠConnect ivity Manager . Network Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Available ( network : ĠNetwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Under lying Networks ( array Of ( network )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Capabilities Changed ( network : ĠNetwork , Ġnetwork Capabilities : ĠNetwork Capabilities ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġit 's Ġa Ġgood Ġidea Ġto Ġrefresh Ġcapabilities ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Under lying Networks ( array Of ( network )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Lost ( network : ĠNetwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Under lying Networks ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĊĠĠĠĠĠĠĠ Ġval Ġpolicy Ġ= ĠStrict Mode . Thread Policy . Builder (). permit All (). build () ĊĠĠĠĠĠĠĠ ĠStrict Mode . set Thread Policy ( policy ) ĊĠĠĠĠĠĠĠ ĠV 2 Ray Service Manager . service Control Ġ= ĠSoft Reference ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Re voke () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop V 2 Ray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Low Memory () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop V 2 Ray () ĊĠĠĠĠĠĠĠ Ġsuper . on Low Memory () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġstop V 2 Ray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ( parameters : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġprepare Ġ= Ġprepare ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( prepare Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġold Ġinterface Ġhas Ġexactly Ġthe Ġsame Ġparameters , Ġuse Ġit ! ĊĠĠĠĠĠĠĠ Ġ// ĠConfigure Ġa Ġbuilder Ġwhile Ġparsing Ġthe Ġparameters . ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġenable Local Dns Ġ= Ġsettings Storage ?. decode Bool ( AppConfig . PRE F _ LOCAL _ DNS _ ENABLED ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġrouting Mode Ġ= Ġsettings Storage ?. decode String ( AppConfig . PRE F _ ROUT ING _ MODE ) Ġ?: Ġ" 0 " ĊĊĠĠĠĠĠĠĠ Ġparameters . split (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . split (",") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it [ 0 ][ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' m ' Ġ-> Ġbuilder . set M tu ( java . lang . Short . parse Short ( it [ 1 ]). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' s ' Ġ-> Ġbuilder . add Search Domain ( it [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' a ' Ġ-> Ġbuilder . add Address ( it [ 1 ], ĠInteger . parseInt ( it [ 2 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' r ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( routing Mode Ġ== Ġ" 1 " Ġ|| Ġrouting Mode Ġ== Ġ" 3 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it [ 1 ] Ġ== Ġ":: ") Ġ{ Ġ// not Ġvery Ġeleg ant , Ġshould Ġmove ĠV pn Ġsetting Ġin ĠKotlin , Ġsimplify Ġgo Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Route (" 2 0 0 0 :: ", Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString Array ( R . array . bypass _ private _ ip _ address ). forEach Ġ{ Ġcid r Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddr Ġ= Ġcid r . split ('/') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Route ( addr [ 0 ], Ġaddr [ 1 ]. toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Route ( it [ 1 ], ĠInteger . parseInt ( it [ 2 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' d ' Ġ-> Ġbuilder . add Dns Server ( it [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif (! enable Local Dns ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . get Vpn Dns Servers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Utils . is Pure IpAddress ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Dns Server ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . set Session ( V 2 Ray Service Manager . current Config ?. remarks . or Empty ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Storage ?. decode Bool ( AppConfig . PRE F _ PER _ APP _ PROXY ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapps Ġ= Ġsettings Storage ?. decode String Set ( AppConfig . PRE F _ PER _ APP _ PROXY _ SET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbypass Apps Ġ= Ġsettings Storage ?. decode Bool ( AppConfig . PRE F _ BY PASS _ APPS ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapps ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bypass Apps ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Dis allowed Application ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add Allowed Application ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Logger . d ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠClose Ġthe Ġold Ġinterface Ġsince Ġthe Ġparameters Ġhave Ġbeen Ġchanged . ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Interface . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignored ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity . request Network ( default Network Request , Ġdefault Network Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Meter ed ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġnew Ġinterface Ġusing Ġthe Ġbuilder Ġand Ġsave Ġthe Ġparameters . ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Interface Ġ= Ġbuilder . est ablish () !! ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnon - nullable Ġlateinit Ġvar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop V 2 Ray () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsend Fd () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Fd () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfd Ġ= Ġm Interface . file Descriptor ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠFile ( Utils . package Path ( application Context ), Ġ" sock _ path "). absolute Path ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtries Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 L Ġshl Ġtries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( packageName , Ġ" send Fd Ġtries : Ġ$ tri es ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Socket (). use Ġ{ Ġlocal Socket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Socket . connect ( Local SocketAddress ( path , ĠLocal SocketAddress . Namespace . FILE SYSTEM )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Socket . set File Descriptors For Send ( array Of ( fd )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Socket . output Stream . write ( 4 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( packageName , Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tri es Ġ> Ġ 5 ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtries Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ ĠV 2 Ray Service Manager . start V 2 ray Point () ĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠĠĠĠĠĠĠ Ġ// return Ġsuper . onStart Command ( intent , Ġflags , Ġstart Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop V 2 Ray ( is For ced : ĠBoolean Ġ= Ġtrue ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġconfig Name Ġ= Ġdefault DP reference . get Pref String ( PRE F _ CUR R _ CONFIG _ GUID , Ġ"") Ċ // ĠĠĠĠĠĠĠ Ġval Ġempty Info Ġ= ĠV pn Network Info () Ċ // ĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġload Vpn Network Info ( config Name , Ġempty Info ) !! Ġ+ Ġ( last Network Info Ġ?: Ġempty Info ) Ċ // ĠĠĠĠĠĠĠ Ġsave Vpn Network Info ( config Name , Ġinfo ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnectivity . unregister Network Callback ( default Network Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignored ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠV 2 Ray Service Manager . stop V 2 ray Point () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is For ced ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// stop Self Ġhas Ġto Ġbe Ġcalled Ġahead Ġof Ġm Interface . close (). Ġotherwise Ġv 2 ray Ġcore Ġcannot Ġbe Ġst oop ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// It 's Ġstr age Ġbut Ġtrue . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// This Ġcan Ġbe Ġverified Ġby Ġputting Ġstop self () Ġbehind Ġand Ġcall Ġstop Loop Ġand Ġstart Loop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// in Ġa Ġrow Ġfor Ġseveral Ġtimes . ĠYou Ġwill Ġfind Ġthat Ġlater Ġcreated Ġv 2 ray Ġcore Ġreport Ġport Ġin Ġuse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// which Ġmeans Ġthe Ġfirst Ġv 2 ray Ġcore Ġsomehow Ġfailed Ġto Ġstop Ġand Ġrelease Ġthe Ġport . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Self () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Interface . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignored ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Service (): ĠService Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Service ( parameters : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup ( parameters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop V 2 Ray ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġv pn Protect ( socket : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprotect ( socket ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ