add socket protect
This commit is contained in:
parent
0f89c40a1d
commit
ebfd50f30d
3 changed files with 66 additions and 9 deletions
|
|
@ -82,15 +82,14 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun tun_builder_reroute_gw(ipv4: Boolean , ipv6: Boolean , flags: Long): Boolean {
|
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)
|
mService.addRoute("0.0.0.0", 0)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun tun_builder_exclude_route(address: String, prefix_length: Int, metric: Int, ipv6: Boolean): Boolean {
|
override fun tun_builder_exclude_route(address: String, prefix_length: Int, metric: Int, ipv6: Boolean): Boolean {
|
||||||
if (address.equals("remote_host"))
|
Log.v(tag, "tun_builder_exclude_route")
|
||||||
return false
|
|
||||||
|
|
||||||
mService.addRoute(address, prefix_length);
|
mService.addRoute(address, prefix_length);
|
||||||
return true
|
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 {
|
override fun tun_builder_add_dns_server(address: String , ipv6: Boolean): Boolean {
|
||||||
mService.addDNS(address)
|
mService.addDNS(address)
|
||||||
|
mService.addRoute(address, 32)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun tun_builder_set_session_name(name: String ): Boolean {
|
override fun tun_builder_set_session_name(name: String ): Boolean {
|
||||||
Log.v(tag, "We should call this session: " + name)
|
Log.v(tag, "We should call this session: " + name)
|
||||||
|
mService.setSessionName(name)
|
||||||
return true
|
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() {
|
override fun stop() {
|
||||||
super.stop()
|
super.stop()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
|
import android.net.ProxyInfo
|
||||||
import android.os.ParcelFileDescriptor
|
import android.os.ParcelFileDescriptor
|
||||||
import android.system.OsConstants
|
import android.system.OsConstants
|
||||||
import com.wireguard.android.util.SharedLibraryLoader
|
import com.wireguard.android.util.SharedLibraryLoader
|
||||||
|
|
@ -152,7 +153,7 @@ class VPNService : android.net.VpnService() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
Log.i(tag, "Permission okay")
|
Log.i(tag, "Permission okay")
|
||||||
mConfig = json
|
mConfig = json!!
|
||||||
mProtocol = mConfig!!.getString("protocol")
|
mProtocol = mConfig!!.getString("protocol")
|
||||||
when (mProtocol) {
|
when (mProtocol) {
|
||||||
"openvpn" -> startOpenVpn()
|
"openvpn" -> startOpenVpn()
|
||||||
|
|
@ -166,6 +167,12 @@ class VPNService : android.net.VpnService() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun establish(): ParcelFileDescriptor? {
|
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()
|
return mbuilder.establish()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -174,17 +181,37 @@ class VPNService : android.net.VpnService() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addAddress(ip: String, len: Int){
|
fun addAddress(ip: String, len: Int){
|
||||||
|
Log.v(tag, "mbuilder.addAddress($ip, $len)")
|
||||||
mbuilder.addAddress(ip, len)
|
mbuilder.addAddress(ip, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addRoute(ip: String, len: Int){
|
fun addRoute(ip: String, len: Int){
|
||||||
|
Log.v(tag, "mbuilder.addRoute($ip, $len)")
|
||||||
mbuilder.addRoute(ip, len)
|
mbuilder.addRoute(ip, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addDNS(ip: String){
|
fun addDNS(ip: String){
|
||||||
|
Log.v(tag, "mbuilder.addDnsServer($ip)")
|
||||||
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() {
|
fun turnOff() {
|
||||||
Log.v(tag, "Try to disable tunnel")
|
Log.v(tag, "Try to disable tunnel")
|
||||||
when(mProtocol){
|
when(mProtocol){
|
||||||
|
|
@ -205,7 +232,7 @@ class VPNService : android.net.VpnService() {
|
||||||
private fun ovpnTurnOff() {
|
private fun ovpnTurnOff() {
|
||||||
mOpenVPNThreadv3?.stop()
|
mOpenVPNThreadv3?.stop()
|
||||||
mOpenVPNThreadv3 = null
|
mOpenVPNThreadv3 = null
|
||||||
Log.e(tag, "mOpenVPNThreadv3?.stop()")
|
Log.e(tag, "mOpenVPNThreadv3 stop!")
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Configures an Android VPN Service Tunnel
|
* Configures an Android VPN Service Tunnel
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ class VPNServiceBinder(service: VPNService) : Binder() {
|
||||||
* returns true if the [code] was accepted
|
* returns true if the [code] was accepted
|
||||||
*/
|
*/
|
||||||
override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean {
|
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) {
|
when (code) {
|
||||||
ACTIONS.activate -> {
|
ACTIONS.activate -> {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue