add socket protect

This commit is contained in:
Розов Никита Валерьевич 2021-10-18 16:51:45 +03:00
parent 0f89c40a1d
commit ebfd50f30d
3 changed files with 66 additions and 9 deletions

View file

@ -83,14 +83,13 @@ class OpenVPNThreadv3(var service: VPNService): ClientAPI_OpenVPNClient(), Runna
}
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()
}

View file

@ -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

View file

@ -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 -> {