From ab1e31b2ff7fc7926d10053b5039ab474527d935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=BE=D0=B7=D0=BE=D0=B2=20=D0=9D=D0=B8=D0=BA=D0=B8?= =?UTF-8?q?=D1=82=D0=B0=20=D0=92=D0=B0=D0=BB=D0=B5=D1=80=D1=8C=D0=B5=D0=B2?= =?UTF-8?q?=D0=B8=D1=87?= Date: Mon, 11 Oct 2021 15:36:40 +0300 Subject: [PATCH] openvpn connection logic fix --- .gitignore | 2 ++ .../src/org/amnezia/vpn/OpenVPNThreadv3.kt | 33 ++++++++++------- .../android/src/org/amnezia/vpn/VPNService.kt | 35 +++++-------------- client/client.pro | 4 +-- 4 files changed, 33 insertions(+), 41 deletions(-) diff --git a/.gitignore b/.gitignore index ebe0acdf..b3ed9c68 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,8 @@ deploy/build/* deploy/build_32/* deploy/build_64/* winbuild*.bat +client/android/src/net/ + # Qt-es /.qmake.cache diff --git a/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt b/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt index 6a8223a7..cac886ab 100644 --- a/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt +++ b/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt @@ -37,23 +37,22 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna override fun run() { //TEMP - Log.i(tag, "run()") - val lConfigData: String = readFileDirectlyAsText("/data/local/tmp/osinit.ovpn") + + val lConfigData: String = readFileDirectlyAsText("/data/local/tmp/android_conf.ovpn") val config: ClientAPI_Config = ClientAPI_Config() config.content = lConfigData - val lCreds: ClientAPI_ProvideCreds = ClientAPI_ProvideCreds() + val lCreds: ClientAPI_ProvideCreds = ClientAPI_ProvideCreds() //username from config or GUI - lCreds.username = "username" + lCreds.username = "" //password from config or GUI - lCreds.password = "password" + lCreds.password = "" provide_creds(lCreds) - eval_config(config) connect() - Log.i(tag, "connect()") + Log.i(tag, "Connect succesfully") } fun readFileDirectlyAsText(fileName: String): String = File(fileName).readText(Charsets.UTF_8) @@ -67,17 +66,13 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna } - -// override fun reconnect() { -// reconnect(1); -// } override fun tun_builder_new(): Boolean { return true } override fun tun_builder_establish(): Int { Log.v(tag, "tun_builder_establish") - return mService.turnOn(null)!!.detachFd() + return mService.establish()!!.detachFd() } override fun tun_builder_add_address(address: String , prefix_length: Int , gateway: String , ipv6:Boolean , net30: Boolean ): Boolean { @@ -87,6 +82,15 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna } override fun tun_builder_add_route(address: String, prefix_length: Int, metric: Int, ipv6: Boolean): Boolean { + Log.v(tag, "tun_builder_add_route") + if (address.equals("remote_host")) + return false + + mService.addRoute(address, prefix_length); + return true + } + + override fun tun_builder_exclude_route(address: String, prefix_length: Int, metric: Int, ipv6: Boolean): Boolean { if (address.equals("remote_host")) return false @@ -100,6 +104,7 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna } override fun tun_builder_set_mtu(mtu: Int): Boolean { + Log.v(tag, "tun_builder_set_mtu") mService.setMtu(mtu) return true } @@ -109,5 +114,9 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna return true } + override fun tun_builder_set_session_name(name: String ): Boolean { + Log.v(tag, "We should call this session: " + name) + return true + } } diff --git a/client/android/src/org/amnezia/vpn/VPNService.kt b/client/android/src/org/amnezia/vpn/VPNService.kt index bee8b264..1d8535d4 100644 --- a/client/android/src/org/amnezia/vpn/VPNService.kt +++ b/client/android/src/org/amnezia/vpn/VPNService.kt @@ -192,36 +192,16 @@ class VPNService : android.net.VpnService() { // NotificationUtil.show(this) // Go foreground - // val builder = Builder() - // // setupBuilder(wireguard_conf, builder) - // builder.addAddress("192.168.194.1", 24) - // builder.addDnsServer("8.8.8.8") - // builder.addRoute("0.0.0.0", 0) - // builder.setSession("mvpn0") - // builder.establish() - - - // Configure a new interface from our VpnService instance. This must be done - // from inside a VpnService. - -// val builder = Builder() - // Create a local TUN interface using predetermined addresses. In your app, - // you typically use values returned from the VPN gateway during handshaking. -// val localTunnel = builder -// .addAddress("10.0.20.1", 0) -// .addRoute("192.168.111.0", 24) -// .addDnsServer("192.168.111.1") -// .establish() - val localTunnel = mbuilder.establish() - - Log.v(tag, "builder.establish()") startOpenVpn() - return localTunnel + return 1//localTunnel } + fun establish(): ParcelFileDescriptor? { + return mbuilder.establish() + } fun setMtu(mtu: Int) { Log.v(tag, "setMtu()" + mtu) @@ -245,9 +225,9 @@ class VPNService : android.net.VpnService() { fun turnOff() { Log.v(tag, "Try to disable tunnel") - // wgTurnOff(currentTunnelHandle) - // currentTunnelHandle = -1 - // stopForeground(false) + wgTurnOff(currentTunnelHandle) + currentTunnelHandle = -1 + stopForeground(false) isUp = false } @@ -350,6 +330,7 @@ class VPNService : android.net.VpnService() { mOpenVPNThreadv3?.run() }).start() Log.i(tag, "OpenVPNThreadv3 start") + isUp = true } companion object { diff --git a/client/client.pro b/client/client.pro index 047b6dda..14069e3f 100644 --- a/client/client.pro +++ b/client/client.pro @@ -193,10 +193,10 @@ android { android/gradlew \ android/gradlew.bat \ android/res/values/libs.xml \ + android/src/org/amnezia/vpn/OpenVPNThreadv3.kt \ android/src/org/amnezia/vpn/VpnService.kt \ android/src/org/amnezia/vpn/VpnServiceBinder.kt \ - android/src/org/amnezia/vpn/qt/VPNPermissionHelper.kt \ - android/src/org/amnezia/vpn/VPNCli.kt + android/src/org/amnezia/vpn/qt/VPNPermissionHelper.kt ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android