package Ġcom . kas per sky . adb server . des dev connection Ċ Ċ import Ġcom . kas per sky . adb server . common . api . Command Executor Ċ import Ġcom . kas per sky . adb server . command types . A db Command Ċ import Ġcom . kas per sky . adb server . common . log . logger . Logger Ċ import Ġjava . net . Server Socket Ċ import Ġjava . net . Socket Ċ import Ġkotlin . random . Random Ċ Ċ internal Ġclass ĠDesktop Device Socket Connection Forward Impl Ġ: ĠDesktop Device Socket Connection Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEVICE _ PORT : ĠInt Ġ= Ġ 8 5 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN _ CLIENT _ PORT : ĠInt Ġ= Ġ 6 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ CLIENT _ PORT : ĠInt Ġ= Ġ 4 9 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOCAL _ HOST : ĠString Ġ= Ġ" 1 2 7 . 0 . 0 . 1 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclient Ports List : ĠMutable List < Int > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġoverride Ġfun Ġget Desktop Socket Load ( executor : ĠCommand Executor , Ġlogger : ĠLogger ): Ġ() Ġ-> ĠSocket Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Port Ġ= Ġget Free Port () ĊĠĠĠĠĠĠĠ Ġlogger . d (" calculated Ġdesktop Ġclient Ġport =$ client Port ") ĊĠĠĠĠĠĠĠ Ġforward Ports ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Port , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDEVICE _ PORT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġlogger . d (" desktop Ġclient Ġport =$ client Port Ġis Ġforwarding Ġwith Ġdevice Ġserver Ġport =$ DEVICE _ PORT ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . d (" started Ġwith Ġip =$ LOCAL _ HOST , Ġport =$ client Port ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready Client Socket Ġ= ĠSocket ( LOCAL _ HOST , Ġclient Port ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . d (" completed Ġwith Ġip =$ LOCAL _ HOST , Ġport =$ client Port ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġready Client Socket ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Free Port (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnew Client Port : ĠInt ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Client Port Ġ= ĠRandom . Default . nextInt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ CLIENT _ PORT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAX _ CLIENT _ PORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! client Ports List . contains ( new Client Port )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Ports List . add ( new Client Port ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Client Port ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġforward Ports ( executor : ĠCommand Executor , Ġfrom Port : ĠInt , Ġto Port : ĠInt , Ġlogger : ĠLogger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . d (" from Port =$ from Port , Ġto Port =$ to Port Ġstarted ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġexecutor . execute ( A db Command (" forward Ġtcp :$ from Port Ġtcp :$ to Port ")) ĊĠĠĠĠĠĠĠ Ġlogger . d (" from Port =$ from Port , Ġto Port =$ to Port ) Ġfinished Ġwith Ġresult =$ result ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Device Socket Load ( logger : ĠLogger ): Ġ() Ġ-> ĠSocket Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . d (" Started ") ĊĠĠĠĠĠĠĠ Ġval Ġserver Socket Ġ= ĠServer Socket ( DEVICE _ PORT ) ĊĠĠĠĠĠĠĠ Ġval Ġready Server Socket Ġ= Ġserver Socket . accept () ĊĠĠĠĠĠĠĠ Ġlogger . d (" Completed ") ĊĠĠĠĠĠĠĠ Ġready Server Socket ĊĠĠĠ Ġ} Ċ } Ċ