diff --git a/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt b/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt index e4845ef0..dc2da959 100644 --- a/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt +++ b/client/android/src/org/amnezia/vpn/OpenVPNThreadv3.kt @@ -82,15 +82,14 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna return true } - override fun tun_builder_reroute_gw(ipv4: Boolean , ipv6: Boolean , flags: Long): Boolean { - mService.addRoute("0.0.0.0", 0) - return true + override fun tun_builder_reroute_gw(ipv4: Boolean, ipv6: Boolean , flags: Long): Boolean { + Log.v(tag, "tun_builder_reroute_gw") + mService.addRoute("0.0.0.0", 0) + 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 - + Log.v(tag, "tun_builder_exclude_route") mService.addRoute(address, prefix_length); return true } @@ -108,14 +107,45 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna override fun tun_builder_add_dns_server(address: String , ipv6: Boolean): Boolean { mService.addDNS(address) + mService.addRoute(address, 32) return true } override fun tun_builder_set_session_name(name: String ): Boolean { Log.v(tag, "We should call this session: " + name) + mService.setSessionName(name) return true } + override fun tun_builder_set_proxy_http(host: String, port: Int): Boolean { + return mService.addHttpProxy(host, port); + } + + override fun tun_builder_set_proxy_https(host: String , port: Int): Boolean { + Log.v(tag, "tun_builder_set_proxy_https") + return false + } + + override fun pause_on_connection_timeout(): Boolean { + Log.v(tag, "pause_on_connection_timeout") + return true + } + + override fun tun_builder_add_search_domain(domain: String ): Boolean { + mService.setDomain(domain); + return true + } + + override fun tun_builder_set_layer(layer: Int): Boolean { + return layer == 3 + } + + override fun socket_protect(socket: Int, remote: String, ipv6: Boolean): Boolean { + Log.v(tag, "socket_protect") + return mService.protect(socket); + + } + override fun stop() { super.stop() } diff --git a/client/android/src/org/amnezia/vpn/VPNService.kt b/client/android/src/org/amnezia/vpn/VPNService.kt index 0d061b72..b34d624f 100644 --- a/client/android/src/org/amnezia/vpn/VPNService.kt +++ b/client/android/src/org/amnezia/vpn/VPNService.kt @@ -8,6 +8,7 @@ import android.content.Context import android.content.Intent import android.os.Build import android.os.IBinder +import android.net.ProxyInfo import android.os.ParcelFileDescriptor import android.system.OsConstants import com.wireguard.android.util.SharedLibraryLoader @@ -152,7 +153,7 @@ class VPNService : android.net.VpnService() { return 0 } Log.i(tag, "Permission okay") - mConfig = json + mConfig = json!! mProtocol = mConfig!!.getString("protocol") when (mProtocol) { "openvpn" -> startOpenVpn() @@ -166,6 +167,12 @@ class VPNService : android.net.VpnService() { } fun establish(): ParcelFileDescriptor? { + mbuilder.allowFamily(OsConstants.AF_INET) + mbuilder.allowFamily(OsConstants.AF_INET6) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) mbuilder.setMetered(false) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) setUnderlyingNetworks(null) + return mbuilder.establish() } @@ -174,17 +181,37 @@ class VPNService : android.net.VpnService() { } fun addAddress(ip: String, len: Int){ + Log.v(tag, "mbuilder.addAddress($ip, $len)") mbuilder.addAddress(ip, len) } fun addRoute(ip: String, len: Int){ + Log.v(tag, "mbuilder.addRoute($ip, $len)") mbuilder.addRoute(ip, len) } fun addDNS(ip: String){ + Log.v(tag, "mbuilder.addDnsServer($ip)") mbuilder.addDnsServer(ip) } + fun setSessionName(name: String){ + Log.v(tag, "mbuilder.setSession($name)") + mbuilder.setSession(name) + } + + fun addHttpProxy(host: String, port: Int): Boolean{ + val proxyInfo = ProxyInfo.buildDirectProxy(host, port) + Log.v(tag, "mbuilder.addHttpProxy($host, $port)") + mbuilder.setHttpProxy(proxyInfo) + return true + } + + fun setDomain(domain: String) { + Log.v(tag, "mbuilder.setDomain($domain)") + mbuilder.addSearchDomain(domain) + } + fun turnOff() { Log.v(tag, "Try to disable tunnel") when(mProtocol){ @@ -205,7 +232,7 @@ class VPNService : android.net.VpnService() { private fun ovpnTurnOff() { mOpenVPNThreadv3?.stop() mOpenVPNThreadv3 = null - Log.e(tag, "mOpenVPNThreadv3?.stop()") + Log.e(tag, "mOpenVPNThreadv3 stop!") } /** * Configures an Android VPN Service Tunnel diff --git a/client/android/src/org/amnezia/vpn/VPNServiceBinder.kt b/client/android/src/org/amnezia/vpn/VPNServiceBinder.kt index 8ed00b85..966ac518 100644 --- a/client/android/src/org/amnezia/vpn/VPNServiceBinder.kt +++ b/client/android/src/org/amnezia/vpn/VPNServiceBinder.kt @@ -43,7 +43,7 @@ class VPNServiceBinder(service: VPNService) : Binder() { * returns true if the [code] was accepted */ override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean { - Log.i(tag, "GOT TRANSACTION $code") + Log.i(tag, "GOT TRANSACTION " + code) when (code) { ACTIONS.activate -> {